生产环境踩坑记:Vue接入jssdk踩坑记

想要查看前面的笔记请翻阅我的CSDN博客,作者码字不易,喜欢的话点赞,加个关注吧,后期还有很多干货等着你!

1.获取当前url

//获取url,注意踩坑
let url = location.href.split('#')[0]
坑点:1. 这里要注意的就是url的问题,如果url没有正确传递,后端也会返回信息,但是签名信息会是错误的。
2. 上面提到的完整url指的是:'http(s)‘部分,以及’?‘后面的GET参数部分,但不包括’#'hash后面的部分。可以通过 location.href 来获取。
3. 如果你的vue项目,路由没有开启history 模式,也就是你的url上面包含“#”,这个时候要从后端正确获取签名,就需要 去掉url上#后面的字符 。(url去掉’#‘hash部分,可用 location.href.split(’#’)[0] )

2.将url传入后端

export function getJssdk (url) {
  let para = {
    params: { signurl: url }
  }
  const res = service.get('wx/getsign', para)
  return res
}
这里我使用了get方法,将url传入到后端解析后端主要操作的是生成signature,具体后端生成方法这里不做讨论,详见,点击->企业微信SDK文档,其实也比较简单,网上Demo也比较多
后端会给我返回我需要的值
{
	code: 0, 
	ticket:"XXXXXXXX", 
	appid: "XXXXXXXX", 
	sign: "XXXXXXXX", 
	signurl: "XXXXXXXX",
	noncestr: "XXXXXXXX",
	timestamp: XXXXXXXX
}
返回字段字段解释
ticketH5应用调用企业微信JS接口的临时票据
appid企业微信的corpID
sign签名
signurl授信url
noncestr随机字符串
timestamp时间戳

3.将后端返回的配置文件放入jssdk配置文件中

先下载微信提供的weixin-js-sdk,微信封装好的工具,以便我们去操作

npm isntall weixin-js-sdk --save

将配置信息传入

import wx from 'weixin-js-sdk'

getJssdk(url)
        .then(res => {
          console.log(res)
          this.signature = res.sign;
          this.appId = res.appid;
          this.noncestr = res.noncestr;
          this.timestamp = res.timestamp;
          wx.config({
            beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: this.appId, // 必填,企业微信的corpID
            timestamp: this.timestamp, // 必填,生成签名的时间戳
            nonceStr: this.noncestr, // 必填,生成签名的随机串
            signature: this.signature,// 必填,签名,见附录1
            jsApiList: ['previewFile'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
          });
          wx.ready(function () {
            console.log("接入sdk")
          });
          wx.error(function (res) {//通过error接口处理失败验证
            // config信息验证失败会执行error
            console.log('执行失败');
          });
        }).catch(err => {
          console.log(err);
        })
    },

注意这里 当我们需要用到页面加载就要触发的方法时,这里需要踩坑

wx.ready(function(){
    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,
    // config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,
    // 则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,
    // 则可以直接调用,不需要放在ready函数中。
});

4.当你需要使用异步的方法时

注意这里,微信weixin-js-sdk中有个天坑,有部分调用的方法时没办法直接调用的。比如我现在要用的previewFile(文件预览)

      wx.invoke(
        "previewFile",
        {
          url: this.downloadAttachmentUrl, // 需要预览文件的地址(必填,可以使用相对路径)
          name: name, // 需要预览文件的文件名(不填的话取url的最后部分)
          size: size // 需要预览文件的字节大小(必填)
        }
      );

以下是weixin-js-sdk支持直接调用的api

config: ƒ (t)
ready: ƒ (e)
error: ƒ (e)
checkJsApi: ƒ (e)
onMenuShareTimeline: ƒ (e)
onMenuShareAppMessage: ƒ (e)
onMenuShareQQ: ƒ (e)
onMenuShareWeibo: ƒ (e)
onMenuShareQZone: ƒ (e)
updateTimelineShareData: ƒ (e)
updateAppMessageShareData: ƒ (e)
startRecord: ƒ (e)
stopRecord: ƒ (e)
onVoiceRecordEnd: ƒ (e)
playVoice: ƒ (e)
pauseVoice: ƒ (e)
stopVoice: ƒ (e)
onVoicePlayEnd: ƒ (e)
uploadVoice: ƒ (e)
downloadVoice: ƒ (e)
translateVoice: ƒ (e)
chooseImage: ƒ (e)
getLocation: ƒ (e)
previewImage: ƒ (e)
uploadImage: ƒ (e)
downloadImage: ƒ (e)
getLocalImgData: ƒ (e)
getNetworkType: ƒ (e)
openLocation: ƒ (e)
hideOptionMenu: ƒ (e)
showOptionMenu: ƒ (e)
closeWindow: ƒ (e)
hideMenuItems: ƒ (e)
showMenuItems: ƒ (e)
hideAllNonBaseMenuItem: ƒ (e)
showAllNonBaseMenuItem: ƒ (e)
scanQRCode: ƒ (e)
openAddress: ƒ (e)
openProductSpecificView: ƒ (e)
addCard: ƒ (e)
chooseCard: ƒ (e)
openCard: ƒ (e)
consumeAndShareCard: ƒ (e)
chooseWXPay: ƒ (e)
openEnterpriseRedPacket: ƒ (e)
startSearchBeacons: ƒ (e)
stopSearchBeacons: ƒ (e)
onSearchBeacons: ƒ (e)
openEnterpriseChat: ƒ (e)
launchMiniProgram: ƒ (e)
openBusinessView: ƒ (e)
miniProgram: {navigateBack: ƒ, navigateTo: ƒ, redirectTo: ƒ, switchTab: ƒ, reLaunch: ƒ,}
invoke: ƒ (t,n,r)
on: ƒ (t,n)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Alaia.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值