JSAPI第二次签名到底什么机制?
JSAPI 二次签名的机制到底是什么样的,我已经按照官网与网上的踩坑文章一一排查了,还是报支付验证签名失败,目前可以确认正确的点如下: appid,mch_id,api_key 是正确的,因为统一下单接口调用成功了。 二次签名的算法正确,首先因为是直接调用 sdk 里面的 generateSignature 方法,另外也把对应的 5 个参数值通过官网检测网址检验过,得到的值是一样的。 接下来是二次签名的实现方法 [代码] [代码][代码]try[代码] [代码]{[代码][代码] [代码][代码]System.out.println([代码][代码]"开始"[代码][代码]);[代码][代码] [代码][代码]Map<String, String> resp = wxpay.unifiedOrder(data);[代码][代码] [代码][代码]System.out.println([代码][代码]"resp; "[代码][代码]+resp);[代码][代码] [代码][代码]System.out.println([代码][代码]"结束"[代码][代码]);[代码] [代码] [代码][代码]Map<String, String> dataSign = [代码][代码]new[代码] [代码]HashMap<String, String>();[代码][代码] [代码][代码]String timeStr=([代码][代码]new[代码] [代码]Date().getTime()/[代码][代码]1000[代码][代码])+[代码][代码]""[代码][代码];[代码][代码] [代码][代码]dataSign.put([代码][代码]"appId"[代码][代码],config.getAppID());[代码][代码] [代码][代码]dataSign.put([代码][代码]"timeStamp"[代码][代码],WXPayUtil.getCurrentTimestamp()+[代码][代码]""[代码][代码]);[代码][代码] [代码][代码]dataSign.put([代码][代码]"nonceStr"[代码][代码], resp.get([代码][代码]"nonce_str"[代码][代码]));[代码][代码] [代码][代码]dataSign.put([代码][代码]"package"[代码][代码],[代码][代码]"prepay_id="[代码][代码]+resp.get([代码][代码]"prepay_id"[代码][代码]));[代码][代码] [代码][代码]dataSign.put([代码][代码]"signType"[代码][代码],[代码][代码]"MD5"[代码][代码]);[代码][代码] [代码][代码]String signStr=WXPayUtil.generateSignature(dataSign, config.getKey(),SignType.MD5);[代码] [代码] [代码][代码]dataSign.put([代码][代码]"paySign"[代码][代码],signStr);[代码][代码] [代码][代码]System.out.println([代码][代码]"paySign:"[代码][代码]+dataSign);[代码][代码] [代码][代码]return[代码] [代码]dataSign;[代码][代码] [代码][代码]} [代码][代码]catch[代码] [代码](Exception e) {[代码][代码] [代码][代码]System.out.println([代码][代码]"异常"[代码][代码]);[代码][代码] [代码][代码]e.printStackTrace();[代码][代码] [代码][代码]}[代码][代码]}[代码][代码]catch[代码] [代码](Exception e){[代码][代码] [代码][代码]e.printStackTrace();[代码][代码]}[代码]二次签名前台程序: [代码]onBridgeReady = (data) => {[代码][代码] [代码][代码]WeixinJSBridge.invoke([代码][代码] [代码][代码]// 'getBrandWCPayRequest', data,[代码][代码] [代码][代码]'getBrandWCPayRequest'[代码][代码], {[代码][代码] [代码][代码]appId: data.appId,[代码][代码] [代码][代码]timeStamp: data.timeStamp,[代码][代码] [代码][代码]nonceStr: data.nonceStr,[代码][代码] [代码][代码]package: data.package,[代码][代码] [代码][代码]signType: [代码][代码]'MD5'[代码][代码],[代码][代码] [代码][代码]paySign: data.paySign[代码][代码] [代码][代码]},[代码][代码] [代码][代码](res) => {[代码][代码] [代码][代码]alert(JSON.stringify(res));[代码][代码] [代码][代码]if[代码] [代码](res.err_msg == [代码][代码]'get_brand_wcpay_request:ok'[代码][代码]) {[代码][代码] [代码][代码]// 使用以上方式判断前端返回,微信团队郑重提示:[代码][代码] [代码][代码]//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码]};[代码] 请帮忙看看我是不是哪儿遗漏了重要信息?