vue.js 在微信JS-SDK中分享、微信付出、扫一扫等署名失效的处理

一,先上岸微信民众号背景绑定js平安域名,不须要加http或https,概况百度。

二、信民众号背景设置服务器的IP为白名单,不然没法猎取access_token,概况百度

三、引入wx-js-sdk

1.运用script标签 http://res.wx.qq.com/open/js/…(支撑https)引入;
2.如果运用vue-cli脚手架东西,能够先npm install weixin-js-sdk -s 加载依靠包
以下已脚手架为例
.vue 文件中 import wx from ‘weixin-js-sdk’;

        getConfig(){    let that = this;
          this.$axios({
              url:that.api.shareUrl,//换成你现实要求的途径
              method:'post',
              data:{
                  url:window.location.href //猎取当前途径,注重途径平常不能写死,要求署名的途径和终究调取wx-sdk途径必需一致。
              }
          }).then(function (res) {
              let sign = res.data.data;//后端返回的微信的数据
              wx.config({
                  debug: true, // 开启调试形式,挪用的一切api的返回值会在客户端alert出来,若要检察传入的参数,能够在pc端翻开,参数信息会经由过程log打出,仅在pc端时才会打印。
                  appId: sign.appId, // 必填,民众号的唯一标识
                  timestamp: sign.timestamp, // 必填,天生署名的时刻戳
                  nonceStr: sign.nonceStr, // 必填,天生署名的随机串
                  signature: sign.signature, // 必填,署名,见附录1
                  jsApiList: [
                      'onMenuShareTimeline',
                      'onMenuShareAppMessage',
                      'hideMenuItems',
                      'showMenuItems',
                      'showAllNonBaseMenuItem',
                      'hideAllNonBaseMenuItem',
                      'startRecord',
                      'stopRecord',
                      'onVoiceRecordEnd',
                      'uploadVoice',
                      'downloadVoice',
                      'playVoice',
                      'onVoicePlayEnd',
                      'pauseVoice',
                      'stopVoice',
                      'openLocation',
                      'getLocation',
                      'chooseWXPay',
                      'onMenuShareQQ',
                      'scanQRCode',
                  ], // 必填,须要运用的JS接口列表,一切JS接口列表见附录2
              });
          }).catch(function (err) {
              
          })
        };
        初始化完成,以调起微信扫一扫为例
            scan(){
            let that =this;
            wx.ready(function() {
                wx.scanQRCode({
                    needResult : 1, // 默以为0,扫描效果由微信处置惩罚,1则直接返回扫描效果
                    success : function(res) {
                        var data = res.resultStr; // 当needResult 为 1 时,扫码返回的效果
                        var result  =data.split(',')[1];//返回的效果是码的范例+‘,’+内容,所以要以数组分割取第二个。
                      //处置惩罚本身的逻辑
                         
                    }
                });
            })
        }

四、重点来了,处理微信signature无效的题目

运用vue-router的网友都晓得,路由上带有#做路由的跳转,而#在发过去做微信考证的signature的时刻,#会被干掉,终究致使署名无效。比方你的途径是 www.a.com/#/scan 拿去署名,#被干掉今后,你运用www.a.com/#/scan,做wx.config signature是无效的。很多人都晓得要运用vue的history形式。
// 路由设置

const RouterConfig = {
    mode: 'history',
    routes: routers
};

比方你的域名是www.a.com,你的文件布置在根目次下,首页一般接见,运用页面内部调解路由,如菜单等,没题目。然则一旦你直接接见www.a.com/scan,或许从首页菜单跳转到www.a.com/sacn然后革新本页,你会发明返回404。
以下以nginx为例剖析这个题目,你接见www.a.com,nginx要求到根目次下index.html,没题目,页面上运用菜单做跳转页没题目,然则一旦你直接接见www.a.com/scan,或许革新www.a.com/scan,nginx找不到scan这个文件夹,所以返回404
so,设置 mode: ‘history’,还须要nginx设置合营。接见不到文件夹的时刻,

location / {
            if (!-e $request_filename){
                rewrite ^/(.*) /index.html last;
            }
          }

直接回到你的index.html并把参数带回来。处理一切题目

如果你的项目不是布置在根目次怎么办?
如果你的项目布置的目次是 /test/
vue router 的设置为

const RouterConfig = {
    mode: 'history',
    base:'test',
    routes: routers
};

nginx的设置为

 location /test/ {
    if (!-e $request_filename){
                rewrite ^/(.*) /test/index.html last;
            }
}       
     

 
    原文作者:Jeff
    原文地址: https://segmentfault.com/a/1190000015873294
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞