小程序支付 https://blog.csdn.net/lwx931449660/article/details/122530586
uniapp小程序微信支付功能 已于 2022-09-28 10:38:34 修改 字段说明 前置工作 获取openid 微信支付 报错问题 uniapp 开发小程序需要实现微信支付功能,下面对相关业务进行说明。 字段说明 AppID:小程序的身份证,微信客户端用来确认你的小程序的身份 AppSecret:小程序秘钥 openid:一个用户对于一个小程序的标识(用户唯一标识),用来确认用户的唯一身份 UnionID:用户在微信开放平台帐号下的唯一标识(小程序绑定开放平台帐号才会有) session_key:会话秘钥(如果微信API返回加密数据,解密就要用到session_key) 前置工作 要实现支付功能需要做一些前置工作,如果未完成则微信支付不可用。 1,申请微信支付商户号 需要公司来申请,在微信商户平台中。 2,绑定已有商户号并开通微信支付 由小程序管理员开通,在微信公众平台中。 商户与小程序之间的关系: 一个商户可以关联多个小程序,一个小程序也可以绑定多个商户。 对应日常开发,在多商户的情况,每一个商户号在后台都会进行配置,存入数据库,支付时根据当前不同的账户决定使用那一个商户号,这一块需要后台对每一个AppId和商户号做关联,支付时才能确认具体使用那个商户号。(这一块需要后台处理相关逻辑) 配置完成如图: 获取openid 小程序支付必须携带openid,一般openid可以后台获取返给前端,因为考虑安全必须要这么做,如果你需要前端获取openid,如下: ps:实际上前台是不能获取openid的,一个是考虑安全性因素,还有就是小程序需要添加安全域名,而微信的接口不能放在安全域名中,如下: 当然如果只是前台调试,那么是没有问题的。 1,调用wx.login 接口,获取code 2,根据code,appid,appsecert获取openid 这里默认你已经申请了小程序appid,如果未申请,请看这里,已经申请可以登录微信公众平台查看自己的appid,appsecret,在公众平台,开发管理,开发设置中。 前台获取如下: wx.login({ success: res => { console.log(res.code,'code====='); const appid = 'wx5c*********c7ea0'; // 微信小程序appid const secret = 'a5fd***************ea80c6866dc0'; // 微信小程序secret //调用request请求api转换登录凭证 wx.request({ url: 'https://api.weixin.qq.com/sns/jscode2session?appid='+appid+'&secret='+secret+'&grant_type=authorization_code&js_code=' + res.code, header: { 'content-type': 'application/json' }, success: function (result) { if(result.statusCode === 200) { console.log(result.data.openid,'openid======='); uni.setStorageSync('openid', result.data.openid); uni.setStorageSync('session_key', result.data.session_key); } } }) } }) 如果不清楚openid获取的业务逻辑,请看小程序登录。 如果对小程序支付的整体交互逻辑不清楚的,推荐查看小程序支付。 划重点:openid可由后台获取,前台只需要提供 wx.login 接口获取的 code 即可,剩下工作由后端完成,并在登录接口中返回 openid,前端存储 openid,以便后期使用。 附获取openid时前后台微信服务交互逻辑图:开发者服务器代表后端 微信支付 说明一点,小程序支付的 trade_type 为JSAPI,后端需要关注。 首先你应该调用业务侧接口,即后端接口,获取调用微信支付API所需参数。 调用后端接口这里不做说明,根据具体的业务场景情况不同,获取到支付参数后就可以调用微信小程序的 requestPayment API 调起微信支付,因为开发使用的 uniapp,可以使用 uni.requestPayment API,如下: // saveReserve 为业务接口 saveReserve(params).then(data => { const { errno, errmsg, res } = data; // res为调起微信支付所需参数 if(errno === '0') { // 调起微信支付 uni.requestPayment({ provider: 'wxpay', // 服务提提供商 timeStamp: res.weChatPayData.timestamp, // 时间戳 nonceStr: res.weChatPayData.noncestr, // 随机字符串 package: res.weChatPayData.package, signType: res.weChatPayData.signtype, // 签名算法 paySign: res.weChatPayData.sign, // 签名 success: function (res) { console.log('支付成功',res); // 业务逻辑。。。 }, fail: function (err) { console.log('支付失败',err); } }); } }).catch(err => { console.log(err); }) 相关支付API文档请看uniapp支付。 到此微信小程序支付功能完成。 报错问题 1,支付场景非法 --后台需要在创建预支付接口时将trade_type修改为JSAPI模式 2,支付验证签名失败 --需要后台检查生成签名时填写的appid是否正确,一个是小程序appid一个是应用的appid,确保没填错 3,调用支付JSAPI缺少参数:total_fee --可能是参数有误,注意package参数格式为:"prepay_id=wx20161......" ———————————————— 版权声明:本文为CSDN博主「丿刘先森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lwx931449660/article/details/122530586
标签:uniapp,openid,res,appid,程序,支付,微信 From: https://www.cnblogs.com/webSnow/p/16866066.html