微信jssdk逻辑在vue中的运用详解
微信jssdk在vue中的简单使用
importwxfrom'weixin-js-sdk';
wx.config({
debug:true,
appId:'',
timestamp:,
nonceStr:'',
signature:'',
jsApiList:[]
});
wx.ready(()=>{
//dosomething...
});
wx.error((err)=>{
//dosomething...
});
以上是微信官方给出的示例代码,但是对于实际项目使用,还需要进一步对代码进行封装。本文基于vue进行示范,其余类框架同理。
在微信公众平台的官方文档中已经指出,由于安全性考虑,需要将签名逻辑放在后端处理,所以签名原理不在此赘述,主要讲讲如何使用后端返回后的签名调用jssdk。在逻辑层面,由于wx.config方法是调用任何接口前所必须的,所以我们可以尽可能将其抽离出来单独放置。
#utils/ . ├──common.js#通用函数 └──lib └──wechat#微信相关代码 ├──auth#微信用户登陆获取信息相关代码 │├──auth.js │└──index.js ├──config#jssdk初始化相关代码 │└──index.js ├──helper.js#微信相关操作 └──share#分享接口相关代码 └──index.js
importsdkfrom'weixin-js-sdk';
exportfunctioninitSdk({appid,timestamp,noncestr,signature,jsApiList}){//从后端获取
sdk.config({
debug:process.env.VUE_APP_ENV!=='production',
appId:appid,
timestamp:timestamp,
nonceStr:noncestr,
signature:signature,
jsApiList:jsApiList
});
}
这样就可以完成对jssdk的初始化,之后可以进行分享接口的初始化。最初的时候我想分享接口既然是可能对应每一个url页面(SPA应用中的view),那么就应该在view中使用mixin混入来书写,所以产生了第一版实现。
//example.vue
exportdefault{
name:'example',
wechatShareConfig(){
return{
title:'example',
desc:'exampledesc',
imgUrl:'http://xxx/example.png',
link:window.location.href.split('#')[0]
};
}
}
//wechatMixin.js
import{share}from'@/utils/lib/wechat/share';
//获取wechat分享接口配置
functiongetWechatShareConfig(vm){
const{wechatShareConfig}=vm.$options;
if(wechatShareConfig){
returntypeofwechatShareConfig==='function'
?wechatShareConfig.call(vm)
:wechatShareConfig;
}
}
constwechatShareMixin={
created(){
constwechatShareConfig=getWechatShareConfig(this);
if(wechatShareConfig){
share({...wechatShareConfig});
}
}
};
exportdefaultwechatShareMixin;
//utils/lib/wechat/share
import{getTicket}from'@/utils/lib/wechat/helper';//签名接口
import{initSdk}from'@/utils/lib/wechat/config';
importsdkfrom'weixin-js-sdk';
//接口清单
constJS_API_LIST=['onMenuShareAppMessage','onMenuShareTimeline'];
//消息分享
functiononMenuShareAppMessage(config){
const{title,desc,link,imgUrl}=config;
sdk.onMenuShareAppMessage({title,desc,link,imgUrl});
}
//朋友圈分享
functiononMenuShareTimeline(config){
const{title,link,imgUrl}=config;
sdk.onMenuShareTimeline({title,link,imgUrl});
}
exportfunctionshare(wechatShareConfig){
if(!wechatShareConfig.link)returnfalse;
//签名验证
getTicket(wechatShareConfig.link).then(res=>{
//初始化`jssdk`
initSdk({
appid:res.appid,
timestamp:res.timestamp,
noncestr:res.noncestr,
signature:res.signature,
jsApiList:JS_API_LIST
});
sdk.ready(()=>{
//初始化目标接口
onMenuShareAppMessage(wechatShareConfig);
onMenuShareTimeline(wechatShareConfig);
});
});
}
写完之后乍一看似乎没什么毛病,但是每个view文件夹下的.vue都有一份微信配置显得很是臃肿,所以第二版实现则是将jssdk初始化放在vue-router的beforeEach钩子中进行,这样可以实现分享配置的统一配置,更加直观一些。
//router.js
//...
routes:[
{
path:'/',
component:Example,
meta:{
wechat:{
share:{
title:'example',
desc:'exampledesc',
imgUrl:'https://xxx/example.png'
}
}
}
}
]
//...
//初始化分享接口
functioninitWechatShare(config){
if(config){
share(config);
}
}
router.beforeEach((to,from,next)=>{
const{shareConfig}=to.meta&&to.meta.wechat;
constlink=window.location.href;
if(!shareConfig)next();
initWechatShare({...shareConfig,link});
switchTitle(shareConfig.title);//切换标题
next();
});
这样一来,会显得.vue清爽很多,不会有太多业务逻辑之外的代码。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。