前言
今天做了个分享功能,反正挺诡异的,下面就来说一说步骤
后端使用egg.js,代码如下:
'use strict';
const Subscription = require('egg').Subscription;
class AccessToken extends Subscription {
static get schedule() {
return {
interval: '2h',//2小时获取一次
type: 'all',
};
}
async subscribe() {
const config = this.ctx.app.config.wechat_config;
const url = 'https://api.weixin.qq.com/cgi-bin/token"htmlcode">
async getJSsdk() {
const appId = this.ctx.app.config.wechat_config.appId;//appid
const ticket = this.ctx.app.ticket;//初始化时获得的ticket
const nonceStr = Math.random()
.toString(36)
.substr(2, 15);
const timestamp = parseInt(new Date().getTime() / 1000);//秒为单位的时间戳
let url = this.ctx.query.link; //前端的页面地址
url = decodeURIComponent(url);//解码
const string = 'jsapi_ticket=' + ticket + '&noncestr=' + nonceStr + '×tamp=' + timestamp + '&url=' + url;
const hash = crypto.createHash('sha1');
hash.update(string);
const signature = hash.digest('hex');//生成签名
this.ctx.body = {
status: true,
message: '获取成功',
data
};
};
步骤
1.在vue项目中public目录下的index.html中引入
<script src="/UploadFiles/2021-04-02/jweixin-1.4.0.js">
2.在想分享的组件的mounted中加入如下代码:
//如果不创建meta标签分享出去的就会没有描述
var oMeta = document.createElement('meta');
oMeta.content = '随意的内容';//这里随便写
oMeta.name = 'keywords';
document.getElementsByTagName('head')[0].appendChild(oMeta);
var oMeta1 = document.createElement('meta');
oMeta1.content = '随意的内容';//这里随便写
oMeta1.name = 'description';
document.getElementsByTagName('head')[0].appendChild(oMeta1);
3.initJSSDK方法体:
function initJSSDK() {
let wechaturl = window.location.href.split('#')[0];//单页应用就获取#前面的东西
let link = encodeURIComponent(wechaturl);
const jssdk = await getJSSDK(link); //给后端接口传过去当前页面的地址,注意这个地址要配置在js安全域名里
wx.ready(() => {
let shareData = {
title: this.detail.title,
desc: this.detail.summary,
link: location.href, //必须是js安全域名下的地址(分享出去的没有图片显示请检查这里的link参数)
imgUrl: window.wechatImg,//随意地址的图片都行,最好是jpg的,经测试无图片大小约束
success: function () {
console.log(1);
},
cancel: function () {
console.log(2);
}
};
wx.onMenuShareAppMessage(shareData);//分享给好友
wx.onMenuShareQQ(shareData);//分享给手机QQ
wx.onMenuShareQZone(shareData);//分享到QQ空间
wx.onMenuShareTimeline(shareData);//分享到朋友圈
});
wx.error(function (res) {
console.log(res);
});
wx.config({
debug: true,
appId: jssdk.appId, // 必填,公众号的唯一标识
timestamp: jssdk.timestamp, // 必填,生成签名的时间戳,精确到秒(后端返回)
nonceStr: jssdk.nonceStr, // 必填,生成签名的随机串(后端返回)
signature: jssdk.signature, // 必填,签名(后端返回)
jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline', 'onMenuShareQQ', 'onMenuShareQZone']
});
}
常见问题
无效的签名:可能是前端encode地址过去后,后端忘记解码了,也有可能是因为前端地址传错了或者没有encode就传过去了,后端签名算法出错的机率比较小.
还有可能是后端的ticket失效了(这个在开发过程中机率比较小)
无效的domain:前端给后端传的地址可能没有配置在js安全域名中
jssdk版本就用上面的1.4版本,同样的代码用了新版的就直接不行了,也没有任何报错。
暂时没有发现网上所说的苹果会出现问题。经测试都是好的
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。