微信jssdk分享到朋友圈等结合thinkphp5

这里主要是展示了微信分享到朋友圈,分享给好友等接口,同时在thinkphp5中封装了动态获取wx.config需要获取的参数。
jssdk开发文档点击

PHP部分

/**
 * 微信JSSDK相关
 */
class Jssdk extends Controller
{
    private $appid = APPID;
    private $secret = SECRET;

    public function options()
    {
        $url = input('param.url');
        
        // $url = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        $param = self::sign($url);
        $data = [
            'debug'=> false,        // 是否开启调试
            'appId'=> $this->appid, // 必填,公众号的唯一标识
            'timestamp'=> $param['time'], // 必填,生成签名的时间戳
            'nonceStr'=> $param['nonceStr'], // 必填,生成签名的随机串
            'signature'=> $param['signature'],// 必填,签名
            'jsApiList'=> [   // 必填,需要使用的JS接口列表
                'onMenuShareAppMessage',
                'onMenuShareTimeline',
                'showOptionMenu',
                'hideOptionMenu',
                "hideMenuItems",
                "showMenuItems",
            ] 
        ];
        return json($data);
    }

    function getAccessToken(){
        // 设置接口参数,这里填写将要设置的公众号的
        $config = array(
            'appid'     => $this->appid,
            'secret'    => $this->secret,
        );

        $filename =  './application/api/access_token_cache';

        // 存在该文件且access_token未过期
        if (is_file($filename) && filemtime($filename) + 7100 > time()) {
            $data = file_get_contents($filename);
        }else{
            // 重新获取access_token
            $api = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&'.http_build_query($config);
            // 发送接口请求,调用发送curl请求的函数(注意在面向对象环境下的引用方式)
            $rs = httpRequest($api);

            // 将获取的json字符串转成php数组
            $result = json_decode($rs, true);
            $data = $result['access_token'];
            file_put_contents($filename, $data);
        }
        return $data;
    }

    public function sign($url)
    // public function sign()
    {
        $nonceStr = self::createNonceStr();
        $ticket = self::geticket();
        $time = time();

        $str = 'jsapi_ticket='.$ticket.'&noncestr='.$nonceStr.'&timestamp='.$time.'&url='.$url;
        $signature = sha1($str);
        $data = [
            'time'=>$time,
            'signature'=>$signature,
            'nonceStr'=>$nonceStr,
        ];
        return $data;
    }

    // 获取随机字符串
    public static 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;
    }

    // 获取jsapi_ticket(用户生成签名)
    function geticket(){
        $filename =  './application/api/jsapi_ticket_cache';

        // 存在该文件且jsapi_ticket未过期
        if (is_file($filename) && filemtime($filename) + 7100 > time()) {
            $data = file_get_contents($filename);
        }else{
            // 获取access_token
            $access_token = self::getAccessToken();

            $api = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$access_token.'&type=jsapi';
            // 发送接口请求
            $rs = httpRequest($api);

            // 将获取的json字符串转成php数组
            $result = json_decode($rs, true);
            $data = $result['ticket'];
            file_put_contents($filename, $data);
        }
        return $data;
    }

}

这里的httpRequest()是封装的一个curl请求作用的函数,点击查看

JavaScript部分

<script type='text/javascript'>
$(document).ready(function(){
        // 页面分享
        shareOptions();
});

// 获取微信jssdk配置参数
function shareOptions() {
    var url = window.location.href;  //当前页面url

    $.get("/api/jssdk/options.html",{'url':url},function(res){
        wx.config(res);

        wx.ready(function () {   //需在用户可能点击分享按钮前就先调用

            // 分享到朋友圈
            wx.onMenuShareTimeline({
                title: '', // 分享标题
                link: url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                imgUrl: 'http://www.xxx.com/myimg/logo.jpg', // 分享图标
                success: function () {
                    // alert('分享成功');
                }
            });
		
			// 分享给好友
            wx.onMenuShareAppMessage({
                title: '', // 分享标题
                desc: '', // 分享描述
                link: url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                imgUrl: 'http://www.xxx.com/myimg/logo.jpg', // 分享图标
                type: '', // 分享类型,music、video或link,不填默认为link
                dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
                success: function () {
                    
                }
            });
			
           // 隐藏功能
            wx.hideMenuItems({
                 menuList: [
                     'menuItem:share:qq',
                     'menuItem:share:weiboApp',
                     'menuItem:share:QZone',
                     'menuItem:share:facebook',
                 ] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
             });
	
            // 隐藏右上角菜单接口
            // wx.hideOptionMenu();

        });

        // wx.checkJsApi({
        //     jsApiList: ['onMenuShareTimeline'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
        //     success: function(res) {
        //         console.log(res);
        //     // 以键值对的形式返回,可用的api值true,不可用为false
        //     // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
        //     }
        // });

        // wx.error(function(res){
        //     // console.log(res);
        // });
    });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值