1、invalid url domain

当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名,如果使用了端口号,则配置的绑定域名也要加上端口号(一个appid可以绑定三个有效域名,见 目录1.1.1)。

2、invalid signature签名错误。

建议按如下顺序检查:

  1. 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。

  2. 确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。

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

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

  5. 确保一定缓存access_token和jsapi_ticket。

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

3、the permission value is offline verifying

这个错误是因为config没有正确执行,或者是调用的JSAPI没有传入config的jsApiList参数中。建议按如下顺序检查:

  1. 确认config正确通过。
  2. 如果是在页面加载好时就调用了JSAPI,则必须写在wx.ready的回调中。
  3. 确认config的jsApiList参数包含了这个JSAPI。

4、permission denied

该公众号没有权限使用这个JSAPI,或者是调用的JSAPI没有传入config的jsApiList参数中(部分接口需要认证之后才能使用)。

5、function not exist

当前客户端版本不支持该接口,请升级到新版体验。

6、为什么6.0.1版本config:ok,但是6.0.2版本之后不ok

因为6.0.2版本之前没有做权限验证,所以config都是ok,但这并不意味着你config中的签名是OK的,请在6.0.2检验是否生成正确的签名以保证config在高版本中也ok。

7、在iOS和Android都无法分享

请确认公众号已经认证,只有认证的公众号才具有分享相关接口权限,如果确实已经认证,则要检查监听接口是否在wx.ready回调函数中触发

8、服务上线之后无法获取jsapi_ticket,自己测试时没问题。

因为access_token和jsapi_ticket必须要在自己的服务器缓存,否则上线后会触发频率限制。请确保一定对token和ticket做缓存以减少2次服务器请求,不仅可以避免触发频率限制,还加快你们自己的服务速度。目前为了方便测试提供了1w的获取量,超过阀值后,服务将不再可用,请确保在服务上线前一定全局缓存access_token和jsapi_ticket,两者有效期均为7200秒,否则一旦上线触发频率限制,服务将不再可用。

9、uploadImage怎么传多图

目前只支持一次上传一张,多张图片需等前一张图片上传之后再调用该接口

10、没法对本地选择的图片进行预览

chooseImage接口本身就支持预览,不需要额外支持

11、通过a链接(例如先通过微信授权登录)跳转到b链接,invalid signature签名失败

后台生成签名的链接为使用jssdk的当前链接,也就是跳转后的b链接,请不要用微信登录的授权链接进行签名计算,后台签名的url一定是使用jssdk的当前页面的完整url除去’#’部分

12、出现config:fail错误

这是由于传入的config参数不全导致,请确保传入正确的appId、timestamp、nonceStr、signature和需要使用的jsApiList

13、如何把jsapi上传到微信的多媒体资源下载到自己的服务器

请参见文档中uploadVoice和uploadImage接口的备注说明

14、Android通过jssdk上传到微信服务器,第三方再从微信下载到自己的服务器,会出现杂音

微信团队已经修复此问题,目前后台已优化上线

15、绑定父级域名,是否其子域名也是可用的

是的,合法的子域名在绑定父域名之后是完全支持的

16、在iOS微信6.1版本中,分享的图片外链不显示,只能显示公众号页面内链的图片或者微信服务器的图片,已在6.2中修复

17、是否需要对低版本自己做兼容

jssdk都是兼容低版本的,不需要第三方自己额外做更多工作,但有的接口是6.0.2新引入的,只有新版才可调用

18、该公众号支付签名无效,无法发起该笔交易

请确保你使用的jweixin.js是官方线上版本,不仅可以减少用户流量,还有可能对某些bug进行修复,拷贝到第三方服务器中使用,官方将不对其出现的任何问题提供保障,具体支付签名算法可参考 JSSDK微信支付一栏

19、目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题已在Android6.2中修复

20、uploadImage在chooseImage的回调中有时候Android会不执行

Android6.2会解决此问题,若需支持低版本可以把调用uploadImage放在setTimeout中延迟100ms解决

21、require subscribe错误说明你没有订阅该测试号,该错误仅测试号会出现

22、getLocation返回的坐标在openLocation有偏差

因为getLocation返回的是gps坐标,openLocation打开的腾讯地图为火星坐标,需要第三方自己做转换,6.2版本开始已经支持直接获取火星坐标

23、查看公众号(未添加): “menuItem:addContact”不显示

目前仅有从公众号传播出去的链接才能显示,来源必须是公众号

24、ICP备案数据同步有一天延迟,所以请在第二日绑定

6、示例:

1、后台获取ticket方法:

public String cacheJsSDKTicket(String appid) throws IOException {Assert.hasLength(appid);String cachedTicket = spyMemcachedClient.get(WechatConst.Cache.CACHE_KEY + "TICKET");if (cachedTicket != null && !"".equals(cachedTicket)) {LOG.info("Ticket exists, return directly ...");return cachedTicket;}LOG.info("Ticket not exists, get from weixin ...");String accessToken = weChatApi.getAccessToken(appid);String ticket = weChatApi.getJsApiTicket(accessToken);// 7200秒过期int timeOut = 7200;spyMemcachedClient.safeSet(WechatConst.Cache.CACHE_KEY + "TICKET", timeOut, ticket);return ticket;
}

这里我将ticket全局缓存到memorycache中。

2、后台签名方法:

@Overridepublic String signJsSDK(String ticket, String url, String timestamp, String nonceStr) throws NoSuchAlgorithmException {Map map = new HashMap();map.put("noncestr", nonceStr);map.put("jsapi_ticket", ticket);map.put("timestamp", timestamp);map.put("url", url);String[] ss = {"noncestr", "jsapi_ticket", "timestamp", "url"};Arrays.sort(ss);String signStr = "";for (String s : ss) {signStr += s + "=" + map.get(s) + "&";}signStr = signStr.substring(0, signStr.length() - 1);return new SHA1().getDigestOfString(signStr.getBytes());
}

3、获取签名方法:

public void getJsSdkInfo(CspServiceContext serviceContext) throws IOException, NoSuchAlgorithmException {MessageObject mo = serviceContext.getRequestData();String url = (String) mo.getValue("url");String appid = (String) mo.getValue("appid");String timestamp = Long.toString(System.currentTimeMillis() / 1000);String nonceStr = UUID.randomUUID().toString(); // 缓存ticketString ticket = memoryCacheManager.cacheJsSDKTicket(appid);// 签名String sign = weChatApi.signJsSDK(ticket, url, timestamp, nonceStr); Map resMap = new HashMap();resMap.put("appid", appid);resMap.put("ticket", ticket);resMap.put("sign", sign);resMap.put("nonceStr", nonceStr);resMap.put("timestamp", timestamp);Response resp = new Response(resMap);serviceContext.setResponseData(resp);serviceContext.setResult(Result.FAULT_RESULT);
}

4、前台获取jssdk:

function _wechatConfig(o) {wx.config({debug: debug, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: o.appid, // 必填,公众号的唯一标识timestamp: o.timestamp, // 必填,生成签名的时间戳nonceStr: o.nonceStr, // 必填,生成签名的随机串signature: o.sign,// 必填,签名,见附录1jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2});}function _getWechatJsSdkInfo(callback) {var s = W.Storage.get(W.location.href + "_" + area);var appid ='wx7e80e8f93543a5c8';ajaxJsonCall('/wechat/service/WeChat.getJsSdkInfo.json', {url: W.location.href.split('#')[0],appid: appid}, function (data) {if (data.rtnCode === "000000") {var o = data.responseData;W.Storage.set(W.location.href + "_" + area, o, jsSdkTimeout);callback(o);} else {W.Storage.remove(W.location.href + "_" + area);}}, false);}_getWechatJsSdkInfo(_wechatConfig);wx.checkJsApi({jsApiList: ['getLocation','onMenuShareTimeline','onMenuShareAppMessage'],success: function (res) {//alert(JSON.stringify(res));}
});//var url = "www.zaichengdu.com" + app_path;
var url = curDomain;
function _shareAppMessage() {// 页面加载后设置微信分享给朋友的内容wx.onMenuShareAppMessage({title: '圣诞老人送礼啦,现金红包人人领!', // 分享标题desc: '“圣诞夺包”35000份礼包等你拆!', // 分享描述link: encodeURI(curDomain + '/christmas/service/ChristmasSockOnline.home.do?area=cd'),//encodeURI(window.location.href.replace('&from=ad', '')), // 分享链接imgUrl: url + '/public/christmas/img/shorejoin.jpg', // 分享图标type: '', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function () {// 用户确认分享后执行的回调函数//Message.toast.success("分享成功!").appear();},cancel: function () {// 用户取消分享后执行的回调函数//alert('cancel');}});
}function _shareTimeline() {// 设置分享到朋友圈的内容wx.onMenuShareTimeline({title: '圣诞老人送礼啦,现金红包人人领!', // 分享标题link: encodeURI(curDomain + '/christmas/service/ChristmasSockOnline.home.do?area=cd'),//encodeURI(window.location.href.replace('&from=ad', '')), // 分享链接imgUrl: url + '/public/christmas/img/shorejoin.jpg', // 分享图标success: function () {// 用户确认分享后执行的回调函数Message.toast.success("分享成功!").appear();},cancel: function () {// 用户取消分享后执行的回调函数//alert('cancel');}});
}wx.ready(function () {// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。//alert('success');_shareAppMessage();_shareTimeline();
});wx.error(function (res) {// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。//alert('error');
});
                    <!-- 正文结束 --><div id="share" class="shareUp"><div class="share SG_txtb">分享: <div class="bshare-custom" style="display:inline;margin-left:5px;"><div class="bsPromo bsPromo2"></div><a title="分享到新浪微博" class="bshare-sinaminiblog" href="javascript:void(0);"></a><a title="分享到微信" class="bshare-weixin" href="javascript:void(0);"></a><a title="分享到QQ空间" class="bshare-qzone" href="javascript:void(0);"></a><a title="分享到豆瓣" class="bshare-douban" href="javascript:void(0);"></a><a title="更多平台" class="bshare-more bshare-more-icon more-style-addthis"></a></div></div><div class="up"><div title="喜欢后让更多人看到" id="dbox_6c969b4a0102w8h3" class="upBox upBox_click" style="cursor: pointer;"><p ti_title="微信分享到朋友圈、发送给朋友开发注意事项" id="dbox2_6c969b4a0102w8h3" class="count" mnum="10">10</p><p class="link"><img width="15" height="15" align="absmiddle" src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif" class="SG_icon SG_icon34">喜欢</p></div>

微信分享到朋友圈、发送给朋友开发注意事项相关推荐

  1. uniapp实现微信小程序全局【发送给朋友】、【分享到朋友圈】、【复制链接】

    在开发微信小程序的时候,发现[发送给朋友].[分享到朋友圈].[复制链接]功能,灰色不可用. 很常见的功能,但是这几个功能,并不是你项目建起来了就有的. 1.[发送给朋友]使用 onShareAppM ...

  2. 微信朋友圈长视频服务器地址,微信这个强大的功能,能在朋友圈发送超长视频,还能1次发30张图...

    现如今,微信,相信是各位用户最为熟悉的两个字了.似乎以"一字千金"来形容这两个字,都不一定能够将它的价值表达出来,而以"价值连城"来形容它,反倒让人觉得毫不为过 ...

  3. android朋友圈发文字换行,微信朋友圈全文展开 朋友圈文字怎么换行朋友圈发多行文字...

    微信朋友圈全文展开 朋友圈文字怎么换行朋友圈发多行文字 微信朋友圈全文展开 腾讯更新微信5.2.1版本,新版本特色有两个:发朋友圈时,可以附上你所在餐馆和景点的位置和名字.具体是情况是,用户在发送朋友 ...

  4. 【微信辅助】疫情当前,python帮你找出朋友圈的武汉朋友给予关怀

    我是程序员小小叶,为大家带来原创精彩技术内容. 疫情无论是对于个体还是企业都是无法承受之重.希望疫情早日过去,这是作为一个普通人一个的小小心愿. 我们身边的亲朋好友也或多或少受到了疫情的影响,让我们来 ...

  5. 什么是朋友圈广告,朋友圈广告优势,如何投放朋友圈广告?

    朋友圈是基于微信社交关系链的更丰富的 信息内容分享与原创的平台.当前,每天朋友圈内仅分享链接内容次数已经超过30亿次,覆盖20~29岁年龄段的优质用户. 用户群覆盖绝大部分中高端人群, 具有较强消费能 ...

  6. 获取朋友圈照片_朋友圈可以发 30 秒视频啦!用微视这个新功能就能办到

    对于许多热爱分享生活中所见所闻的朋友来说,在发朋友圈时可能都会有这样的感觉:只能分享 15 秒以内的视频,完全不够用啊. 如果你也有同样的困扰,今天,A 君就给你介绍一个实用新功能,让你能够在朋友圈中 ...

  7. 关于微信服务号自定义发送给朋友/分享到朋友圈, 发送/分享失败的一些问题及解决方式

    最近 在给客户开发微信公众号, 里面需要涉及到自定义发送给朋友/分享至朋友圈的需求,从 按照微信开发者文档里的教程一步步走下来到最后成功, 其中碰到了两个问题. 首先是设置wx.onMenuShare ...

  8. 微信小程序分享到朋友圈,在朋友圈打开报错 error code -501023

    未登录模式 | 微信开放文档 未登录模式即无登录态的模式,在未登录模式中,不存在用户的登录态.未登录模式的场景有如: 单页模式:小程序/小游戏分享到朋友圈被打开时 Web 未登录模式:没有登录的 We ...

  9. 微信新玩法,只需三步就可以在朋友圈发送竖排文字,好看又酷炫!

    很多小伙伴喜欢用微信朋友圈来记录生活中的点点滴滴,那么如何才能让自己的动态在朋友圈中看起来与众不同呢? 今天给小伙伴们分享一个有意思的微信小程序,只需几步就能设置竖排文字,效果超棒,赶快一起学起来吧! ...

  10. 微信H5分享到朋友圈,转发朋友功能随记

    最近刚做了一个微信公众号H5项目,里面包含一个分享到朋友圈和分享给好友的功能.配置白名单以及公众号js安全域名这些就不赘述了,接下来简单介绍下实现这个功能的几个前端步骤 因为是微信网页开发,项目里如果 ...

最新文章

  1. linux命令之nc,emacs,go run,查看文件行数等
  2. vue设置ioc图标和title
  3. Atlassian和Slack达成战略伙伴合作关系
  4. boost::iterator_archetypes用法的测试程序
  5. countByValue
  6. python编写函数_如何用Python编写自己喜欢的R函数
  7. 1.每天一个linux命令 ls
  8. 【教程分享】2018最新pHp视频教程
  9. android 编译 libjpeg-turbo,编译Android环境的libjpeg-turbo
  10. Linux(1)- 服务器核心知识、Linux入门、VMware与centeos安装、远程连接linux、linux基本命令使用...
  11. 管桩的弹性模量计算公式_400管桩单桩水平承载力特征值计算书
  12. java反射的优缺点_浅谈Java反射的优缺点
  13. Could not clean server of obsolete
  14. 达人评测 i5 13500h和1240p选哪个好 i5 13500h和1240p对比
  15. aquarius数据库建模配置详解
  16. 计算机组成,南北桥,倍频,通信,频率一致才可以通信
  17. [bzoj5473] 仙人掌
  18. 共享文件夹—— 一个实现Mac与PC互传文件,维护同一个文件夹简单的方法
  19. 解密区块链元宇宙 Land、NFT
  20. 浅谈游戏《艾迪芬奇的记忆》

热门文章

  1. kali 物理机(虚拟机)安装中文输入法教程
  2. 哈理工-云计算[期末复习版]
  3. react hook父组件调用子组件方法
  4. 金蝶K3 15.0 K/3 V15.0第13个整合补丁PT153081(2020年12月,整合55个补丁)PT151645 PT150588 PT149587 PT148471 PT146240
  5. 安全关闭 Linux 的方式
  6. asp.net中使用CustomValidator验证
  7. 苹果6s照相快门声音设置_原来苹果手机自带扫描仪,学会这2个方法,纸质档一键电子化...
  8. 被Photoshop揉皱的青蛙王子
  9. PTA:说反话-加强版
  10. C++中获取汉字拼音首字缩写/全拼及生僻字的处理