首页 > 编程语言 >uniapp小程序微信支付功能

uniapp小程序微信支付功能

时间:2022-11-07 15:23:22浏览次数:43  
标签:uniapp openid res appid 程序 支付 微信

小程序支付 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

相关文章