微信二次分享
效果演示
如何运行项目
// 克隆代码到本地
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));
}
});
此时微信二次分享就已经大功告成了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。