Maison > Article > Applet WeChat > Code d'implémentation pour la fonction de paiement en ligne développé par l'applet WeChat
Cet article présente principalement les informations pertinentes sur le code d'implémentation de la fonction de paiement en ligne du développement de l'applet WeChat. Les amis dans le besoin peuvent se référer à
La fonction de paiement en ligne de l'applet WeChat
Récemment, j'ai eu besoin d'utiliser la fonction de paiement en ligne dans le mini programme WeChat, j'ai donc jeté un œil à la documentation officielle et j'ai trouvé qu'il est très pratique d'implémenter le paiement WeChat dans le mini programme si vous en avez. a déjà développé le paiement WeChat sous un compte de service, alors vous constaterez que le processus de développement du paiement WeChat dans le mini programme est exactement le même que celui du compte de service. Je vais maintenant parler du processus de développement et des points d'attention du paiement WeChat. dans le mini programme en détail.1. Ouvrez le paiement WeChat et le compte marchand WeChat
2. Obtenez l'openid de l'utilisateur
pour obtenir l'openid de l'utilisateur actuel, le code de l'utilisateur peut être obtenu en appelant la méthode wx.login, puis le serveur de développeur utilise le code d'identification de connexion pour obtenir l'openid.
wx.login({ success: function(res) { if (res.code) { //发起网络请求 wx.request({ url: 'https://yourwebsit/onLogin', method: 'POST', data: { code: res.code }, success: function(res) { var openid = res.data.openid; }, fail: function(err) { console.log(err) } }) } else { console.log('获取用户登录态失败!' + res.errMsg) } } });
var code = req.param("code"); request({ url: "https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code", method: 'GET' }, function(err, response, body) { if (!err && response.statusCode == 200) { res.json(JSON.parse(body)); } });
3. Obtenez le prepay_id et la vérification de la signature de paiement paySign
Dans le compte de service, nous activons la fonction de paiement via le code suivant
function jsApiCall() { WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId":"", //公众号名称,由商户传入 "timeStamp":"", //时间戳,自1970年以来的秒数 "nonceStr":"", //随机串 "package":"prepay_id=<%=prepay_id%>", "signType":"MD5", //微信签名方式: "paySign":"<%=_paySignjs%>" //微信签名 }, function(res){ WeixinJSBridge.log(res.err_msg); if( res.err_msg =="get_brand_wcpay_request:ok"){ alert("支付成功!"); }else{ alert("支付失败!"); } } ); }
Dans le mini programme, nous l'activons via le Méthode wx.requestPayment Fonction de paiement, bien sûr, avant cela, nous devons d'abord obtenir prepay_id.
wx.request({ url: 'https://yourwebsit/service/getPay', method: 'POST', data: { bookingNo:bookingNo, /*订单号*/ total_fee:total_fee, /*订单金额*/ openid:openid }, header: { 'content-type': 'application/json' }, success: function(res) { wx.requestPayment({ 'timeStamp':timeStamp, 'nonceStr': nonceStr, 'package': 'prepay_id='+res.data.prepay_id, 'signType': 'MD5', 'paySign': res.data._paySignjs, 'success':function(res){ console.log(res); }, 'fail':function(res){ console.log('fail:'+JSON.stringify(res)); } }) }, fail: function(err) { console.log(err) } })
La principale chose à réaliser côté serveur est d'obtenir prepay_id et de signer paySign
var bookingNo = req.param("bookingNo"); var total_fee = req.param("total_fee"); var openid = req.param("openid"); var body = "费用说明"; var url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; var formData = "<xml>"; formData += "<appid>appid</appid>"; //appid formData += "<attach>test</attach>"; formData += "<body>" + body + "</body>"; formData += "<mch_id>mch_id</mch_id>"; //商户号 formData += "<nonce_str>nonce_str</nonce_str>"; formData += "<notify_url>notify_url</notify_url>"; formData += "<openid>" + openid + "</openid>"; formData += "<out_trade_no>" + bookingNo + "</out_trade_no>"; formData += "<spbill_create_ip>spbill_create_ip</spbill_create_ip>"; formData += "<total_fee>" + total_fee + "</total_fee>"; formData += "<trade_type>JSAPI</trade_type>"; formData += "<sign>" + paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, bookingNo, spbill_create_ip, total_fee, 'JSAPI') + "</sign>"; formData += "</xml>"; request({ url: url, method: 'POST', body: formData }, function(err, response, body) { if(!err && response.statusCode == 200) { var prepay_id = getXMLNodeValue('prepay_id', body.toString("utf-8")); var tmp = prepay_id.split('['); var tmp1 = tmp[2].split(']'); //签名 var _paySignjs = paysignjs(appid, mch_id, 'prepay_id=' + tmp1[0], 'MD5',timeStamp); var o = { prepay_id: tmp1[0], _paySignjs: _paySignjs } res.send(o); } });fonction utilisée
function paysignjs(appid, nonceStr, package, signType, timeStamp) { var ret = { appId: appid, nonceStr: nonceStr, package: package, signType: signType, timeStamp: timeStamp }; var string = raw1(ret); string = string + '&key='+key; console.log(string); var crypto = require('crypto'); return crypto.createHash('md5').update(string, 'utf8').digest('hex'); }; function raw1(args) { var keys = Object.keys(args); keys = keys.sort() var newArgs = {}; keys.forEach(function(key) { newArgs[key] = args[key]; }); var string = ''; for(var k in newArgs) { string += '&' + k + '=' + newArgs[k]; } string = string.substr(1); return string; }; function paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type) { var ret = { 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 }; var string = raw(ret); string = string + '&key='+key; var crypto = require('crypto'); return crypto.createHash('md5').update(string, 'utf8').digest('hex'); }; function raw(args) { var keys = Object.keys(args); keys = keys.sort() var newArgs = {}; keys.forEach(function(key) { newArgs[key.toLowerCase()] = args[key]; }); var string = ''; for(var k in newArgs) { string += '&' + k + '=' + newArgs[k]; } string = string.substr(1); return string; }; function getXMLNodeValue(node_name, xml) { var tmp = xml.split("<" + node_name + ">"); var _tmp = tmp[1].split("</" + node_name + ">"); return _tmp[0]; }
En seulement 3 étapes simples, la fonction de paiement WeChat du mini programme est connectée Ici. c'est le test Rendus de paiement
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!