小程序fail 调用支付JSAPI缺少参数: total_fee;小程序web-view支付
场景:原先在公众号内做的支付,想通过web-view的方式放到小程序里面,但是发现公众号的支付在小程序中不能用了,所以尝试着小程序与web-view交互着来搞,首先在H5中拿到支付的签名,然后再把这个签名传递到小程序中,用小程序的API进行吊起,吊起后有回调函数,注意原先在公众号内的open_id和app_id都不能用了,要根据小程序的环境重新来拿
在H5中引入小程序sdk https://res.wx.qq.com/open/js/jweixin-1.3.2.js
首先判断一下是不是小程序环境
let k; var ua = window.navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) == 'micromessenger') { //判断是否是微信环境 //微信环境 wx.miniProgram.getEnv(function (resData) { if (resData.miniprogram) { // 小程序环境下逻辑 k = "true_mini"; } else { //非小程序环境下逻辑 k = "false_mini"; } }) } else { //非微信环境逻辑 k = "false_wx"; } console.log("运行环境为"+k); return k;
//如果是在小程序中的处理逻辑此处要注意一定要确保签名信息在H5中是无误的,特别要注意package这个字段
//小程序内发起支付 //不知道为什么,拼接的package字符串到了小程序总是会丢失半截,所以用id单独处理 //比如package传递的时候值是 prepay_id=wx***********************;到了小程序中就变为prepay_id,后面的就没了。。。。所以我做了一下处理 let u = res.data.data.package; let id = u.substr((u.indexOf("prepay_id=")+10),u.length); var params = 'timestamp='+res.data.data.timeStamp+'&nonceStr='+res.data.data.nonceStr+ '&paySign='+res.data.data.paySign+'&package='+res.data.data.package+'&id='+id; console.log("签名为"+params); console.log(id); var path = '/pages/wxpay/wxpay?'+params; //小程序页面的路径 wx.miniProgram.navigateTo({url: path}); //小程序中
onLoad: function (options) { console.log(options); console.log('prepay_id=' + options.id); //这个地方单独传了一个id,这个id就是package的值 wx.requestPayment({ timeStamp: options.timestamp, nonceStr: options.nonceStr, package: 'prepay_id=' + options.id, signType: 'MD5', paySign: options.paySign, success(res) { //支付成功 console.log(res); wx.navigateBack(); //返回上一级 }, fail(err) { if (err.errMsg == "requestPayment:fail cancel"){ console.log("支付取消"); wx.navigateBack(); }else{ console.log("支付失败"); wx.navigateBack(); } } }) },













