这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

最近在做安卓内嵌入H5活动页拉新活动,遇到的棘手问题记录下,

一是为了日后遇到同样问题好回顾,二是希望能帮到有同样问题的兄弟。

废话不多说,先从最棘手的问题直接开始:

一、Invalid Signature

1.因为项目内是Vue中的hash模式,所以遇到这个问题时,一直怀疑hash模式是不是不可以。——其实可以,hash和history都可以;记得 encodeURIComponent(location.href.split('#')[0])

2.按照官方文档的步骤去排查错误:

(1)确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。——这个问题主要在后台那里,要点:1.公众号后台配置ip白名单以及JS安全域名。重点:ip白名单记得要配后台线上服务器的ip,否则线上后台是拿不到asscee_token的,access_token为null时也可以参与signature的计算,很坑!!!建议让后台把access_token和jsapi_ticket返回或者让后台看看到底有没有返回值;2.记得拿公众号的APPID去计算,一定要后台亲眼去比对,APPID对不对!(2)确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。——这一步没啥好说的,自己好好检查

(3)确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。——记得 encodeURIComponent(location.href.split('#')[0])

(4)确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。

(5)确保一定缓存access_token和jsapi_ticket。

(6)确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。**——记得前端把当前页面路径(encodeURIComponent(location.href.split('#')[0]))ajax 传给后台 **

二、the permission value is offline verifying

(1)确认config正确通过。——记得在页面挂在完毕去注入JSSDK,如果有路由拦截跳转的,要跳转完毕后再去注入,要保证注入的页面url和调用分享接口的url是一模一样(encodeURIComponent(location.href.split('#')[0]))

(2)如果是在页面加载好时就调用了JSAPI,则必须写在wx.ready的回调中。——wx.ready的回调去写分享逻辑

(3)确认config的jsApiList参数包含了这个JSAPI。

三、permission denied

(1)先去微信公众平台 看看公众号没有权限使用这个JSAPI

(2)可以调用jweixin.checkJsApi,记得把debug打开,微信开发者工具和真机报的错误很大可能会不一样。引用的最新的jssdk 1.6;也用了最新的分享给好友的方法;真机 updateAppMessageShareData: true; updateTimelineShareData: true; config: ok,就是分享不了,我真是吐了,


如果遇到同样的情况,记得jsApiList加入 onMenuShareAppMessage,没错就是老版本,那个即将废弃的分享api

最后放上封装的类:

1.初始化vue时,let wx = new Wx();if(wx.isWeiXin){ Vue.prototype.wx = wx; }

2.调用时,this.wx.share(title, desc, link, imgUrl, successCallback)

3.记得改一下_initJssdk方法中请求接口config配置的api

export class Wx {

  constructor (jsApiList = ['updateAppMessageShareData', 'onMenuShareAppMessage' , 'closeWindow']) {
this.isWeiXin = this.isInWx()
this.wxJssdkInfo = {}
this.jsApiList = jsApiList
} isInWx () {
return navigator.userAgent.toLowerCase().indexOf('micromessenger') > -1 ? true : false
} async _initJssdk (callback) {
try {
let auth_url = encodeURIComponent(location.href.split('#')[0])
let params = { auth_url }
this.wxJssdkInfo = await fissionApi.getWxAuth(params)
jweixin.config({
debug: IS_PRO() ? false : true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: this.wxJssdkInfo.app_id, // 必填,公众号的唯一标识
timestamp: this.wxJssdkInfo.timestamp, // 必填,生成签名的时间戳
nonceStr: this.wxJssdkInfo.noncestr, // 必填,生成签名的随机串
signature: this.wxJssdkInfo.signature,// 必填,签名
jsApiList: this.jsApiList // 必填,需要使用的JS接口列表
})
jweixin.error(res => console.log(res))
if (callback) {
callback(this.wxJssdkInfo)
}
} catch (err) {
console.log(err)
}
}
share (title, desc, link, imgUrl, successCallback) {
link = link || window.location.href;
if(!this.isWeiXin) return
this._initJssdk(() => {
jweixin.ready(() => {
jweixin.checkJsApi({
jsApiList: this.jsApiList, // 需要检测的JS接口列表,所有JS接口列表见附录2,
success: function(res) {
if (res.checkResult.updateAppMessageShareData || res.checkResult.onMenuShareAppMessage) {
jweixin.onMenuShareAppMessage({
title,
desc,
link,
imgUrl,
success: res => successCallback && successCallback(res),
fail: function(error) {
console.log('updateAppMessageShareData error:', error);
}
})
jweixin.onMenuShareAppMessage({
title,
desc,
link,
imgUrl,
success: res => successCallback && successCallback(res),
fail: function(error) {
console.log('updateAppMessageShareData error:', error);
}
})
}
}
})
})
})
} closeH5 () {
wx.closeWindow();
}
}

【问题】

使用微信SDK的分享接口wx.updateAppMessageShareData时,控制台出现‘updateAppMessageShareData:fail, the permission value is offline verifying’错误提示。

【解决】

jsApiList里面声明updateAppMessageShareData方法。

示例代码如下:

wx.config({
debug: false,
appId: data.appId,
timestamp: data.timestamp,
nonceStr: data.nonceStr,
signature: data.signature,
jsApiList: ['updateAppMessageShareData'],
});

本文转载于:

https://www.jianshu.com/p/d471217e7bd0

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

记录--微信调用jssdk--Invalid Signature, updateAppMessageShareData: denied等问题的更多相关文章

  1. 基于weixin-java-mp 做微信JS签名 invalid signature签名错误 官方说明

    微信JS签名详情请见:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang= ...

  2. 微信-js sdk invalid signature签名错误 问题解决

    如果出现 invalid signature,首先可以确定的是你的签名算法有问题.建议:首先查看微信官方网站给出的解决方案,链接为: http://mp.weixin.qq.com/wiki/7/aa ...

  3. Java微信开发_Exception_03_非微信官方网页-invalid signature

    由于natapp免费隧道的域名是系统随机分配的,老是在变.故昨天又换了内网映射工具,分别换了ngrok和花生壳,然而在做JSSDK网页开发时,按了微信的view菜单按钮进行页面跳转时,微信官方提示“非 ...

  4. vue 单页面(SPA) history模式调用微信jssdk 跳转后偶尔 "invalid signature"错误解决方案

    项目背景 vue-cli生成的单页面项目,router使用history模式.产品会在公众号内使用,需要添加微信JSSDK,做分享相关配置. 遇到的问题 相关配置与JS接口安全域名都已经ok,发布后, ...

  5. 微信公众号之:JSSDK接入以及invalid signature等常见错误问题

    最近在搞微信公众号开发,进行到网页开发部分被坑了一天,最坑的问题就是invalid signature,而网上大部分解答这个问题的都没有说清楚,都直接丢文档.博主认为这样很不好.本文是博主结合自身遇到 ...

  6. 解决vue单页面应用做微信JSSDK注入权限时出现“invalid signature”(ios端)

    --都说微信开发多坑,没想到遇到一个天坑. 在做一个vue项目时,要用到微信JS-SDK,官方文档详见:https://developers.weixin.qq.com/doc/offiaccount ...

  7. 微信企业号 jsSDK wx.config报invalid signature错误,导致api接口无法使用

    最近在做公司定制化的时候发现一个问题,使用微信的语音API的时候微信报错,错误信息为:the permission value is offline verifying 但是诡异的是:同样的代码在我们 ...

  8. 微信jssdk config:invalid signature 签名错误 ,问题排查过程

    invalid signature签名错误.建议按如下顺序检查: 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisi ...

  9. 微信开发配置JSSDK,注入权限验证,以及invalid signature签名错误解决

    在微信开发中很多功能都要用到微信JSSDK,关于JSSDK的使用,微信官方的文档已经比较详细,一定要仔细去看文档. <script src="https://res.wx.qq.com ...

  10. 微信jsSDK公众号开发时网页提示 invalid signature错误的解决方法

    微信公众号开发jsSDK,链接地址不能加?参数,可以通过#传递参数. 不然.页面wx.ready()时就会报错,用 wx.error(function (res) { alert("接口验证 ...

随机推荐

  1. 编译pjsip源码

    操作系统 : Windows 10_x64 [版本 10.0.19042.685] pjsip版本 : 2.10 pjsip官网:https://www.pjsip.org/ 1. 下载pjsip源代 ...

  2. NEMU PA 2-3 实验报告

    课程地址:https://www.bilibili.com/video/BV1yC4y1s74C 一.实验目的 了解ELF符号表的解析 进一步完善调试器的功能,理解编译器的设计原理 二.实验步骤 在P ...

  3. NC15479 最短路

    题目链接 题目 题目描述 企鹅国中有 \(N\) 座城市,编号从 \(1\) 到 \(N\) . 对于任意的两座城市 \(i\) 和 \(j\),企鹅们可以花费 \((i\,\,xor\,\, j)* ...

  4. OCP试题解析之053-61 RMAN set command id to

    61.You frequently have multiple RMAN sessions running, and you want to be able to easily identify ea ...

  5. python课本学习-第二章

    chapter 2 编程基础 一.基本语法 1.注释 python注释以\("#"\)开始 多行注释使用三个单引号/双引号作为开始和结束标志 2.标识符与关键字 python命名时 ...

  6. win32-StretchDIBits - PrintDlg

    使用StretchDIBits将位图数据传输到printer的dc中 #include <Windows.h> #include <algorithm> int main() ...

  7. Redis原理再学习03:数据结构-链表 list

    链表list介绍 1. 链表list简介 链表(linked list)是一种基础数据结构,是一种线性表,但是不会按照线性表的顺序存储数据,而是在每一个节点里存到下一个节点的指针. 链表插入节点时是 ...

  8. AI数字人SadTalker实战

    1.概述 AI数字人在营销和品牌推广中扮演着至关重要的角色,许多企业和个人正积极利用数字技术来打造属于自己的财富.有没有一种简单而免费的方式来创建自己的数字人呢?本篇博客笔者将为大家介绍如何搭建属于自 ...

  9. 【LeetCode二叉树#13】遍历二叉搜索树

    二叉搜索树中的搜索 力扣题目地址(opens new window) 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在 ...

  10. 【C++ OOP 02 对象的初始化和清理】构造/析构函数、深/浅拷贝、初始化列表以及静态成员

    [对象的初始化和清理] 生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候也会删除一些自己信息数据保证安全 C++中的面向对象来源于生活,每个对象也都会有初始设置以及 对象销毁前的清理数据 ...