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

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

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

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

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;
    }

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

目录
相关文章
|
开发工具 git druid
解决Git中fatal: refusing to merge unrelated histories
Git的报错 在使用Git的过程中有时会出现一些问题,那么在解决了每个问题的时候,都需要去总结记录下来,下次不再犯。 一、fatal: refusing to merge unrelated histories 今天在使用Git创建项目的时候,在两个分支合并的时候,出现了下面的这个错误。
109493 6
|
11月前
|
存储 弹性计算 数据管理
阿里云对象存储OSS收费标准,存储、流量和请求等多个计费项
阿里云对象存储OSS提供按量付费与包年包月两种计费方式,涵盖存储、流量、请求等费用。标准存储按量付费0.09元/GB/月,包年包月40GB起售,价格9元/年。公网流量出方向收费,内网及上传免费。具体费用视使用情况而定,详情见官网。
1055 0
|
5月前
|
SQL 自然语言处理 关系型数据库
通义灵码2.5来袭!MCP 功能直接让开发效率提升300%(附实战案例)
通义灵码2.5是阿里云推出的AI编码助手,以智能协作为核心,深度融合开发全流程。其三大升级点包括:编程智能体实现任务自主规划、MCP工具生态支持自然语言生成SQL、记忆进化系统个性化适配开发者习惯。通过自然语言即可完成数据库操作、代码生成与优化,大幅提升开发效率。此外,还具备工程级变更管理、多文件协同编辑及版本控制功能,适用于多种IDE环境,为企业提供安全高效的开发解决方案。
|
10月前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
7714 2
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
|
Docker 容器
docker设置国内镜像源
docker设置国内镜像源
34600 5
|
弹性计算
阿里云备案流程和操作步骤详解(图文教程)
以下是内容摘要: 本文指导了阿里云账号注册、实名认证及服务器购买流程,并详细阐述了域名注册与备案步骤。首先,需注册阿里云账号并完成个人或企业实名认证,然后选购服务器。接着,进行域名注册与实名认证。备案阶段,用户需在阿里云备案系统中填写相关信息,包括主体信息、网站信息,并上传相关证件照片。提交备案后,系统将进行审核,用户可通过阿里云ICP代备案平台查看进度。整个过程需确保联系方式畅通,以便接收审核通知。
|
JavaScript 前端开发
前端vue配置多个代理 axios的使用
前端vue配置多个代理 axios的使用
346 0
|
移动开发 缓存 JavaScript
30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度
30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度
407 6