天天看点

微信分享接口开发所遇到的问题

遇到的问题

链接不对导致微信签名无效,分享出去后乱掉,没有按预定的格式呈现,解决办法如下:

前端分享代码

<script src="//res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
    var wxconfig = [];
    var url = encodeURIComponent(location.href.split('#')[]); //签名链接需要转码
    console.info(location.href.split('#')[]+'?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('#')[]+'?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)。

继续阅读