支付宝app支付

支付宝官方文档

第一步:返回订单信息给前端,令其调用支付宝。

public String  zfb_payrequest( ){
            String orderInfo = null;  
            Map<String, Object> map=new HashMap<>();
            //。。。。。省略插入订单列表操作
            
       //公司账号信息
            String APP_PRIVATE_KEY="xxxxxxxxx";
            String ALIPAY_PUBLIC_KEY="xxxxxxx";
            String APP_ID="xxxxxxx";
            //实例化客户端
            AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",APP_ID, APP_PRIVATE_KEY, "json", "UTF-8", ALIPAY_PUBLIC_KEY, "RSA2");
            //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
            AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
            
            //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
            AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
          //  model.setPassbackParams(user_id);;  //描述信息  添加附加数据
            model.setSubject("充值"); //商品标题
            model.setOutTradeNo(out_trade_no); //商家订单编号
            model.setTimeoutExpress("30m"); //超时关闭该订单时间
            model.setTotalAmount(money);  //订单总金额
            model.setProductCode("QUICK_MSECURITY_PAY"); //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
            request.setBizModel(model);
            request.setNotifyUrl("http://xxx.xx.xx.xx/xx/xx/xx");  //回调地址(外网可访问) 

        try { 
          //这里和普通的接口调用不同,使用的是sdkExecute 
          AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); System.out.println(response.getBody());
          //就是orderString 可以直接给客户端请求,无需再做处理。 
          orderInfo = response.getBody(); 
          }catch (AlipayApiException e){
           e.printStackTrace(); 
          } 
      
  map.put("orderString",orderInfo); 
  map.put("result", 1); 
  String jsonString = JSON.toJSONString(map);
  return jsonString;
} 

第二步,接收支付宝异步回调信息

对于App支付产生的交易,支付宝会根据原始支付API中传入的异步通知地址notify_url,通过POST请求的形式将支付结果作为参数通知到商户

public String  aliPay_notify(Map requestParams,HttpServletRequest request){                   
            System.out.println(
"被调用了。。。。。"); String APP_PRIVATE_KEY="xxxxx"; //切记alipaypublickey是支付宝的公钥 String alipaypublickey="xxxxxxxxxxxxxx"; String APP_ID="2018041202543416"; requestParams=request.getParameterMap(); System.out.println("支付宝支付结果通知"+requestParams.toString()); //获取支付宝POST过来反馈信息 Map<String,String> params = new HashMap<String,String>(); for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } //乱码解决,这段代码在出现乱码时使用。 //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); params.put(name, valueStr); } System.out.println("--0101110110101--"); System.out.println(params.toString()+"++"); //切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。 //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type) try { //验证签名(判断是否是支付宝传过来的) boolean flag = AlipaySignature.rsaCheckV1(params, alipaypublickey, "UTF-8", "RSA2"); System.out.println("结果:"+flag+"--------"); if(flag){ if("TRADE_SUCCESS".equals(params.get("trade_status"))){ //付款金额 String money = params.get("buyer_pay_amount"); //商户订单号 String out_trade_no = params.get("out_trade_no"); //支付宝交易号 String trade_no = params.get("trade_no"); //交易状态 String trade_status = params.get("trade_status"); //附加数据
                     String passback_params = URLDecoder.decode(params.get("passback_params"));
                      //支付成功
                                    if (trade_status.equals("TRADE_SUCCESS")) {
                                        System.out.println("支付成功后操作。。。star");
                                   
                                  }
                            }
                        } catch (AlipayApiException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }return "success";
                }

至此,支付结束。

猜你喜欢

转载自www.cnblogs.com/dztHome/p/8889149.html