一、背景
在移动端业务开发的中,很多时候会进行h5页面的分享操作,但是原生的微信分享效果并不能满足我们业务的需求,如下图:
我们可以看的原生的分享描述是一个页面链接,分享图标也是原生的一个分享图标,这并不是我们实际业务需要的效果。我们真正想要的效果是,分享标题可以自定义、分享内容可以自定义、分享图标可以自定义,如下图:
如何实现分享信息自定义?不要离开,继续往下看。
二、微信JS-SDK使用步骤
自定义分享信息,我们需要借助微信JS-SDK进行开发。微信JS-SDK接入步骤如下:
步骤一:绑定域名
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
备注:登录后可在“开发者中心”查看对应的接口权限。
1、打开微信公众平台,输入账号密码,登录后台。
2、找到【公众号设置】并点击。
3、点击【功能设置】。
4、找到【JS接口安全域名】,点击旁边的【设置】。
5、点击下载这个文件,然后上传到服务器。如果在修改业务域名的时候已经上传过这个文件了,就跳过这步操作。
6、在下面,输入要修改的域名,点击【保存】即可。
步骤二:引入JS文件
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js
如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:
http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)。
备注:支持使用 AMD/CMD 标准模块加载方法加载
步骤三:通过config接口注入权限验证配置
所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名
jsApiList: [] // 必填,需要使用的JS接口列表
});
签名算法见:
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62
所有JS接口列表见:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#63
步骤四:通过ready接口处理成功验证
wx.ready(function(){
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
步骤五:通过error接口处理失败验证
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
ok,到了这里我们就可以去编写代码了,通过代码来自定义分信息。
三、具体例子说明
1、引入jweixin-1.4.0.js
<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
2、分享页具体实现代码
$(function(){
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '<%=wxAppID%>', // 必填,公众号的唯一标识
timestamp: '<%=timestamp%>', // 必填,生成签名的时间戳
nonceStr: '<%=noncestr%>', // 必填,生成签名的随机串--后端用小写 注意
signature: '<%=signature%>',// 必填,签名,见附录1
jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone'], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function() {
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
console.log('weixin 验证成功');
// 分享到朋友圈
wx.onMenuShareTimeline({
title: '运营咸鱼拯救计划', // 分享标题
link: '<%=recallUrl%>', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'http:<%=imgPre%>logo.png', // 分享图标
success: function() {
// 用户确认分享后执行的回调函数
},
cancel: function() {
// 用户取消分享后执行的回调函数
},
});
// 分享给朋友
wx.onMenuShareAppMessage({
title: '运营咸鱼拯救计划', // 分享标题
desc: '价值10W元!运营人硬核干货,限量千份免费输送', // 分享描述
link: '<%=recallUrl%>', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'http:<%=imgPre%>logo.png', // 分享图标
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function() {
// 用户确认分享后执行的回调函数
},
cancel: function() {
// 用户取消分享后执行的回调函数
},
});
});
wx.error(function(res) {
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
console.log('weixin 验证失败');
console.log(res);
});
})
四、总结
自定义微信分享的内容信息,简单实现步骤:绑定域名–>引入jweixin-1.4.0.js–>config配置–>ready自定义分享内容。
参考文献:
1、https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#10
2、https://jingyan.baidu.com/article/fa4125acfd4cdc28ac7092f4.html