微信二次分享
微信二次分享
效果演示
如何运行项目
// 克隆代码到本地 git clone https://github.com/Jameswain/WeiXinSDK.git // 安装依赖 npm i // 运行项目 npm run dev
通过charles配置代理,配置如下:
charles配置如下,你可以直接导入到你charles的Map remote,记住把IP地址换成你的IP地址。
<?xml version='1.0' encoding='UTF-8' ?> <?charles serialisation-version='2.0' ?> <map> <toolEnabled>true</toolEnabled> <mappings> <mapMapping> <sourceLocation> <protocol>http</protocol> <host>m.ximalaya.com</host> <port>80</port> <path>/49265909/album/11501536/</path> </sourceLocation> <destLocation> <protocol>http</protocol> <host>192.168.1.103</host> <port>8080</port> <path>/</path> </destLocation> <preserveHostHeader>false</preserveHostHeader> <enabled>true</enabled> </mapMapping> <mapMapping> <sourceLocation> <protocol>http</protocol> <host>m.ximalaya.com</host> <port>80</port> <path>/49265909/album/11501536/static/lib/jweixin-1.4.0.js</path> </sourceLocation> <destLocation> <protocol>http</protocol> <host>192.168.1.103</host> <port>8080</port> <path>/static/lib/jweixin-1.4.0.js</path> </destLocation> <preserveHostHeader>false</preserveHostHeader> <enabled>true</enabled> </mapMapping> <mapMapping> <sourceLocation> <protocol>http</protocol> <host>m.ximalaya.com</host> <port>80</port> <path>/app.js</path> </sourceLocation> <destLocation> <protocol>http</protocol> <host>192.168.1.103</host> <port>8080</port> <path>/app.js</path> </destLocation> <preserveHostHeader>false</preserveHostHeader> <enabled>true</enabled> </mapMapping> </mappings> </map>
配置好代理以后,在微信里打开 m.ximalaya.com/49265909/album/11501536/ 这个网址,看到以下效果,表示代理配置成功,然后你就可以进行二次分享的测试了。
接下来通过详细的步骤介绍如何接入微信二次分享操作。
官方接入文档:https://mp.weixin.qq.com/wiki...
1、配置JS接口安全域名
1、做二次分享首先需要申请一个微信服务号。
2、登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”
注意:这里的JS接口安全域名就是你需要进行二次分享页面的域名。
注意:配置JS接口安全域名时,首先需要MP_verify_576FDJKHHJK29XXTpb.txt 文件放置在域名根目录下;然后才能保存成功,如果配置的域名下没有MP_verify_576FDJKHHJK29XXTpb.txt 文件是无法保存成功的。
2、引入js文件
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/...
如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js... (支持https)。
以上是官方的原文提供的js文件地址,我们一般都会把jweixin-1.4.0.js文件下载下来放在我们域名的静态文件中进行引入。
https://h5.jameswain.com/static/lib/jweixin-1.4.0.js // 发布到线上的地址
在index.html页面中加入以下代码:
3、访问服务端接口获取配置信息
这里需要通过服务端提供的获取配置信息接口,获取权限验证的相关配置,例如我获取配置信息的接口是:http://m.ximalaya.com/x-third... 返回结果如下:
{ "appId": "wx3a4b4454f28a932b", "timestamp": 1541226502, "nonceStr": "705a85bb-1e66-4a54-85a8-ebef769faee6", "signature": "3b4e00872606b69438c168c13fad772327b1d1b3" }
编写配置微信分享公共代码
// src/common/wxsdk.js import axios from 'axios' /** * 获取微信分享配置接口地址 * 换项目的时候,直接拷贝该文件,修改这个接口地址即可直接使用微信分享 */ const GET_SHARE_CONFIG_URL = '/x-thirdparty-web/weixinJssdk/config?signatureUrl=http%3A%2F%2Fm.ximalaya.com%2F49265909%2Falbum%2F11501536%2F&thirdpartyId=17&_=1541230577945'; let wxconfig = null; /** * 初始化微信分享配置 */ async function initWeiXinConfig() { try { const { data } = await axios.get(GET_SHARE_CONFIG_URL); wxconfig = data; wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: wxconfig.appId, // 必填,公众号的唯一标识 timestamp: wxconfig.timestamp, // 必填,生成签名的时间戳 nonceStr: wxconfig.nonceStr, // 必填,生成签名的随机串 signature: wxconfig.signature, // 必填,签名 jsApiList: [ // 必填,需要使用的JS接口列表 'checkJsApi', // 判断当前客户端是否支持指定JS接口 'onMenuShareTimeline', // 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 'onMenuShareAppMessage', // 获取“分享给朋友”按钮点击状态及自定义分享内容接口 'onMenuShareQQ', // 获取“分享到QQ”按钮点击状态及自定义分享内容接口 'onMenuShareWeibo', // 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 'onMenuShareQZone', // 获取“分享到QZone”按钮点击状态及自定义分享内容接口 'hideMenuItems', // 批量隐藏功能按钮接口 'showMenuItems', // 批量显示功能按钮接口 'hideAllNonBaseMenuItem', // 隐藏所有非基础按钮接口 'showAllNonBaseMenuItem', // 显示所有功能按钮接口 'translateVoice', // 识别音频并返回识别结果接口 'startRecord', // 开始录音接口 'stopRecord', // 停止录音接口 'onVoiceRecordEnd', 'playVoice', // 播放语音接口 'onVoicePlayEnd', 'pauseVoice', // 暂停播放接口 'stopVoice', // 停止播放接口 'uploadVoice', // 上传语音接口 'downloadVoice', // 下载语音接口 'chooseImage', // 拍照或从手机相册中选图接口 'previewImage', // 预览图片接口 'uploadImage', // 上传图片接口 'downloadImage', // 下载图片接口 'getNetworkType', // 获取网络状态接口 'openLocation', // 使用微信内置地图查看位置接口 'getLocation', // 获取地理位置接口 'hideOptionMenu', // 隐藏右上角菜单接口 'showOptionMenu', // 显示右上角菜单接口 'closeWindow', // 关闭当前网页窗口接口 'scanQRCode', // 调起微信扫一扫接口 'chooseWXPay', // 发起一个微信支付请求 'openProductSpecificView', // 跳转微信商品页接口 'addCard', // 批量添加卡券接口 'chooseCard', // 调起适用于门店的卡券列表并获取用户选择列表 'openCard' // 查看微信卡包中的卡券接口 ] }); } catch (e) { console.error(e); } }; export default { /** * 设置微信分享 * @param opts */ share(opts) { if (wx) { if (!wxconfig) { initWeiXinConfig(); } // 默认配置 const defaultOpts = { title: '互联网之子', desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。', link: window.location.href, imgUrl: 'http:// demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg', trigger: function (res) { // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回 console.log('用户点击分享到朋友圈', res); }, success: function (res) { console.log('已分享'); }, cancel: function (res) { console.log('已取消'); }, fail: function (res) { console.log(JSON.stringify(res)); } } wx.ready(function () { // 分享到朋友圈 wx.onMenuShareTimeline({...defaultOpts, ...opts, ...{title: opts.desc, desc: opts.title}}); // 分享给朋友 wx.onMenuShareAppMessage({...defaultOpts, ...opts}); // 分享到QQ wx.onMenuShareQQ({...defaultOpts, ...opts}); // 分享到腾讯微博 wx.onMenuShareWeibo({...defaultOpts, ...opts}) // 分享到QZone wx.onMenuShareQZone({...defaultOpts, ...opts}); }); wx.error(function (res) { console.log('error=>', res); }); } else { console.log('当前不是微信环境'); } } }
4、在入口文件中进行分享配置
在Vue的入口文件中进行微信二次分享的配置,分享文案可以根据你的业务进行调整。
注意:二次分享必须要把代码部署到你配置的JS接口安全域名下才能看到效果。
// src/main.js import wxsdk from './common/wxsdk' // 配置微信分享 wxsdk.share({ title: '互联网之子', desc: '长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。', imgUrl: 'https://gss0.bdstatic.com/94o3dSag_xI4khGkpoWK1HF6hhy/baike/crop%3D0%2C25%2C550%2C363%3Bc0%3Dbaike80%2C5%2C5%2C80%2C26/sign=afce76f80055b31988b6d8357e99ae14/267f9e2f070828381f3de6edb299a9014c08f112.jpg', trigger: function (res) { // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回 console.log('用户点击分享到朋友圈', res); }, success: function (res) { console.log('已分享'); }, cancel: function (res) { console.log('已取消'); }, fail: function (res) { console.log(JSON.stringify(res)); } });
此时微信二次分享就已经大功告成了。