文档--JS-SDK说明文档 developers.weixin.qq.com/doc/offiacc…
我是单独写了一个js————wxshare.js,在main.js中引入
import "./tools/share_wx";
JSSDK使用
1、绑定域名
先登录微信公众平台进入"公众号设置"—>"功能设置"里填写如下的JS接口安全域名 备注:登录后可在“开发者中心”查看对应的接口权限。
2、引入JS文件
在需要调用JS接口的页面引入如下JS文件,(支持https):res.wx.qq.com/open/js/jwe…
如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:res2.wx.qq.com/open/js/jwe… (支持https)。
备注:支持使用 AMD/CMD 标准模块加载方法加载
安装js-sdk
"jweixin-module": "^1.6.0"
npm install jweixin-module --save
3、通过config接口注入权限验证配置。
所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用
获取权限验证配置:
* 获取access_token(是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token) //https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
* 用access_token 获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
* 用jsapi_ticket生成JS-SDK权限验证的签名
-----------------------以上获取签名需要后端配合,前端只需要接口调用获取---------------------------------
4、 注入config后通过ready接口处理成功验证
wx.ready(function(){
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
附代码---wxshare.js
import axios from "axios";
import wx from "jweixin-module";
//给url给后台生成config配置
axios({
method: "post",
url: "/profitapi/getSign",
data: {
url: window.location.href //去掉hash后的url进行生成秘钥
},
timeout: 5000
})
.then(function(res) {
if (res.status === 200) {
let appId = res.data.appId;
let nonceStr = res.data.nonceStr;
let timestamp = res.data.timeStamp;
let signature = res.data.signature;
let tit = "橙彩广告";
let myurl = window.location.href;
let des =
"常州橙彩文化传媒有限公司简介....";
wx_share(tit, des, myurl, appId, nonceStr, timestamp, signature);
}
})
.catch(function(error) {
if (error.statusText === "timeout") {
// 请求超时
alert(error);
} else {
}
});
function wx_share(tit, des, myurl, appId, nonceStr, timestamp, signature) {
wx.config({
debug: true,
// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。发布请改成false
appId: appId, // 必填,公众号的唯一标识
timestamp: timestamp, // 必填,生成签名的时间戳
nonceStr: nonceStr, // 必填,生成签名的随机串
signature: signature, // 必填,签名
jsApiList: ["updateAppMessageShareData", "updateTimelineShareData"] // 必填,需要使用的JS接口列表
});
// 分享到朋友
wx.ready(function() {
// 检查api是否可用接口
/* wx.checkJsApi({
jsApiList: ["onMenuShareAppMessage"],
success: function(res) {-->
alert(res);-->
}
});*/
// 自定义“分享给朋友”及“分享到QQ”按钮的分享内容
wx.updateAppMessageShareData({
title: tit, // 分享时的标题
desc: des, // 分享描述
link: myurl, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl:
"https://attachmentgw/.../fs/cn/5c/20254C1C9B5B69943A1EF968.jpg", // 分享图标
success() {
// 设置成功
console.log("updateAppMessageShareData success");
}
});
// 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容
wx.updateTimelineShareData({
title: tit,
link: myurl,
imgUrl:
"https://attachmentgw/.../fs/cn/5c/20254C1C9B5B69943A1EF968.jpg",
success() {
console.log("updateTimelineShareData success");
}
});
});
}
调试(强烈建议)
强烈建议使用微信开发者工具进行调试
填坑:
1、invalid url domain当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名
2、invalid signature签名错误
* 确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。
* 确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。
* 确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。
* 确保一定缓存access_token和jsapi_ticket。
* 确保你获取用来签名的url是动态获取的--因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败(就是为什么二次分享失败的原因)
3、 the permission value is offline verifying这个错误是因为config没有正确执行,或者是调用的JSAPI没有传入config的jsApiList参数中。建议按如下顺序检查:
* 确认config正确通过。
* 如果是在页面加载好时就调用了JSAPI,则必须写在wx.ready的回调中。
* 确认config的jsApiList参数包含了这个JSAPI。
DEMO页面和示例代码
www.weixinsxy.com/jssdk/ demo.open.weixin.qq.com/jssdk/sampl…