您好,欢迎访问一九零五行业门户网

微信小程序:微信支付跳坑流程

先看一下小程序开发步骤
wx.login调用接口获取登录凭证(code)
code 换取用户的唯一标识(openid)
https://api.weixin.qq.com/sns/jscode2session?appid=appid&secret=secret&js_code=jscode&grant_type=authorization_code
统一下单
url地址:https://api.mch.weixin.qq.com/pay/unifiedorder
post
参数为xml
wx.requestpayment进行支付
采坑
签名md5加密,网上有些算法是错误的,自己写完还需要在线md5加密工具进行校验(我采坑一下午,怎么看我写的怎么对,就是出不来,原因就是md5工具使用错误,坑爹- - )
签名规则注意事项(must)
◆ 参数名ascii码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段
统一下单签名appid,wx.requestpayment签名appid(大小写必须区分,真是找瞎我钛合金狗眼- - )
wx.requestpayment中package参数必须是package:prepay_id=wx21**************,不然,会出现调用支付jsapi缺少appid/total_fee
total_fee为分,并且是int
生成随机数和时间戳一定要保证签名与上传参数一致
大小写。。一定要注意
微信小程序trade_type=jsapi,openid参数必传
wx.requestpayment生成签名有appid,请求的时候没有appid
好了,上代码了(代码很原始,没有封装)
/* 微信支付 */ wxpay: function () { var that = this //登陆获取code wx.login({ success: function (res) { console.log(res.code) //获取openid that.getopenid(res.code) } }); }, /* 获取openid */ getopenid: function (code) { var that = this wx.request({ url: "https://api.weixin.qq.com/sns/jscode2session?appid=wxbd5a8270399d41d9&secret=d8aac26a5a9c16266d1a23851ebb7d9b&js_code=" + code + "&grant_type=authorization_code", method: 'get', success: function (res) { //统一支付签名 var appid = '';//appid var body = '';//商户名 var mch_id = '';//商户号 var nonce_str = that.randomstring;//随机字符串,不长于32位。 var notify_url = '';//通知地址 var spbill_create_ip = '';//ip // var total_fee = parseint(that.data.wxpaymoney) * 100; var total_fee = 100; var trade_type = "jsapi"; var key = ''; var unifiedpayment = 'appid=' + appid + '&body=' + body + '&mch_id=' + mch_id + '&nonce_str=' + nonce_str + '¬ify_url=' + notify_url + '&openid=' + res.data.openid + '&out_trade_no=' + that.data.paysn + '&spbill_create_ip=' + spbill_create_ip + '&total_fee=' + total_fee + '&trade_type=' + trade_type + '&key=' + key var sign = md5.md5(unifiedpayment).touppercase() console.log(sign) //封装统一支付xml参数 var formdata = "" formdata += "" + appid + "" formdata += "" + body + "" formdata += "" + mch_id + "" formdata += "" + nonce_str + "" formdata += "" + notify_url + "" formdata += "" + res.data.openid + "" formdata += "" + that.data.paysn + "" formdata += "" + spbill_create_ip + "" formdata += "" + total_fee + "" formdata += "[tr]" + trade_type + "" formdata += "" + sign + "" formdata += "" //统一支付 wx.request({ url: 'https://api.mch.weixin.qq.com/pay/unifiedorder', method: 'post', head: 'application/x-www-form-urlencoded', data: formdata, // 设置请求的 header success: function (res) { console.log(res.data) var result_code = that.getxmlnodevalue('result_code', res.data.tostring("utf-8")) var resultcode = result_code.split('[')[2].split(']')[0] if (resultcode == 'fail') { var err_code_des = that.getxmlnodevalue('err_code_des', res.data.tostring("utf-8")) var errdes = err_code_des.split('[')[2].split(']')[0] wx.navigateback({ delta: 1, // 回退前 delta(默认为1) 页面 success: function (res) { wx.showtoast({ title: errdes, icon: 'success', duration: 2000 }) }, }) } else { //发起支付 var prepay_id = that.getxmlnodevalue('prepay_id', res.data.tostring("utf-8")) var tmp = prepay_id.split('[') var tmp1 = tmp[2].split(']') //签名 var key = ''; var appid = ''; var timestamp = that.createtimestamp(); var noncestr = that.randomstring(); var stringsigntemp = "appid=&noncestr=" + noncestr + "&package=prepay_id=" + tmp1[0] + "&signtype=md5&timestamp=" + timestamp + "&key=" var sign = md5.md5(stringsigntemp).touppercase() console.log(sign) var param = { "timestamp": timestamp, "package": 'prepay_id=' + tmp1[0], "paysign": sign, "signtype": "md5", "noncestr": noncestr } that.pay(param) } }, }) }, fail: function () { // fail }, complete: function () { // complete } }) }, /* 随机数 */ randomstring: function () { var chars = 'abcdefghjkmnpqrstwxyzabcdefhijkmnprstwxyz2345678'; /****默认去掉了容易混淆的字符ooll,9gq,vv,uu,i1****/ var maxpos = chars.length; var pwd = ''; for (var i = 0; i < 32; i++) { pwd += chars.charat(math.floor(math.random() * maxpos)); } return pwd; }, /* 获取prepay_id */ getxmlnodevalue: function (node_name, xml) { var tmp = xml.split("<" + node_name + ">") var _tmp = tmp[1].split("") return _tmp[0] }, /* 时间戳产生函数 */ createtimestamp: function () { return parseint(new date().gettime() / 1000) + '' }, /* 支付 */ pay: function (param) { wx.requestpayment({ timestamp: param.timestamp, noncestr: param.noncestr, package: param.package, signtype: param.signtype, paysign: param.paysign, success: function (res) { // success console.log(res) wx.navigateback({ delta: 1, // 回退前 delta(默认为1) 页面 success: function (res) { wx.showtoast({ title: '支付成功', icon: 'success', duration: 2000 }) }, fail: function () { // fail }, complete: function () { // complete } }) }, fail: function () { // fail console.log("支付失败") }, complete: function () { // complete console.log("pay complete") } }) }
更多微信小程序:微信支付跳坑流程。
其它类似信息

推荐信息