Zusammenfassung der Fehler bei der Entwicklung der WeChat Mini-Programm-Zahlungsfunktion
WeChat Mini-Programm-Zahlung hat endlich die Fallstricke beseitigt und festgestellt, dass es ziemlich große Fallstricke gibt, die ich posten werde Ich hoffe, dass Interessierte in Zukunft einen Blick darauf werfen können:
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php? kapitel=7_4&index=2
Der Geschäftsprozess ist hier zu sehen, wenn man sich das Dokument ansieht. Die erste Gefahr besteht darin, die OpenID des Benutzers zu erhalten. Die Parameter müssen in der URL-Verbindung geschrieben werden, andernfalls wird {"errcode":40013,"errmsg": "invalid appid, hints: [ req_id: iil1ba0504ns86 ]" gemeldet. }Fehler
onLoad: function () { var that = this wx.login({ success: function (res) { if (res.code) { //发起网络请求 wx.request({ url: 'https://api.weixin.qq.com/sns/jscode2session?appid=wxaacf22345345cfc7162fe3&secret=83ebd41c3e6f34a49b3a34578063434548ff3f71&js_code=' + res.code + '&grant_type=authorization_code', method: "POST", success: function (res) { that.setData({ openid: res.data.openid }) } }) } else { console.log('获取用户登录态失败!' + res.errMsg) } } }); }
Die zweite Falle ist die einheitliche Bestellschnittstelle für Zahlung und Unterschrift. Diese Falle stößt auf Probleme MD5-Verschlüsselung. Sie unterscheidet sich oft von der verschlüsselten Signatur im Signaturtool
Adresse des Signaturverschlüsselungstools: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php ?chapter=20_1
Beim Signieren und Verschlüsseln muss es in utf-8 konvertiert werden. Zur Verschlüsselung verwende ich meine eigene Schnittstelle zum Verschlüsseln von summary.update(data.getBytes("utf-8")) ;
// 统一下单接口获取sign(签名) paysignjsapi: function (appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type, key) { var self = this; //加密签名 wx.request({ url: 'http://localhost:8080/XinXingWXApi/wxXcxApi/Md5Encrypt.do', method: 'GET', data: { appid: appid, attach: attach, body: body, mch_id: mch_id, nonce_str: nonce_str, notify_url: notify_url, openid: openid, out_trade_no: out_trade_no, spbill_create_ip: spbill_create_ip, total_fee: total_fee, trade_type: trade_type, key: key }, //统一下单 success: function (res) { var sign = res.data.strMd5 var formData = "<xml>" formData += "<appid>" + appid + "</appid>" //appid formData += "<attach>" + attach + "</attach>" //附加数据 formData += "<body>" + body + "</body>" //标题 formData += "<mch_id>" + mch_id + "</mch_id>" //商户号 formData += "<nonce_str>" + nonce_str + "</nonce_str>" //随机字符串,不长于32位。 formData += "<notify_url>" + notify_url + "</notify_url>" //异步接收微信支付结果通知的回调地址 formData += "<openid>" + openid + "</openid>" //用户Id formData += "<out_trade_no>" + out_trade_no + "</out_trade_no>" //商户订单号 formData += "<spbill_create_ip>" + spbill_create_ip + "</spbill_create_ip>" formData += "<total_fee>" + total_fee + "</total_fee>" //金额 formData += "<trade_type>" + trade_type + "</trade_type>" //公共号支付 formData += "<sign>" + sign + "</sign>"//签名 formData += "</xml>"
Datenanalyse-XML zurückgeben
//请求统一下单接口 wx.request({ url: "https://api.mch.weixin.qq.com/pay/unifiedorder", method: 'POST', data: formData, success: function (data) { wx.request({ url: "http://localhost:8080/XinXingWXApi/wxXcxApi/xmlAnalyze.do?strXml=" + data.data, method: 'POST', success: function (res) { var pk = 'prepay_id=' + res.data.prepayId; var timeStamp = self.createTimeStamp(); //获取支付签名,并支付 self.getsignType(appid, timeStamp, nonce_str, pk, "MD5", key); } }) } }) } }); }
Der dritte ist Auch hier gibt es mehrere Fallstricke. Der erste besteht darin, dass viele AppIDs nicht als appid geschrieben werden können. Der zweite besteht darin, dass das Parameterformat von preoatid=wx2017011711060194dccf725232155886323 korrekt sein muss Beim Aufruf der Zahlung müssen Sie auch zur Signaturschnittstelle gehen, um zu überprüfen, ob die Parameter korrekt sind. Beim Aufruf der WeChat-Zahlung muss die App-ID hinzugefügt werden 🎜>
Vielen Dank fürs Lesen. Ich hoffe, es kann allen helfen. Vielen Dank für Ihr Interesse an dieser Seite.
getsignType: function (appid, timeStamp, nonce_str, pk, signType, key) { var that = this; wx.request({ url: "http://localhost:8080/XinXingWXApi/wxXcxApi/getSignType.hn", method: 'GET', data: { appId: appid, timeStamp: timeStamp, nonceStr: nonce_str, pk: pk, signType: signType, key: key }, success: function (res) { console.log(res.data.paySign) var paySign = res.data.paySign //调用微信支付 wx.requestPayment({ 'appId': appid, 'timeStamp': timeStamp, 'nonceStr': nonce_str, 'package': pk, 'signType': 'MD5', 'paySign': paySign, 'success': function (res) { console.log(res); console.log('success'); }, 'fail': function (res) { console.log(res); console.log('fail'); }, 'complete': function (res) { // console.log(res); console.log('complete'); } }); } }) }