第三方支付交易流程

第三方支付公司

  • 常见第三方支付公司
    拉卡拉
    通联
  • 接入第三方的支付公司的目的
    多子商户
    定制需求
    多码合一(微信,支付宝,银联,钱包…)

交易流程

微信支付客户 微信小程序 商户服务器 微信服务器 第三方支付公司 进入小程序下单 下单(订单信息、微信客户信息) 调用小程序登录接口wx.login返回openid(根据code获取openid) 生成待支付的订单 调用第三方支付下单接口 返回支付参数 返回支付参数 用户确认支付 调起支付 返回支付结果 推送异步支付通知 推送异步支付通知 更新订单 微信支付客户 微信小程序 商户服务器 微信服务器 第三方支付公司
  • 微信小程序
appId:  #小程序的appid
appSecred:  #小程序的密码
code:    #获取openid的标识

微信支付

商户号:    #接入微信支付,分发的一个账号

第三方

客户号:   #第三方系统的分发的账号
公钥(pubKey):   #用在加密支付参数
回调地址: #给第三方或者微信异步推送支付的结果

异步支付通知回调接收

回调地址1、请求支付的时候带过去 2、后台配置 3、一般通知三次

  • url链接返回参数
    //第三方支付成功回调
    @RequestMapping("/notifyWXCCBPay")
    @ResponseBody
    @ApiOperation("第三方支付成功回调")
    public void notifyWXCCBPay(HttpServletRequest request, HttpServletResponse response) throws IOException {
        log.info("第三方支付成功回调:");
        String url = request.getRequestURL().toString();
        String notifyURLParam = request.getQueryString();
        String SUCCESS = request.getParameter("SUCCESS");
        log.info("url:" + url);
        log.info("notifyURLParam:" + notifyURLParam);
        }
  • 微信小程序支付回调
/**
     * 微信小程序支付成功回调函数
     *
     * @param request
     * @param response
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping(value = "notifyWXAppPay")
    @ApiOperation("微信小程序支付成功回调函数")
    public String wxNotify(HttpServletRequest request, HttpServletResponse response) throws Exception {
        log.info("微信小程序支付回调");
        BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream) request.getInputStream()));
        String line = null;
        StringBuilder sb = new StringBuilder();
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
        br.close();
        //sb为微信返回的xml
        String notityXml = sb.toString();
        log.info("接收到的报文:" + notityXml);

        MyWXPayConfig config = null;
        WXPay wxpay = null;
        try {
            config = new MyWXPayConfig();
            wxpay = new WXPay(config);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Map<String, String> notityMap = wxpay.processResponseXml(notityXml);
        log.info("notityMap:" + notityMap);
        String return_code = (String) notityMap.get("return_code");
        String result_code = (String) notityMap.get("result_code");
        if ("SUCCESS".equals(return_code) && return_code.equals(result_code)) {
            //判断接受到的result_code是不是SUCCESS,如果是,则返回成功,具体业务具体分析,修改订单状态
            log.info("===============付款成功==============");
            String total_fee = notityMap.get("total_fee");//订单总金额
            String out_trade_no = notityMap.get("out_trade_no");

            String tradeNo = notityMap.get("transaction_id");
            String openid = notityMap.get("openid");//用户在商户appid下的唯一标识
            String status = "2";
            //更新订单
            wXAppPayService.updateOrder(out_trade_no, status, total_fee, tradeNo, openid);
            // 通知微信.异步确认成功.必写.不然会一直通知后台.
            String resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>" +
                    "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
            return resXml; //或者 return "success";
        } else {
            // 小程序支付失败
            log.info("小程序支付失败");
            Map<String, String> reqData = new HashMap<String, String>();
            reqData.put("return_code", "FAIL");
            reqData.put("return_msg", "支付失败 ");
            return WXPayUtil.mapToXml(reqData);
        }
    }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值