vue技术栈

微信公众号支付实现详解(前端)

2018-08-28  本文已影响681人  Robin90

前言

完成微信h5支付的你,继续公众号的支付也许更简单哦。

场景

微信浏览器中的应用支付必须依赖于公众号支付,下面就公众号支付中的一些技术点进行详细的解析。

准备工作

基本配置申请

参考资料:微信公众号开通支付功能--百度经验教程

基本信息

业务流程图解以及时序图

与微信h5基本相同,唯一不同的是这次微信返回的需要唤起微信sdk支付的参数列表。

技术问题

获取openid

网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。获取openid分为两步,获取code,然后根据code获取openid,建议这两部分请求由后端发起,前端直接请求会涉及到跨域问题。后端直接把这两个方法定义为工具方法,使用方便,便于其他场景的复用。

一 :请求获取code,如果不想浪费时间请直接复制粘贴使用

二 根据code获取openid

微信支付sdk

方式一 :官网的方式

invoke方法 ,简单有效,直接根据接口返回参数唤起。以下代码实例是vue环境下的,其他环境请自行匹配,仅供参考。

// 准备好微信sdk部分  
    jsSdk(){
          // 判断微信的WeixinJSBridge
    if (typeof WeixinJSBridge == "undefined"){
        if( document.addEventListener ){
            document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady, false);
        }else if (document.attachEvent){
            document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady); 
            document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady);
        }
    }else{
      this.onBridgeReady();
    }
    },
    // 支付sdk准备完成
    onBridgeReady() {

    // 触发微信支付
          WeixinJSBridge.invoke(
       'getBrandWCPayRequest', {
       appId: this.payOption.appId, //公众号名称,由商户传入
        timeStamp: this.payOption.timeStamp, //时间戳,自1970年以来的秒数
        nonceStr: this.payOption.nonceStr, //随机串
        package: this.payOption.package, //prepay_id用等式的格式
        signType: this.payOption.signType, //微信签名方式:
        paySign: this.payOption.paySign, //微信签名
       },
       function(res){     
           if(res.err_msg == "get_brand_wcpay_request:ok" ) {
             // 支付成功 返回成功页 
             let tempUrl="//paysucc"
            location.href=tempUr
           } else{
            //  取消支付或者其他情况 get_brand_wcpay_request:cancel get_brand_wcpay_request:fail
            let tempUrl='//topay'
            location.href=tempUrl
           }    
       }
   ); 
    },

方式二 : 需要引入js-weixin的模块,流程如下:

引入模块--ready--获取access-token--获取ticket--生成签名(wx.config需要)--结合接口返回参数--唤起wxpay。(比较麻烦,不推荐使用)
参考文档:

参考文档

上一篇 下一篇

猜你喜欢

热点阅读