今天在做公众号H5的sdk分享功能,出现了
config:fail,Error: 系统错误,错误码:63002,invalid signature
这个报错
[微信官方文档(公众号)]
sdk官网链接直达
因为我是完全按照文档来写的代码,检查了一遍也没发现什么问题,
所以我把问题定位到是签名出错或者是公众号信息配置出现了问题
我是从两个角度去思考这个报错的
一、公众号信息配置出现问题
那么我是怎么去配置的呢?
首先,第一步
① 我们需要一个公众号,必须是服务号
,且微信认证审核通过
,没有认证或认证过期都是不可以的
②需要有备案过的域名(必须是备案过的,否则无法使用)
③在微信公众平台-公众号设置-功能设置-配置js接口域名(需将下载文件上传至指定的目录
)
备注:登录后可在“开发者中心”查看对应的接口权限
第二步 、引入js文件
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js
备注:支持使用 AMD/CMD 标准模块加载方法加载
因为我的项目是uniapp,所以我是使用下载并导入的方式
也可使用npm包安装的方式
npm install jweixin-module --save
①下载
下载链接:[https://www.lanzous.com/i8ujkvi](https://www.lanzous.com/i8ujkvi)
下载后放在项目中,具体放置位置可自行选择,比如直接放在根目录,或者放在 components 目录
②在main.js中引入
var jweixin=require('jweixin-module)
Vue.prototype.$wx=jweixin
③使用(在自己需要的地方调用函数)
let time = Date.parse(new Date())
let str = this.randomCoding()
let params = {
"noncestr": str,
"timestamp": time / 1000,
"url": window.location.href.split('#')[0]
}
let that = this
jssdkSign(params).then(res => {
if (res.data) {
this.$wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: uni.getStorageSync('appId'), // 必填,公众号的唯一标识
timestamp: time / 1000, // 必填,生成签名的时间戳
nonceStr: str, // 必填,生成签名的随机串
signature: res.data, // 必填,签名
jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData',
'onMenuShareAppMessage', 'onMenuShareTimeline'
] // 必填,需要使用的JS接口列表
});
}
})
setTimeout(() => {
this.$wx.ready(() => {
var shareData = {
// that.detail.info
title: that.detail.name, // 分享标题
desc: '2222222', // 分享描述
link: location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: that.detail.coverUrls, // 分享图标
success: function() {
// 设置成功
console.log('分享成功')
}
}
this.$wx.updateAppMessageShareData(shareData)
this.$wx.updateTimelineShareData(shareData)
this.$wx.onMenuShareAppMessage({
title: that.detail.name, // 分享标题
desc: that.detail.info, // 分享描述
link: location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: that.detail.coverUrls, // 分享图标
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function() {
// alert(11111)
// 用户点击了分享后执行的回调函数
}
});
});
}, 1000)
在确认完前端没问题的前提下,我开始去怀疑后端返回的数据问题
二、后端返回签名问题
找后端小哥哥对峙 还真是
对应后端签名 可以参考
https://www.cnblogs.com/niceyoo/p/12232641.html