微信支付方式

1.浏览器内的微信支付

  • 这个相对微信内部的支付,前端的步骤会少一些。
  • 地址栏的参数一定要经过转码
  • 参数不识别&符号,我们解决的方法是‘,’隔开,依次获取
  • 下单时直接调取后台给的支付接口即可
util.api({
  url: url,
  headers:{
      token: util.getCookie('token')
  },
  data: data,
  type:'post',
  dataType:'json',
  success:function(res){
    if(res.rpco == 200){
      let data = id+','+opt.id+','+encodeURIComponent(token)+','+ encodeURIComponent(res.url);
      //跳转微信
      let redirect_url = 'order_good.html?data='+data;
      util.href(res.url+'&redirect_url='+encodeURI(redirect_url));
      //支付失败重新支付时的跳转地址,由接口返回
      opt.pay_url = res.rpbd.url;
  }
})
  1. 微信内部的h5支付
    1)在公众平台的相关配置:(一般开发时找PM即可,但不排除PM对这些不懂~那么 呵= =,那就等着加班吧)

    • 在公众平台配置appid,开通支付功能;
    • 公众平台配置商户号,并绑定相应appid,与上面的appid保持一致
    • 配置网页授权的回调url(注意这里只需填写域名),也就是获取code之后的redirect_uri地址的域名
    • 配置支付的回调页面地址,(注意地址要求是具体页面的上一级目录)

    2)根据官方文档获取code
    url一定要encode转码
    state可以是你想要传的参数,但必须是字母或者数字
    scope=snsapi_userinfo,获取用户的头像跟昵称等信息,需要手动授权
    scope=snsapi_base,为静默授权用户无感知,但只能得到openid

'https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&' + 'redirect_uri=url&response_type=code&scope=snsapi_userinfo&state=1&' +
 'connect_redirect=1#wechat_redirect'

3)根据code获取openid/ 用code换取assess_token,再获取openid
不管那种方法,获取openid都需要存储在服务器端
4)拿到openid之后,调取后端下单的接口(openid为必传参数)
5)调起微信支付,里面的参数是在上一步接口会返回

function onBridgeReady() {
    WeixinJSBridge.invoke(
        'getBrandWCPayRequest', {
            "appId":  "", //公众号名称,由商户传入     
            "timeStamp": + new Date(), //时间戳,自1970年以来的秒数     
            "nonceStr": "", //随机串     
            "package": "prepay_id=u802345jgfjsdfgsdg888",//一般接口返回时会拼接好
            "signType": "MD5", //微信签名方式:     
            "paySign": "" //微信签名 
        },
        function(res) {
            if (res.err_msg == "get_brand_wcpay_request:ok") {
                // 使用以上方式判断前端返回,微信团队郑重提示:
                //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
                callback && callback(res);
            } else {
                Toast('支付失败');
            }
        });
}
if (typeof WeixinJSBridge == "undefined") {
    if (document.addEventListener) {
        document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
    } else if (document.attachEvent) {
        document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
        document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
    }
} else {
    onBridgeReady();
}

ps,吐槽一下
微信支付调试会比较坑,无法在微信开发者工具进行调试,更别说浏览器了
不知道大佬们都怎么调试的?讨论讨论 ~
我的调试也是经过跟同事各种研究,最后利用nginx+抓包+手机代理 ,一步步alert,前进着~~ 最后,终于支付完成~~

你可能感兴趣的:(微信支付方式)