调用 JS-SDK 分享到朋友圈或朋友等功能

实现功能:
1.引入 js sdk 。
2.配置 js sdk(通过PHP 方法生成签名)。
3.使用 js sdk。

 

更多事例请参考官网文档:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

 

代码示例:

<?php
require "init.php";
$WXAPI = new WXAPI();

// 获取 js 签名
$jssdk = $WXAPI->jssdk_sign();
// pr($jssdk);

?><!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>JS SDK</title>
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
</head>
<body>
<script type="text/javascript">
//jssdk 初始化
wx.config({
    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '<?=$jssdk['app_id']?>', // 必填,公众号的唯一标识
    timestamp: '<?=$jssdk['timestamp']?>', // 必填,生成签名的时间戳
    nonceStr: '<?=$jssdk['noncestr']?>', // 必填,生成签名的随机串
    signature: '<?=$jssdk['sign']?>',// 必填,签名,见附录1
    jsApiList: [
        'checkJsApi',
        'onMenuShareTimeline',
        'onMenuShareAppMessage',
        'onMenuShareQQ',
        'onMenuShareWeibo',
        'onMenuShareQZone']
});
// 要分享的内容
var wx_share = {
    title: '互联网之子', // 分享标题
    desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。', // 分享描述
    link: 'http://weixin.demo.qq1121.com/', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
    imgUrl: 'https://open.weixin.qq.com/zh_CN/htmledition/res/assets/res-design-download/icon64_appwx_logo.png', // 分享图标
    type: '', // 分享类型,music、video或link,不填默认为link
    dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
    trigger:function(res){
        alert('开始分享'+JSON.stringify(res));
    },
    success:function(res){
        alert('成功分享'+JSON.stringify(res));
    },
    cancel:function(res){
        alert('取消分享'+JSON.stringify(res));
    },
    fail:function(res){
        alert('失败分享'+JSON.stringify(res));
    }

};

//jssdk 成功后执行的操作
wx.ready(function () {

    // 接口权限检查
    wx.checkJsApi({
    jsApiList: [
      'onMenuShareTimeline',
      'onMenuShareAppMessage'
    ],
    success: function (res) {
      if(!res.checkResult.onMenuShareTimeline){
        alert('分享到朋友圈 没有权限');
      }
      if(!res.checkResult.onMenuShareAppMessage){
        alert('分享给朋友 没有权限');
      }
    }
    });

    //分享到 朋友圈
    wx.onMenuShareTimeline({
        title: wx_share.title, // 分享标题
        link: wx_share.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: wx_share.imgUrl, // 分享图标
        trigger: function (res) {
            wx_share.trigger(res);
        },
        success: function (res) {
            wx_share.success(res);
        },
        cancel: function (res) {
            wx_share.cancel(res);
        },
        fail: function (res) {
            wx_share.fail(res);
        }
    });

    //分享到 朋友
    wx.onMenuShareAppMessage({
        title: wx_share.title, // 分享标题
        desc: wx_share.desc, // 分享标题
        link: wx_share.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: wx_share.imgUrl, // 分享图标
        trigger: function (res) {
            wx_share.trigger(res);
        },
        success: function (res) {
            wx_share.success(res);
        },
        cancel: function (res) {
            wx_share.cancel(res);
        },
        fail: function (res) {
            wx_share.fail(res);
        }
    });

    //分享到 QQ
    wx.onMenuShareQQ({
        title: wx_share.title, // 分享标题
        desc: wx_share.desc, // 分享标题
        link: wx_share.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: wx_share.imgUrl, // 分享图标
        trigger: function (res) {
            wx_share.trigger(res);
        },
        success: function (res) {
            wx_share.success(res);
        },
        cancel: function (res) {
            wx_share.cancel(res);
        },
        fail: function (res) {
            wx_share.fail(res);
        }
    });

    //分享到 腾讯微博
    wx.onMenuShareWeibo({
        title: wx_share.title, // 分享标题
        desc: wx_share.desc, // 分享标题
        link: wx_share.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: wx_share.imgUrl, // 分享图标
        trigger: function (res) {
            wx_share.trigger(res);
        },
        success: function (res) {
            wx_share.success(res);
        },
        cancel: function (res) {
            wx_share.cancel(res);
        },
        fail: function (res) {
            wx_share.fail(res);
        }
    });

    //分享到 QQ 空间
    wx.onMenuShareQZone({
        title: wx_share.title, // 分享标题
        desc: wx_share.desc, // 分享标题
        link: wx_share.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: wx_share.imgUrl, // 分享图标
        trigger: function (res) {
            wx_share.trigger(res);
        },
        success: function (res) {
            wx_share.success(res);
        },
        cancel: function (res) {
            wx_share.cancel(res);
        },
        fail: function (res) {
            wx_share.fail(res);
        }
    });
});

//jssdk 失败后执行的操作
wx.error(function (res) {
  alert(res.errMsg);
});
</script>
</body></html>

 

底层代码:

    /**
     * jssdk 生成签名
     * @author yanxuefa
     * @date   2018-01-08
     * @return [type]     [description]
     */
    public function jssdk_sign(){

        $arr = array(
            'noncestr'      =>$this->createNonceStr(),
            'jsapi_ticket'  =>$this->ticket_getticket(),
            'timestamp'     =>time(),
            'url'           =>$this->DOMAIN.$_SERVER['REQUEST_URI'],
            );
        ksort($arr);
        $result = array();
        foreach($arr as $k=>$v)
        {
            $result[] = $k.'='.$v;
        }
        $str = implode('&',$result);

        $arr['sign']    = sha1($str);
        $arr['app_id']  = $this->_CONFIG['appID'];
        return $arr;
    }

    /**
     * 生成随机字符串
     * @author yanxuefa
     * @date   2018-01-08
     * @param  integer    $length [description]
     * @return [type]             [description]
     */
    private function createNonceStr($length = 16) {
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $str = "";
        for ($i = 0; $i < $length; $i++) {
            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return $str;
    }

    /**
     * jssdk 获取 ticket
     * @author yanxuefa
     * @date   2018-01-08
     * @return [type]     [description]
     */
    public function ticket_getticket(){

        $url = $this->_URL['cgi-bin'].'ticket/getticket?access_token='.$this->token().'&type=jsapi';
        $info = $this->http($url);
        return $info['data']['ticket'];

        // $jsapi_ticket = S('wx.jsapi_ticket');
        // if(empty($jsapi_ticket))
        // {
        //     $info = $this->http('https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$this->getAccountToken().'&type=jsapi');
        //     if(!empty($info['data']['ticket']))
        //     {
        //         $jsapi_ticket = $info['data']['ticket'];
        //         S('wx.jsapi_ticket',$jsapi_ticket,7000);
        //     }
        // }
        // return $jsapi_ticket;
    }

 

发表评论

电子邮件地址不会被公开。