之前微信分享一直正常可用,可最近报出微信分享后不能按规定的图片描述链接分享,而且不能产生回调导致不能通过分享增加用户参与活动次数,老代码如下:

document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {window.shareData = {  "imgUrl": "{$shareimg}", "timeLineLink": "{$sharelink}","sendFriendLink": "{$sharelink}","weiboLink":  "{$sharelink}","tTitle":  "{$sharetitle}","tContent": "{$sharedesc}","fTitle":  "{$sharetitle}","fContent": "{$sharedesc}","wContent": "{$sharedesc}",};/*发送给好友*/WeixinJSBridge.on('menu:share:appmessage', function (argv) {WeixinJSBridge.invoke('sendAppMessage', { "img_url": window.shareData.imgUrl,"img_width": "640","img_height": "640","link": window.shareData.sendFriendLink,"desc": window.shareData.fContent,"title": window.shareData.fTitle}, function (res) {if(res.err_msg == 'send_app_msg:ok' || res.err_msg == 'send_app_msg:confirm'){//转发成功$.ajax({type: 'POST',url: "{php echo $this->createMobileUrl('setadd', array('id' => $id))}",//data: {"id":0},dataType: 'json',success: function(e) {                               alert(e.msg);    if (e.success!=0){$("#lcount").text(e.success);}return true;},error: function(e, t) {return false;}});};_report('send_msg', res.err_msg);})});//分享到朋友圈WeixinJSBridge.on('menu:share:timeline', function (argv) {WeixinJSBridge.invoke('shareTimeline', {"img_url": window.shareData.imgUrl,"img_width": "640","img_height": "640","link": window.shareData.timeLineLink,"desc": window.shareData.tContent,"title": window.shareData.tTitle}, function (res) {if(res.err_msg == 'share_timeline:ok' || res.err_msg == 'share_timeline:confirm'){//转发成功$.ajax({type: 'POST',url: "{php echo $this->createMobileUrl('setadd', array('id' => $id))}",//data: {"id":0},dataType: 'json',success: function(e) {                               alert(e.msg);if (e.success!=0){$("#lcount").text(e.success);}return true;},error: function(e, t) {return false;}});};_report('timeline', res.err_msg);});});//分享到微博WeixinJSBridge.on('menu:share:weibo', function (argv) {WeixinJSBridge.invoke('shareWeibo', {"content": window.shareData.wContent,"url": window.shareData.weiboLink,}, function (res) {_report('weibo', res.err_msg);});});}, false)

网上查找资料发现,腾讯为打击诱导分享可能做了一些改动

在github上找到了民间高手发布的weixinAPI,实践证明可用可行,代码如下:

/**!* 微信内置浏览器的Javascript API,功能包括:** 1、分享到微信朋友圈* 2、分享给微信好友* 3、分享到腾讯微博* 4、隐藏/显示右上角的菜单入口* 5、隐藏/显示底部浏览器工具栏* 6、获取当前的网络状态* 7、调起微信客户端的图片播放组件* 8、关闭公众平台Web页面* 9、判断当前网页是否在微信内置浏览器中打开* 10、支持WeixinApi的错误监控* 11、发送电子邮件* 12、禁止用户分享** @author zhaoxianlie(http://www.baidufe.com)*/
(function (window) {"use strict";/*** 定义WeixinApi*/var WeixinApi = {version: 4.3};// 将WeixinApi暴露到window下:全局可使用,对旧版本向下兼容window.WeixinApi = WeixinApi;/// CommonJS /if (typeof define === 'function' && (define.amd || define.cmd)) {if (define.amd) {// AMD 规范,for:requirejsdefine(function () {return WeixinApi;});} else if (define.cmd) {// CMD 规范,for:seajsdefine(function (require, exports, module) {module.exports = WeixinApi;});}}/*** 对象简单继承,后面的覆盖前面的,继承深度:deep=1* @private*/var _extend = function () {var result = {}, obj, k;for (var i = 0, len = arguments.length; i < len; i++) {obj = arguments[i];if (typeof obj === 'object') {for (k in obj) {obj[k] && (result[k] = obj[k]);}}}return result;};/*** 内部私有方法,分享用* @private*/var _share = function (cmd, data, callbacks) {callbacks = callbacks || {};// 分享过程中的一些回调var progress = function (resp) {switch (true) {// 用户取消case /\:cancel$/i.test(resp.err_msg) :callbacks.cancel && callbacks.cancel(resp);break;// 发送成功case /\:(confirm|ok)$/i.test(resp.err_msg):callbacks.confirm && callbacks.confirm(resp);break;// fail 发送失败case /\:fail$/i.test(resp.err_msg) :default:callbacks.fail && callbacks.fail(resp);break;}// 无论成功失败都会执行的回调callbacks.all && callbacks.all(resp);};// 执行分享,并处理结果var handler = function (theData, argv) {// 加工一下数据if (cmd.menu == 'menu:share:timeline' ||(cmd.menu == 'general:share' && argv.shareTo == 'timeline')) {var title = theData.title;theData.title = theData.desc || title;theData.desc = title || theData.desc;}// 如果是收藏操作,并且在wxCallbacks中配置了favorite为false,则不执行回调if (argv && (argv.shareTo == 'favorite' || argv.scene == 'favorite')) {if (callbacks.favorite === false) {WeixinJSBridge.invoke('sendAppMessage', theData, new Function());} else {WeixinJSBridge.invoke(cmd.action, theData, progress);}} else {// 新的分享接口,单独处理if (cmd.menu === 'general:share') {if (argv.shareTo === 'timeline') {WeixinJSBridge.invoke('shareTimeline', theData, progress);} else if (argv.shareTo === 'friend') {WeixinJSBridge.invoke('sendAppMessage', theData, progress);} else if (argv.shareTo === 'QQ') {WeixinJSBridge.invoke('shareQQ', theData, progress);} else if (argv.shareTo === 'weibo') {WeixinJSBridge.invoke('shareWeibo', theData, progress);}} else {WeixinJSBridge.invoke(cmd.action, theData, progress);}}};// 监听分享操作WeixinJSBridge.on(cmd.menu, function (argv) {callbacks.dataLoaded = callbacks.dataLoaded || new Function();if (callbacks.async && callbacks.ready) {WeixinApi["_wx_loadedCb_"] = callbacks.dataLoaded;if (WeixinApi["_wx_loadedCb_"].toString().indexOf("_wx_loadedCb_") > 0) {WeixinApi["_wx_loadedCb_"] = new Function();}callbacks.dataLoaded = function (newData) {callbacks.__cbkCalled = true;var theData = _extend(data, newData);theData.img_url = theData.imgUrl || theData.img_url;delete theData.imgUrl;WeixinApi["_wx_loadedCb_"](theData);handler(theData, argv);};// 然后就绪if (!(argv && (argv.shareTo == 'favorite' || argv.scene == 'favorite') && callbacks.favorite === false)) {callbacks.ready && callbacks.ready(argv, data);// 如果设置了async为true,但是在ready方法中并没有手动调用dataLoaded方法,则自动触发一次if (!callbacks.__cbkCalled) {callbacks.dataLoaded({});callbacks.__cbkCalled = false;}}} else {// 就绪状态var theData = _extend(data);if (!(argv && (argv.shareTo == 'favorite' || argv.scene == 'favorite') && callbacks.favorite === false)) {callbacks.ready && callbacks.ready(argv, theData);}handler(theData, argv);}});};/*** 分享到微信朋友圈* @param       {Object}    data       待分享的信息* @p-config    {String}    appId      公众平台的appId(服务号可用)* @p-config    {String}    imgUrl     图片地址* @p-config    {String}    link       链接地址* @p-config    {String}    desc       描述* @p-config    {String}    title      分享的标题** @param       {Object}    callbacks  相关回调方法* @p-config    {Boolean}   async                   ready方法是否需要异步执行,默认false* @p-config    {Function}  ready(argv, data)       就绪状态* @p-config    {Function}  dataLoaded(data)        数据加载完成后调用,async为true时有用,也可以为空* @p-config    {Function}  cancel(resp)    取消* @p-config    {Function}  fail(resp)      失败* @p-config    {Function}  confirm(resp)   成功* @p-config    {Function}  all(resp)       无论成功失败都会执行的回调*/WeixinApi.shareToTimeline = function (data, callbacks) {_share({menu: 'menu:share:timeline',action: 'shareTimeline'}, {"appid": data.appId ? data.appId : '',"img_url": data.imgUrl,"link": data.link,"desc": data.desc,"title": data.title,"img_width": "640","img_height": "640"}, callbacks);};/*** 发送给微信上的好友* @param       {Object}    data       待分享的信息* @p-config    {String}    appId      公众平台的appId(服务号可用)* @p-config    {String}    imgUrl     图片地址* @p-config    {String}    link       链接地址* @p-config    {String}    desc       描述* @p-config    {String}    title      分享的标题** @param       {Object}    callbacks  相关回调方法* @p-config    {Boolean}   async                   ready方法是否需要异步执行,默认false* @p-config    {Function}  ready(argv, data)       就绪状态* @p-config    {Function}  dataLoaded(data)        数据加载完成后调用,async为true时有用,也可以为空* @p-config    {Function}  cancel(resp)    取消* @p-config    {Function}  fail(resp)      失败* @p-config    {Function}  confirm(resp)   成功* @p-config    {Function}  all(resp)       无论成功失败都会执行的回调*/WeixinApi.shareToFriend = function (data, callbacks) {_share({menu: 'menu:share:appmessage',action: 'sendAppMessage'}, {"appid": data.appId ? data.appId : '',"img_url": data.imgUrl,"link": data.link,"desc": data.desc,"title": data.title,"img_width": "640","img_height": "640"}, callbacks);};/*** 分享到腾讯微博* @param       {Object}    data       待分享的信息* @p-config    {String}    link       链接地址* @p-config    {String}    desc       描述** @param       {Object}    callbacks  相关回调方法* @p-config    {Boolean}   async                   ready方法是否需要异步执行,默认false* @p-config    {Function}  ready(argv, data)       就绪状态* @p-config    {Function}  dataLoaded(data)        数据加载完成后调用,async为true时有用,也可以为空* @p-config    {Function}  cancel(resp)    取消* @p-config    {Function}  fail(resp)      失败* @p-config    {Function}  confirm(resp)   成功* @p-config    {Function}  all(resp)       无论成功失败都会执行的回调*/WeixinApi.shareToWeibo = function (data, callbacks) {_share({menu: 'menu:share:weibo',action: 'shareWeibo'}, {"content": data.desc,"url": data.link}, callbacks);};/*** 新的分享接口* @param       {Object}    data       待分享的信息* @p-config    {String}    appId      公众平台的appId(服务号可用)* @p-config    {String}    imgUrl     图片地址* @p-config    {String}    link       链接地址* @p-config    {String}    desc       描述* @p-config    {String}    title      分享的标题** @param       {Object}    callbacks  相关回调方法* @p-config    {Boolean}   async                   ready方法是否需要异步执行,默认false* @p-config    {Function}  ready(argv, data)       就绪状态* @p-config    {Function}  dataLoaded(data)        数据加载完成后调用,async为true时有用,也可以为空* @p-config    {Function}  cancel(resp)    取消* @p-config    {Function}  fail(resp)      失败* @p-config    {Function}  confirm(resp)   成功* @p-config    {Function}  all(resp)       无论成功失败都会执行的回调*/WeixinApi.generalShare = function (data, callbacks) {_share({menu: 'general:share'}, {"appid": data.appId ? data.appId : '',"img_url": data.imgUrl,"link": data.link,"desc": data.desc,"title": data.title,"img_width": "640","img_height": "640"}, callbacks);};/*** 设置页面禁止分享:包括朋友圈、好友、腾讯微博、qq* @param callback*/WeixinApi.disabledShare = function (callback) {callback = callback || function () {alert('当前页面禁止分享!');};['menu:share:timeline', 'menu:share:appmessage', 'menu:share:qq','menu:share:weibo', 'general:share'].forEach(function (menu) {WeixinJSBridge.on(menu, function () {callback();return false;});});};/*** 调起微信Native的图片播放组件。* 这里必须对参数进行强检测,如果参数不合法,直接会导致微信客户端crash** @param {String} curSrc 当前播放的图片地址* @param {Array} srcList 图片地址列表*/WeixinApi.imagePreview = function (curSrc, srcList) {if (!curSrc || !srcList || srcList.length == 0) {return;}WeixinJSBridge.invoke('imagePreview', {'current': curSrc,'urls': srcList});};/*** 显示网页右上角的按钮*/WeixinApi.showOptionMenu = function () {WeixinJSBridge.call('showOptionMenu');};/*** 隐藏网页右上角的按钮*/WeixinApi.hideOptionMenu = function () {WeixinJSBridge.call('hideOptionMenu');};/*** 显示底部工具栏*/WeixinApi.showToolbar = function () {WeixinJSBridge.call('showToolbar');};/*** 隐藏底部工具栏*/WeixinApi.hideToolbar = function () {WeixinJSBridge.call('hideToolbar');};/*** 返回如下几种类型:** network_type:wifi     wifi网络* network_type:edge     非wifi,包含3G/2G* network_type:fail     网络断开连接* network_type:wwan     2g或者3g** 使用方法:* WeixinApi.getNetworkType(function(networkType){** });** @param callback*/WeixinApi.getNetworkType = function (callback) {if (callback && typeof callback == 'function') {WeixinJSBridge.invoke('getNetworkType', {}, function (e) {// 在这里拿到e.err_msg,这里面就包含了所有的网络类型callback(e.err_msg);});}};/*** 关闭当前微信公众平台页面* @param       {Object}    callbacks       回调方法* @p-config    {Function}  fail(resp)      失败* @p-config    {Function}  success(resp)   成功*/WeixinApi.closeWindow = function (callbacks) {callbacks = callbacks || {};WeixinJSBridge.invoke("closeWindow", {}, function (resp) {switch (resp.err_msg) {// 关闭成功case 'close_window:ok':callbacks.success && callbacks.success(resp);break;// 关闭失败default :callbacks.fail && callbacks.fail(resp);break;}});};/*** 当页面加载完毕后执行,使用方法:* WeixinApi.ready(function(Api){*     // 从这里只用Api即是WeixinApi* });* @param readyCallback*/WeixinApi.ready = function (readyCallback) {/*** 加一个钩子,同时解决Android和iOS下的分享问题* @private*/var _hook = function () {var _WeixinJSBridge = {};Object.keys(WeixinJSBridge).forEach(function (key) {_WeixinJSBridge[key] = WeixinJSBridge[key];});Object.keys(WeixinJSBridge).forEach(function (key) {if (typeof WeixinJSBridge[key] === 'function') {WeixinJSBridge[key] = function () {try {var args = arguments.length > 0 ? arguments[0] : {},runOn3rd_apis = args.__params ? args.__params.__runOn3rd_apis || [] : [];['menu:share:timeline', 'menu:share:appmessage', 'menu:share:weibo','menu:share:qq', 'general:share'].forEach(function (menu) {runOn3rd_apis.indexOf(menu) === -1 && runOn3rd_apis.push(menu);});} catch (e) {}return _WeixinJSBridge[key].apply(WeixinJSBridge, arguments);};}});};if (readyCallback && typeof readyCallback == 'function') {var Api = this;var wxReadyFunc = function () {_hook();readyCallback(Api);};if (typeof window.WeixinJSBridge == "undefined") {if (document.addEventListener) {document.addEventListener('WeixinJSBridgeReady', wxReadyFunc, false);} else if (document.attachEvent) {document.attachEvent('WeixinJSBridgeReady', wxReadyFunc);document.attachEvent('onWeixinJSBridgeReady', wxReadyFunc);}} else {wxReadyFunc();}}};/*** 判断当前网页是否在微信内置浏览器中打开*/WeixinApi.openInWeixin = function () {return /MicroMessenger/i.test(navigator.userAgent);};/*** 发送邮件* @param       {Object}  data      邮件初始内容* @p-config    {String}  subject   邮件标题* @p-config    {String}  body      邮件正文** @param       {Object}    callbacks       相关回调方法* @p-config    {Function}  fail(resp)      失败* @p-config    {Function}  success(resp)   成功* @p-config    {Function}  all(resp)       无论成功失败都会执行的回调*/WeixinApi.sendEmail = function (data, callbacks) {callbacks = callbacks || {};WeixinJSBridge.invoke("sendEmail", {"title": data.subject,"content": data.body}, function (resp) {if (resp.err_msg === 'send_email:sent') {callbacks.success && callbacks.success(resp);} else {callbacks.fail && callbacks.fail(resp);}callbacks.all && callbacks.all(resp);})};/*** 开启Api的debug模式,比如出了个什么错误,能alert告诉你,而不是一直很苦逼的在想哪儿出问题了* @param    {Function}  callback(error) 出错后的回调,默认是alert*/WeixinApi.enableDebugMode = function (callback) {/*** @param {String}  errorMessage   错误信息* @param {String}  scriptURI      出错的文件* @param {Long}    lineNumber     出错代码的行号* @param {Long}    columnNumber   出错代码的列号*/window.onerror = function (errorMessage, scriptURI, lineNumber, columnNumber) {// 有callback的情况下,将错误信息传递到options.callback中if (typeof callback === 'function') {callback({message: errorMessage,script: scriptURI,line: lineNumber,column: columnNumber});} else {// 其他情况,都以alert方式直接提示错误信息var msgs = [];msgs.push("额,代码有错。。。");msgs.push("\n错误信息:", errorMessage);msgs.push("\n出错文件:", scriptURI);msgs.push("\n出错位置:", lineNumber + '行,' + columnNumber + '列');alert(msgs.join(''));}}};/*** 通用分享,一种简便的写法* @param wxData* @param wxCallbacks*/WeixinApi.share = function (wxData, wxCallbacks) {WeixinApi.ready(function (Api) {// 用户点开右上角popup菜单后,点击分享给好友,会执行下面这个代码Api.shareToFriend(wxData, wxCallbacks);// 点击分享到朋友圈,会执行下面这个代码Api.shareToTimeline(wxData, wxCallbacks);// 点击分享到腾讯微博,会执行下面这个代码Api.shareToWeibo(wxData, wxCallbacks);// 分享到各渠道Api.generalShare(wxData, wxCallbacks);});};
})(window);

加入了share.js后,可以通过WeixinApi.ready()来完成分享功能

     // 需要分享的内容,请放到ready里WeixinApi.ready(function(Api) {// 微信分享的数据var wxData = {"imgUrl": "{$shareimg}", "link" : "{$sharelink}","desc" : "{$sharedesc}","title" : "{$sharetitle}"};// 分享的回调var wxCallbacks = {// 收藏操作是否触发回调,默认是开启的favorite : false,// 分享操作开始之前ready : function() {// 你可以在这里对分享的数据进行重组},// 分享被用户自动取消cancel : function(resp) {// 你可以在你的页面上给用户一个小Tip,为什么要取消呢?},// 分享失败了fail : function(resp) {// 分享失败了,是不是可以告诉用户:不要紧,可能是网络问题,一会儿再试试?},// 分享成功confirm : function(resp) {// 分享成功了,我们是不是可以做一些分享统计呢?//转发成功$.ajax({type: 'POST',url: "{php echo $this->createMobileUrl('setadd', array('id' => $id))}",//data: {"id":0},dataType: 'json',success: function(e) {                               alert(e.msg);    if (e.success!=0){$("#lcount").text(e.success);}return true;},error: function(e, t) {return false;}});},// 整个分享过程结束all : function(resp,shareTo) {// 如果你做的是一个鼓励用户进行分享的产品,在这里是不是可以给用户一些反馈了?}};// 用户点开右上角popup菜单后,点击分享给好友,会执行下面这个代码Api.shareToFriend(wxData, wxCallbacks);// 点击分享到朋友圈,会执行下面这个代码Api.shareToTimeline(wxData, wxCallbacks);// 点击分享到腾讯微博,会执行下面这个代码Api.shareToWeibo(wxData, wxCallbacks);// iOS上,可以直接调用这个API进行分享,一句话搞定Api.generalShare(wxData,wxCallbacks);}); 

回调里面控制了分享过程中的各个流程

微信分享功能不可用+不能产生回调相关推荐

  1. Android微信h5分享,H5网页实现微信分享功能

    H5网页实现微信分享功能 一,首先在公众号管理后台"公众号设置"的"功能设置"里填写JS接口安全域名,域名需要通过ICP备案,没有备案域名可以用SAE.BAE等 ...

  2. vue项目做微信分享功能

    vue项目做微信分享功能 安装sdk npm install weixin-js-sdk --save 方法 1.新建js文件wxapi.js 2.在wxapi.js中引入sdk以及配置一些基本信息( ...

  3. ShareSDK接入实现微信分享功能(转)

    ShareSDK接入实现微信分享功能 首先需要去Mob官网(http://www.mob.com/)下载shareSDK For Unity3d 下载完成,解压,将以下plugins文件夹移入Unit ...

  4. 2015最新微信分享功能开发,自定义分享内容。

    在2015年之前很长一段时间,微信分享功能,只需要页面埋几段js代码即可捕获用户点击分享按钮的事情,并且自定义. 但后来微信的新版本里已经屏蔽了次方法直接调用分享接口 需要在服务端坐一点开发工作. 当 ...

  5. java对接微信分享_Java编程调用微信分享功能示例

    本文实例讲述了Java编程调用微信分享功能.分享给大家供大家参考,具体如下: 这篇文章介绍如何使用java开发微信分享功能,因为工作,已经开发完成,可使用. 如果想要自定义微信的分享功能,首先在自己的 ...

  6. java如何调用微信功能_Java编程调用微信分享功能示例

    本文实例讲述了java编程调用微信分享功能.分享给大家供大家参考,具体如下: 这篇文章介绍如何使用java开发微信分享功能,因为工作,已经开发完成,可使用. 如果想要自定义微信的分享功能,首先在自己的 ...

  7. Java + JS实现微信分享功能

    随着腾讯帝国的强大,越来越多的APP.第三方平台需要倚靠腾讯的产品发展壮大了.微信拥有上十亿用户基础,各大小公司自然不会放过这么优质的平台,所以现在以及未来都会有很多很多与微信集成的地方,比如今天演示 ...

  8. Android微信分享功能集成开发指南(这一篇就够了)

    前言 本文介绍的只是微信开发中的一个功能,分享.看到网上很多关于微信分享的博客.帖子,说实话,没几篇写的全的,很多都是复制粘贴,介绍的也不全,缺少代码的分析,关键性的代码总是漏一句两句,看着就很难受. ...

  9. Flutter 微信分享功能实现

    志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的 ...

最新文章

  1. oracle 判断是否错误_Oracle中的并行系列(二):你设置的并行真的生效了吗?...
  2. Google BigTable到底解决什么问题?
  3. 死磕java_死磕JavaScript-垃圾收集机制
  4. IOS UIScrollView 滚动视图的使用和文档
  5. LeetCode 278. First Bad Version
  6. Win10下启动telnet客户端
  7. Entity Framework 6 Recipes 2nd Edition(11-5)译 - 从”模型定义”函数返回一个匿名类型...
  8. apache是怎么运行php的_PHP与WEB服务器是如何交互的
  9. 悟道魔兽世界,《榜样魔兽》横空出世
  10. android 恢复出厂设置流程
  11. OFD文件预览—前后端两种实现方式
  12. RJ45墙上网线插座的线序与接法
  13. Linux 命令行进入DB2
  14. Azure云平台学习之路(一)——Azure简介
  15. 一号店主页静态页面(HTML)
  16. 数据模型工具--powerDesigner下载分享
  17. win7开机后svchost.exe占用内存的问题解决
  18. 2023湖北师范大学计算机考研信息汇总
  19. 代码回滚,你真的理解吗?
  20. 【算法】大数乘法问题及其高效算法

热门文章

  1. SN74HC165驱动
  2. 尚医通 (十八)微信登录
  3. 荣耀V20设置国科大邮箱步骤
  4. 如何采集小红书最新版(2018年9月)数据
  5. 惊蛰恰逢“龙抬头”,流感高峰季来袭,你准备好了吗?
  6. 眼袋、眼袋、眼袋!眼袋一直有~~~~ 肿么办啊
  7. 5款小巧有趣的微信小程序,个个让你心花怒放!
  8. 实战技法 - 短线操盘 (10)
  9. win10戴尔游侠GTX1050TI+TensorFlow-gpu+CUDA10.0.130+CUDNN7.4.1.5配置深度学习环境
  10. 二战企*查*查-企业-数-据爬虫