继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第1天 Java支付全家桶 企业级各类支付手段一站式解决方案(4-8)

慕仔9208797
关注TA
已关注
手记 60
粉丝 1
获赞 7

课程名称:Java支付全家桶 企业级各类支付手段一站式解决方案

课程章节:4-8 商户系统接收支付结果

主讲老师:神思者

课程内容:

今天课程学习的主要知识点内容包括:
微信平台的支付回调、回调接口的代码编写、使用Postman工具测试回调接口。

课程收获:

1、微信平台的支付回调,学习到了:
(1)微信平台会把用户支付的结果,以XML报文的形式发送到指定的URL回调地址;
(2)如果商户系统没有响应,微信平台会每隔一段时间再触发一次支付结果,所以商户系统接收到微信的报文后,需要按具体的格式要求给微信平台返回响应报文,以终止微信平台的重试行为;
(3)查看微信接口的报文参数说明;

2、回调接口的代码编写
掌握主要核心代码如下:

@PostMapping("/recievePayMessage")
@ApiOperation("接收支付消息通知")
public void recievePayMessage(HttpServletRequest request, HttpServletResponse response) throws Exception {
    request.setCharacterEncoding(CharsetUtil.UTF_8);
    BufferedReader reader = request.getReader();
    StringBuffer temp = new StringBuffer();
    String line = reader.readLine();
    while (null != line) {
        temp.append(line);
        line = reader.readLine();
    }
    reader.close();

    Map<String, String> map = WXPayUtil.xmlToMap(temp.toString());
    String returnCode = map.get("return_code");
    String resultCode = map.get("result_code");
    if ("SUCCESS".equals(returnCode) && "SUCCESS".equals(resultCode)) {
        String sign = map.get("sign");
        map.remove("sign");
        String checkSign = WXPayUtil.generateSignature(map, weiXinConfig.getKey());
        if (checkSign.equals(sign)) {
            String outTradeNo = map.get("out_trade_no");
            OrderEntity order = orderService.getOne(
                    Wrappers.<OrderEntity>lambdaQuery()
                            .eq(OrderEntity::getCode, outTradeNo)
                            .last("limit 1")
            );
            if (null != order) {
                order.setStatus(2);
                order.setPaymentType(1);
                orderService.updateById(order);
            }
        }
    }
    response.setCharacterEncoding(CharsetUtil.UTF_8);
    response.setContentType("application/xml");
    PrintWriter writer = response.getWriter();
    writer.write(
            "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
    );
    writer.close();
}

需要注意的是, @PostMapping("/recievePayMessage") 指定的接口路径,需要和先前创建订单时指定的接口相一致:

@Login
@PostMapping("/microAppPayOrder")
@ApiModelProperty("小程序付款")
public R microAppPayOrder(@RequestBody PayOrderForm form, @RequestHeader HashMap header) {
……
        map.put("notify_url", "https://xxx.xxx.xxx/renren-fast/app/wx/recievePayMessage");
……
}

3、使用Postman工具测试回调接口
需要注意的地方有:
(1)选择Post请求方式,地址需要写对;
(2)在Body处选择raw,报文格式需要下拉选择 XML(application/xml);
(3)复制消息案例,修改流水号,进行请求发送。

今天九月打卡活动的第1天,,希望自己能坚持下去,为自己加油!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP