百度上自定义微信分享标题以及描述的解决方法有很多,基本上都能实现一次分享:流程基本上是这样的

  1.首先引入微信jssdk =》<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

  2.发送ajax请求将浏览器分享的地址(window.location.href.split("#")[0])发送到后台获取公众号时间戳以及签名等信息并使用微信ready函数自定义分享标题描述以及logo,代码部分基本上是这样的

  $(function () {

$.ajax({
url: ],
dataType: 'json',
type: 'GET',
async: true,
success: function (data) {
wx.config({
debug: false, // 开启调试模式为true后可以通过alert弹窗将公众号签名等结果反馈出来
appId: data.data.appId, // 必填,公众号的唯一标识
timestamp: data.data.timestamp, // 必填,生成签名的时间戳
nonceStr: data.data.nonceStr, // 必填,生成签名的随机串
signature: encodeURIComponent(data.data.signature),// 必填,签名,见附录1
jsApiList: [
"onMenuShareTimeline",
"onMenuShareAppMessage",//分享给好友
"onMenuShareQQ",
"onMenuShareWeibo",
"onMenuShareQZone"
]
});
},
error: function () {
}
});
wx.ready(function () {
//分享好友
var shareData = {
title: '分享标题',
desc: '分享描述',
dataUrl: '',
type: 'link',
imgUrl: '缩略图线上地址',
link: location.href.]
};
wx.onMenuShareAppMessage(shareData);
wx.onMenuShareTimeline(shareData);
});
});

  这里唯一需要注意的一点是保证传过去的url地址跟wx的ready函数中shareData里面要分享的link链接保持一致才不会导致签名非法等问题,后台返回来的signature需要进行encode编码,imgUrl参数不能为绝对路径,否则会找不到图片。

  绝大多数情况下通过这种形式就能实现一次分享自定义,但是,有个不好的消息=》微信在进行二次分享后会给该链接自动加上from以及isappinstalled这两个参数证明该链接是二次分享过来的,有了这两个参数,便会导致二次分享进行签名时失效,一次分享拥有的自定义信息都会被抹杀,剩下空荡荡的链接以及白色缩略图,很是恶心。那么,既然知道了是因为这两个参数导致的二次分享失败,为什么不能在二次分享前就将这两个参数去掉然后强制跳转=》刷新回不带微信参数的页面呢(PS,在这之前看了很多文章都说在url地址中加上encodeURIcomponent进行编码就不会出现这种错误了,但是试了一下后发现连基础的一次分享都不行了)

  去掉微信二次自带的两个参数需要用到三个函数,一个是   functionfnGetQueryString(key) { //正则获取url后面的参数值,如?env=dev&exp=123中可以通过fnGetQueryString('exp')=>得到123

var reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)");
).match(reg);
]) : false;

};

  另外一个是 functionfuncUrlDel(name) {//删除url指定参数名并返回新的url

var loca = window.location;
var baseUrl = loca.origin + loca.pathname + "?";
);
) {
var obj = {};
var arr = query.split("&");
; i < arr.length; i++) {
arr[i] = arr[i].split("=");
obj[arr[i][]] ];
};
delete obj[name];
var url = baseUrl + JSON.stringify(obj).replace(/[\"\{\}]/g, "").replace(/\:/g, "=").replace(/\,/g, "&");
return url
};
};

最后一个是

functiongetlinkSearch(key, reqStr) {//这个作用同fnGetQueryString(key)函数差不多,不过它将reqStr参数替代了window.searsh获取的东西,因为上个函数在删除了url的某一参数后会返回一个新的带?参数查询的链接

var reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)");
).match(reg);
]) : false;

};

  最关键也是最后一步就是刷新页面回到去除微信二次分享自带参数的初始页面了:

   functionrefreshUrl() {//强制刷新到不带二次分享参数页面

var url = "",
reqStr = "";
if (fnGetQueryString('from')) {//from为微信二次分享自带参数
url = funcUrlDel('from');
var reqIndex = url.indexOf('?');
reqStr = url.substr(reqIndex);//截取去除from参数后的地址
console.log(url, reqStr);
if (getlinkSearch('isappinstalled', reqStr)) {//isappinstalled为微信二次分享自带参数
url , url.indexOf('&'));//截取去除isappinstalled参数后的地址
console.log(url);
window.location.href = url;
} else {
window.location.href = url;
}
}
};
  refreshUrl();

  到这里还没结束,因为刷新后的分享页会直接读取title以及meta里面的描述,还需要设定这两个内容以及在body标签中加入

  <divstyle="display:none">

<img src="./img/logo.png" alt="" />

</div>  

  时分享时读取到第一张图片为缩略图,这样子就可以轻松实现二次分享。搞定!

 

$(funct
ion () {
$.ajax({
url: ],//urlStr.trim('/', 'right')
dataType: 'json',
type: 'GET',
async: true,
success: function (data) {
wx.config({
debug: false, // 开启调试模式,
appId: data.data.appId, // 必填,公众号的唯一标识
timestamp: data.data.timestamp, // 必填,生成签名的时间戳
nonceStr: data.data.nonceStr, // 必填,生成签名的随机串
signature: encodeURIComponent(data.data.signature),// 必填,签名,见附录1
jsApiList: [
"onMenuShareTimeline",
"onMenuShareAppMessage",//分享给好友
"onMenuShareQQ",
"onMenuShareWeibo",
"onMenuShareQZone"
]
});
},
error: function () {
}
});
wx.ready(function () {
//分享好友
var invite_uid = fnGetQueryString('invite_uid');
var shareData = {
title: '一对一私密视频更刺激',
desc: '在线匹配同城极品丝袜女神,100%成功,线下可约,你确定不来么?',
dataUrl: '',
type: 'link',
imgUrl: 'http://m.kuailuapp.com/kuailu_phone_down/img/logo.png',
link: location.href.]//?invite_uid=' + invite_uid
};
wx.onMenuShareAppMessage(shareData);
wx.onMenuShareTimeline(shareData);
});
});

微信公众号jssdk自定义分享,二次分享自定义失败解决技巧的更多相关文章

  1. C#微信公众号开发系列教程二(新手接入指南)

    http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...

  2. 微信公众号jssdk使用的惨痛经历

    最近一直在做微信公众号开发,遇到个DT的问题: 大家都知道使用jssdk的时候开发人员必须在后台按照官方文档给定的规则生成签名,我前前个月就写好了这个测试demo页面,而且完全正常能用,像分享等这些功 ...

  3. Node.js+Koa开发微信公众号个人笔记(二)响应事件

    微信公众号中的事件有订阅事件/扫码事件/点击事件/跳转链接事件等等,具体可以查阅文档. 这里来实现一下订阅事件,其他的事件的实现过程也都类似. 当有人订阅了公众号后,微信服务器会向我们的服务器推送一个 ...

  4. PHP开发微信公众号(一)二维码的获取

    要开发微信公众号,首先进行需要注册一个,然后认证.这就不用多说了. 当然如果没有,也可以去申请一个测试号来使用,地址:https://mp.weixin.qq.com/debug/cgi-bin/sa ...

  5. 微信公众号--JS-SDK

    JS-SDK 微信JS-SDK是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以 ...

  6. 微信公众号开发(十二)OAuth2.0网页授权

    OAuth允许用户提供一个令牌,而不是用户名和密码来访问它们存放在特定服务器上的数据,每一个令牌授权一个特定的网站在特定时段内访问特定的资源. 授权过程如下: 1.引导用户进入授权页面同意授权,获取c ...

  7. 微信公众号jssdk分享接口onMenuShareAppMessage自定义的参数无效,微信分享失败原因

    使用jssdk为jweixin-1.4.0.js updateTimelineShareData,安全域名接口也设置正确,可就是分享,转发朋友圈不成功. 解决方案:采用<script src=& ...

  8. 玩玩微信公众号Java版之二:接收、处理及返回微信消息

    前面已经配置了微信服务器,那么先开始最简单的接收微信消息吧~   可以用我们的微信号来直接进行测试,下面先看测试效果图:   这是最基本的文本消息的接收.处理及返回,来看看是怎么实现的吧!   首先可 ...

  9. 微信公众号 JSSDK 提示:invalid signature

    要命的invalid signature.其实腾讯的文档已经写了,只能怪我自己理解能力太差,掉了好几次坑. 签名要用到的jsapi_ticket需要保存的,2小时有效期.如果在2小时内出现问题需要删除 ...

随机推荐

  1. Hadoop 2:Mapper和Reduce

    Hadoop 2:Mapper和Reduce Understanding and Practicing Hadoop Mapper and Reduce 1 Mapper过程 Hadoop将输入数据划 ...

  2. Another Easy Problem fzu1753

    Another Easy Problem Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u ...

  3. poj2891非互质同余方程

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 8176   ...

  4. Spring详解(七)------事务管理

    PS:本篇博客源码下载链接:http://pan.baidu.com/s/1mi3NhX2 密码:3io2 1.事务介绍 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指 ...

  5. Angular学习笔记(一)

    本文为原创文章,转载请标明出处 目录 架构 模块 组件 模板 元数据 数据绑定 指令 服务 依赖注入 模板与数据绑定 1. 架构 模块 Angular 应用是模块化的,并且 Angular 有自己的模 ...

  6. JavaScriptOOP

    1. OOP基础 1.1面向对象编程OOP 1.语言的分类:      ① 面向机器:汇编语言      ② 面向过程:C语言      ③ 面向对象:C++ Java PHP 等   2.面向过程与 ...

  7. 聊聊VUE中的nextTick

    在谈nextTick之前,先要说明一件事,可能在我们平时使用vue时并没有关注到,事实上,vue执行的DOM更新是异步的. 举个栗子: <template> <div class=& ...

  8. 安装Sublime Text 3插件的方法:

    安装Sublime Text 3插件的方法: 朋友们,小站活着不容易,全靠广告费养着了,如果本文对你有帮助.麻烦动下手点下页面的广告吧,谢谢! 直接安装 安装Sublime text 2插件很方便,可 ...

  9. git 分支改名

    给一个git分支改名的方法很简单 如果对于分支不是当前分支,可以使用下面代码: git branch -m 原名 新 如果是当前,那么可以使用加上新名字 git branch -m 原名 参见: ht ...

  10. Cosmos OpenSSD--greedy_ftl1.2.0(一)

    从主函数跳到ReqHandler,在ReqHandler内先初始化SSD--InitNandReset,然后建立映射表InitFtlMapTable void InitNandReset() { // ...