微信支付系列之——统一下单

简介: 微信支付系列之——统一下单

之前有很多朋友私信我,问我能不能出一系列关于微信支付的文章。

这应部分朋友的请求,输出微信支付系列——统一下单,首先来看看接口文档:

image.png
看着这一串接口,是不是有一种头疼欲裂的感觉,不用怕,咱们一个个解决他,首先来看一下统一下单接口。

文档还是很详细的(就是微信支付团队有时文档跟不上代码的节奏^_^)
image.png
告诉了我们应用场景、接口清酒地址、是否需要证书、证书参数、返回结果、错误码等一系列接口该有的全部在这里都能够体现出来。
其实,这里面最难搞的也就是请求参数这一坨。剥离开来,请求参数中比较复杂的就是签名加密。
这就带大家来揭开这个签名的神秘面纱。
首先,我们把所有参数按照字典排序,按照键值对的顺序排列成一个新的字符串。其中空参数的要过滤掉。
其次,将我们设置的秘钥拼接到上面的字符串后面做MD5加密,然后转为大写,这样签名即搞定了,来我们直接看代码是如何搞定的:

   /**
     * 微信支付MD5加密
     * @param infoIds    字典序后的集合
     * @return
     * @throws Exception
     */
    public static String createSign(List<Map.Entry<String, Object>> infoIds, String apiKey) throws Exception {
   
   
        StringBuffer sb = new StringBuffer();
        for (Map.Entry<String, Object> entry : infoIds) {
   
   
            String key = entry.getKey();
            Object value = entry.getValue();
            if(null != value && !"".equals(value) && !"sign".equals(key) && !"key".equals(key)){
   
   
                sb.append(key+"="+value+"&");
            }
        }
        sb.append("key="+apiKey);
        String sign = signMD5(sb.toString());
        logger.info("【签名结果】{}",sign);
        return sign;
    }

封装统一请求类,具体代码实现如下


   /**
     * 微信统一下单接口
     * 接口文档地址:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1
     * @param unifiedOrderReq   统一下单请求
     * @return
     * @throws BaseException
     */
    public ApiResult uniformorder(UnifiedOrderReq unifiedOrderReq) throws BaseException{
   
   
        logger.info("【统一下单请求入参:】{}",unifiedOrderReq.toString());
        String uniformorderXml = wechatPayCommon.unifiedOrderReqSplicingParam(unifiedOrderReq);
        logger.info("【统一下单封装微信请求参数:】{}",uniformorderXml);
        String content = HttpUtils.httpsRequest(baseWechatPay.getUniformOrder(),HttpUtils.POST, uniformorderXml);
        logger.info("【统一下单微信返回内容:】{}",content);
        ApiResult apiResult = handleReturnCommon.handleUnifiedOrderReturnContent(content, unifiedOrderReq.getTradeType(), unifiedOrderReq.getOutTradeNo());
        logger.info("【统一下单返回报文:】{}",apiResult.toString());
        return apiResult;
    }

好了,这样即可完成微信支付系列之——统一下单操作,觉得有帮助,帮小编点个赞吧!

目录
相关文章
|
Docker 容器
Docker删除容器日志
Docker删除容器日志
2033 0
|
6月前
|
存储 虚拟化 数据中心
VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS Lenovo (联想) 定制版
VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS Lenovo (联想) 定制版
133 2
|
网络协议 API 网络安全
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
1635 0
|
移动开发 缓存 JavaScript
30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度
30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度
440 6
|
JavaScript 前端开发
var let const 的区别和使用场景
var let const 的区别和使用场景
193 3
|
存储 C语言
静态存储方式
静态存储方式
303 0
|
Arthas 供应链 数据可视化
接口响应慢该如何排查
接口响应慢该如何排查
418 0
|
存储 分布式计算 大数据
Hologres X TapTap,毫秒级实时在线推荐
本文将会介绍TapTap基于Hologres在实时推荐场景的最佳实践。
2138 0
Hologres X TapTap,毫秒级实时在线推荐
下一篇
开通oss服务