微信支付 h5实现微信支付功能 适用于VUE和UNIAPP

第一步网页授权微信登录

拉起微信支付的前提首先要微信登录,使用返回地址栏中的code,传给后端接口查出openId

文档地址网页授权 | 微信开放文档

跳转链接分别是固定链接:https://open.weixin.qq.com/connect/oauth2/authorize,和公众号的appId,配置重定向链接

上面的redirect_uri就是需要填写的重定向链接

什么是重定向:就是当自己的项目页面,执行微信登录需要跳转到微信的页面,然后微信根据你传的redirect_uri里面的值,等待微信获取code执行登录成功之后,再跳转回来的页面链接 

注意:

1.重定向的链接需要使用encodeURIComponent加密

2.重定向的链接需要将其父级目录,在微信支付平台的开发配置中添加一下链接,举例重定向链接是http://sss/#/ddd/ttt,在微信支付的开发配置中可以添加链接为:http://sss/#/ddd/

这是完整链接的拼接

var url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+getappId.appId+'&redirect_uri=重定向链接&response_type=code&'+'scope=snsapi_base&'+'state=123#wechat_redirect';

跳转此链接后会在浏览器地址栏中加入code这个参数及他的值,便可以通过code的值查出后端的openId

location.href=url;

async payZf(){  
    //获取openid
    var url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+输入公众号的appID+'&redirect_uri=http%3A//m.oasisedu.net/%23/login/purchaseConfirmPayCallback&response_type=code&'+'scope=snsapi_base&'+'state=123#wechat_redirect';
    location.href = url; 
}

在页面加载的时候判断获取code执行登录:

因为重定向链接回来了所以会触发一次当前页面的加载,所以可以在created钩子中作判断如果,地址栏中有code的这个值,则执行查询,查出openId

created(){
    this.getCode();
},
methods:{
    //获取code,之后查出openId,拉取支付
    async getCode(){ 
        //判断当前加载之后的地址栏中是否有code这个值,如果有则进入执行拉取微信支付
        if(location.href.indexOf('code')!==-1){ 
            let zzz=location.href;
            //截取地址栏中code的值
            this.codeCommon=zzz.substr(zzz.indexOf('=')+1,zzz.indexOf('&')-(zzz.indexOf('=')+1));
            let openId=await getwChatopenId(this.codeCommon);
            console.log('我是openId');
            console.log(openId); 
            this.pullWchatPay();
        } 
    }
}

代码说明 

1.上方代码的getwChatopenId是调用后端接口

2.传入获取到的code(代码中codeCommon就是code),将openId查询出来

3.查询成功获取到openId

4.调用拉起支付方法pullWchatPay()

微信支付拉取支付方法上方代码块调用此方法

    //拉取微信支付的方法
    pullWchatPay(){
        var that=this;
        let onBridgeReady=()=>{
            if(WeixinJSBridge &&appId){
                WeixinJSBridge.invoke(
                    'getBrandWCPayRequest',{appId,nonceStr,package:packageValue,paySign,signType,timeStamp},
                    function (res) { 
                        console.log('调起支付时的警告');
                        console.log(res);
                        if(res.err_msg==='get_brand_wcpay_request:ok'){
                            _this.payType=0;
                            console.log('支付成功回调')
                        }else{ 
                            console.log('支付失败')
                        }
                    }
                )
            }
        }
        // 检测支付环境中的 WeixinJSBridge
        if (typeof WeixinJSBridge == "undefined"){
            if (document.addEventListener) {
                //android机型,调取支付支付环境偶尔有延迟,这里增加延时器处理
                var timev=setTimeout(()=>{
                    clearTimeout(timev)
                    document.addEventListener('WeixinJSBridgeReady', onBridgeReady(),     
                    false);
                },1000)
            } else if (document.attachEvent) {
                document.attachEvent('WeixinJSBridgeReady', onBridgeReady());
                document.attachEvent('onWeixinJSBridgeReady', onBridgeReady());
            }
        } else {
            onBridgeReady();
        }
    }

 代码说明

这一行里面的nonceStr,package,paySign,signType,timeStamp这几个参数需要让后端协助调用api使用接口查询出来

注意

因为h5的微信支付需要在商户平台中配置授权目录,配置授权目录个数是有限制的

所以授权支付需要写一个单独跳转支付的页面,把所有的支付场景集中在一个页面跳转就只需要配置一个授权目录即可

使用中遇到的错误

另外还遇到了一个问题在uniapp中使用跳转支付目录拉起微信支付的时候报错

uniapp使用微信H5支付,授权目录不正确的问题_路光.的博客-CSDN博客

  • 37
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路光.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值