记录一波支付宝支付功能

相对微信支付而言,支付宝的支付开发文档易懂。并且有封装好了的sdk.开发者很容易实现支付宝支付功能。先说说的支付宝的支付逻辑。我公司申请的是app支付。后台需要自己生成商户唯一的订单号,调用支付宝封装号的sdk接口。调用成功,支付宝返回一个加密的支付凭证。可以直接返回到前端app。不用再做处理,前端那到这个支付凭证。唤醒支付宝app支付金额。支付成功后,前端app会跳转一个界面。支付宝会异步调用一个自己服务器后端的一个方法。确定是否正在付款成功。最终是否付款成功也以这个回调服务器这个为准。代码如下。虽然有点乱。

 //获得初始化的AlipayClient
    AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
   
    //实例化客户端
    /*AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, 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.setBody(pingres.getBody());
    model.setSubject(pingres.getSubject());
    model.setOutTradeNo(pingres.getOut_trade_no());
    model.setTimeoutExpress("30m");
    model.setTotalAmount(pingres.getTotal_amount());
    model.setProductCode("QUICK_MSECURITY_PAY");

    request.setBizModel(model);

    request.setNotifyUrl("xxx/callbacks.do");
    Map<Object, Object> map=new HashMap<Object, Object>();
      try {
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
            System.out.println(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。
            map.put("result", response.getBody());
            return new AjaxResult(map);
    } catch (AlipayApiException e) {
            e.printStackTrace(); 
            map.put("result", "-1");
            return new AjaxResult(map);
            

    }


支付宝的回掉解析:


     @ResponseBody
    @RequestMapping("/callbacks.do")
    public String callbacks( HttpServletRequest request ) throws Exception {
            //接收支付宝返回的请求参数
            Map requestParams = request.getParameterMap();


            JSONObject json = JSONObject.parseObject(JSON.toJSONString(requestParams));


            String trade_status = json.get("trade_status").toString().substring(2,json.get("trade_status").toString().length()-2);
            String out_trade_no = json.get("out_trade_no").toString().substring(2,json.get("out_trade_no").toString().length()-2);
            String notify_id = json.get("notify_id").toString().substring(2,json.get("notify_id").toString().length()-2);


            System.out.println("====================================================");
            System.out.println(json.toString());
            System.out.println("支付宝回调地址!");
            System.out.println("商户的订单编号:" + out_trade_no);
            System.out.println("支付的状态:" + trade_status);    


            if(trade_status.equals("TRADE_SUCCESS")) {
          
            自己的业务逻辑
           

                return "SUCCESS";
                }
            else {
            自己的业务逻辑
                return "error";
            }
        }


猜你喜欢

转载自blog.csdn.net/lvping100/article/details/80226929