◆ 密钥设置路径:微信商户平台()-->账户设置-->API安全-->密钥设置
Java签名工具类:
(Map < , > , ){ = ;Set < > = .();[]keys = .();.sort(keys); 临时=新(); = true;for( 键: 键){if( ){ = ;}else{temp.("&");}temp.(key).("="); =(键); ="";if(null != ){ = .();} if(){try{temp.(.(, "UTF-8"));}( e){e.();}}else {temp.();}}temp.("&key="); 温度.();.输出(温度.()); = MD5.(温度.()); ;} sign = (, "商户密钥");
发起支付 使用wx.()发起支付
// 发起微信支付 wx.(pay)
所需参数如下,请求预付费接口后由服务器返回:
文章插图
查询订单请求后端的查询接口进行查询:
// 查询订单状态 res = ({ url: "/my//", : "POST", data: { } });
微通商城支付逻辑分析【微信小程序支付实现流程】
文章插图
参考补充微信支付开发文档 微通商城微信小程序登录换取微信小程序登录+基础认证
基本流程 用户操作流程
文章插图
小程序流程
文章插图
整体支付流程
文章插图
该代码实现了创建订单。 前端主要向后端提交订单信息。 但在创建订单之前需要做一些准备工作:
获取用户数据,获取用户授权,获取用于创建订单的用户信息,然后使用wx.()获取代码(用户登录凭证)。 获取后可以在后台下发,验证用户操作。
登录过程时序:
文章插图
回调方法返回参数示例:
: "NC9d+qwqz": ":ok"iv: "Og==": "{"":"1024","":1,"":"","城市":"","":" ","":"","":""}": ""
{ , , iv, } = e.; { 代码 } = (); = { , , iv, , code };// 将小程序获取到的用户信息提交给后端 // 后端调用微信的鉴权接口 // 可以获取,, 等内容 // 用于创建充值订单和安全验证 {} = ({ url: "//", data: , : "post" });
获取后添加到请求头字段中。 然后发送请求,后端程序保存订单内容,然后进行预付款。
// 中间是订单商品信息 = { : } { } = ({ url: "/", : "POST", data: , })
wx.()
授权。
对于预付款,小程序会将订单号发送到后端预付款接口,然后接口返回必要的付款参数。
// 发起预付费接口添加-type即可成功 { pay } = ({ url: "/my//", : "POST", data: { }, : { "-type": "/x-www-形式 -” } });
这时,后台服务器会先判断订单是否待付款。 如果是,则需要提交以下参数
文章插图
统一订购接口:
参数说明:接口参数说明
请求微信下单接口成功后会返回。 封装后,会返回后续支付所需的参数。
Java随机数生成:
// 获取随机字符 (num) { base = ""; =新的(); sb = new ();for (int i = 0; i < num; i++) {int = .(base.());sb .(base.());} sb.();} = (18) .();
签名生成的一般步骤如下:
第一步,假设所有发送或接收的数据是一个集合M,集合M中参数值非空的参数按照参数名称(字典顺序)从小到大排序,使用格式URL 键值对(即 key1= &key2=...)连接成一个字符串。
请特别注意以下重要规则:
◆ 将参数名称从小到大排序(字典顺序);
◆ 如果参数值为空,则不参与签名;
◆ 参数名称区分大小写;
◆ 当验证调用返回或微信主动通知签名时,传输的sign参数不参与签名,生成的签名与sign值进行验证。
◆ 微信接口可能会添加字段,添加的扩展字段在验证签名时必须支持。
第二步,最后拼接key得到字符串,并进行MD5运算,然后将得到的字符串所有字符转换为大写,得到符号值。 注:密钥长度为32字节。