遇到的问题
链接不对导致微信签名无效,分享出去后乱掉,没有按预定的格式呈现,解决办法如下:
前端分享代码
<script src="//res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
var wxconfig = [];
var url = encodeURIComponent(location.href.split('#')[0]); //签名链接需要转码
console.info(location.href.split('#')[0]+'?token=123456');
$(function() {
$.ajax({
async: false,
type: 'POST',
url: '/api/common/wxshareinit',
data: {url:url}, //这里的链接即地址栏网址,即签名链接,不能有#锚记,如果有会被微信过滤掉
dateType: 'JSON',
cache: false,
success: function(result) {
wxconfig = result.data;
wx.config({
debug: false, // 是否开启调试模式
appId: wxconfig.appId, // 必填,微信号AppID
timestamp: wxconfig.timestamp, // 必填,生成签名的时间戳
nonceStr: wxconfig.nonceStr, // 必填,生成签名的随机串
signature: wxconfig.signature,// 必填,签名,见附录1
jsApiList: ['onMenuShareTimeline', //分享到朋友圈
'onMenuShareAppMessage', //分享给朋友
'onMenuShareQQ' //分享到QQ
] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function(){
var options = {
title: '<?php echo $news["title"]; ?>', // 分享标题
link: location.href.split('#')[0]+'?token=123456', // 分享链接与签名链接可以不一样,只要是在微信公众号>安全中设置的js安全域名就都可以,后面带多少参数都可以
imgUrl: '<?php echo C("QINIU.IS_OPEN") ? C("QINIU.CDN") : C("SITE.URL"); ?><?php echo $news["picture"]; ?>?imageView/1/w/100/h/100', // 分享图标
desc: '<?php echo str_replace(array("\r\n", "\r", "\n"), "", $news["brief"]); ?>', // 分享描述
success: function () {
console.info('分享成功!');
// 用户确认分享后执行的回调函数
},
cancel: function () {
console.info('取消分享!');
// 用户取消分享后执行的回调函数
}
}
wx.onMenuShareTimeline(options); // 分享到朋友圈
wx.onMenuShareAppMessage(options); // 分享给朋友
wx.onMenuShareQQ(options); // 分享到QQ
});
},
error:function() {
alert('微信分享初始化失败!');
}
});
</script>
后端接口代码
<?php
namespace Api\Controller;
use Think\Think;
/**
* @SWG\Swagger(
* basePath="/api"
* )
*/
class CommonController extends FrontendController
{
public function __construct()
{
parent::__construct();
}
/* 微信分享初始化 */
public function wxshareinit()
{
$url = I('url', '');
if (empty($url)) {
$jsonArray = [
'status' => '0',
'msg' => 'no',
'data' => ['appId' => '', 'timestamp' => '', 'nonceStr' => '', 'signature' => '']
];
$this->ajaxReturn($jsonArray);
}
$wxconfig = wx_share_init(urldecode($url));
$jsonArray = [
'status' => '1',
'msg' => 'ok',
'data' => $wxconfig
];
$this->ajaxReturn($jsonArray);
}
}
小结:
签名链接与分享链接可以不一致,但域名必须都是在微信公众号>安全中设置的js安全域名,签名链接必须要转码,分享链接里不限参数个数(如添加参数?token=123456)。