ThinkPHP5怎么集成JS-SDK实现微信自定义分享功能

广告:宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取~~~

ThinkPHP5怎么集成JS-SDK实现微信自定义分享功能

Jssdk类库

1、文件名及位置

名字:Jssdk.php位置:extend\util\Jssdk.php

2、代码
<?phpnamespace util;class Jssdk {    protected $appid = 'xxxx';    protected $secret = 'xxxx';    /**     * 获取access_token方法     */    public function getAccessToken(){        //定义文件名称        $name = 'token_' . md5($this->appid . $this->secret);        //定义存储文件路径        // $filename = __DIR__ . '/cache/' . $name . '.php';$filename = '../runtime/temp/' . $name . '.php';        //判断文件是否存在,如果存在,就取出文件中的数据值,如果不存在,就向微信端请求        if (is_file($filename) && filemtime($filename) + 7100 > time()){            $result = include $filename;            //定义需要返回的内容$data            $data = $result['access_token'];        }else{            // https请求方式: GET// https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET            // 调用curl方法完成请求            $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->appid.'&secret=' . $this->secret;            $result = $this->curl($url);            //将返回得到的json数据转成php数组            $result = json_decode($result,true);            //将内容写入文件中            file_put_contents($filename,"<?php\nreturn " . var_export($result,true) . ";\n?>");            //定义需要返回的内容            $data = $result['access_token'];        }        //将得到的access_token的值返回        return $data;    }    /**     *     * 获取临时票据方法     *     * @return mixed     */    public function getJsapiTicket(){        //存入文件中,定义文件的名称和路径        $name = 'ticket_' . md5($this->appid . $this->secret);        //定义存储文件路径        //$filename = __DIR__ . '/cache/' . $name . '.php';$filename = '../runtime/temp/' . $name . '.php';        //判断是否存在临时票据的文件,如果存在,就直接取值,如果不存在,就发送请求获取并保存        if (is_file($filename) && filemtime($filename) + 7100 > time()){            $result = include $filename;        }else{            //定义请求地址            $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$this                    ->getAccessToken().'&type=jsapi';            //使用curl方法发送请求,获取临时票据            $result = $this->curl($url);            //转换成php数组            $result = json_decode($result,true);            //将获取到的值存入文件中            file_put_contents($filename,"<?php\nreturn " . var_export($result,true) . ";\n?>");        }        //定义返回的数据        $data = $result['ticket'];        //将得到的临时票据结果返回        return $data;    }    /**     * 获取签名方法     */    public function sign(){        //需要定义4个参数,分别包括随机数,临时票据,时间戳和当前url地址        $nonceStr = $this->makeStr();        $ticket = $this->getJsapiTicket();        $time = time();        //组合url//$url = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];        $url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];        //将4个参数放入一个数组中        $arr = [            'noncestr=' . $nonceStr,            'jsapi_ticket=' . $ticket,            'timestamp=' . $time,            'url=' . $url        ];        //对数组进行字段化排序        sort($arr,SORT_STRING);        //对数组进行组合成字符串        $string = implode('&',$arr);        //将字符串加密生成签名        $sign = sha1($string);        //由于调用签名方法的时候不只需要签名,还需要生成签名的时候的随机数,时间戳,所以我们应该返回由这些内容组成的一个数组        $reArr = [            'appId' => $this->appid,            'timestamp' => $time,            'nonceStr' => $nonceStr,            'signature' => $sign,            'url' => $url        ];        //将数组返回        return $reArr;    }    /**     *     * 生成随机数     *     * @return string     */    protected function makeStr(){        //定义字符串组成的种子        $seed = 'www512wayanbao1qasxianrendong5tgblaochaguan8ik9500net';        //通过循环来组成一个16位的随机字符串        //定义一个空字符串 用来接收组合成的字符串内容        $str = '';        for ($i = 0;$i < 16; $i++){            //定义一个随机数            $num = rand(0,strlen($seed) - 1);            //循环连接随机生成的字符串            $str .= $seed[$num];        }        //将随机数返回        return $str;    }    /**     *     * 服务器之间请求的curl方法     *     * @param $url 请求地址     * @param array $field post参数     * @return string     */    public function curl($url,$field = []){        //初始化curl        $ch = curl_init();        //设置请求的地址        curl_setopt($ch,CURLOPT_URL,$url);        //设置接收返回的数据,不直接展示在页面        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);        //设置禁止证书校验        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);        //判断是否为post请求方式,如果传递了第二个参数,就代表是post请求,如果么有传递,第二个参数为空,就是get请求        if (!empty($field)){            //设置请求超时时间            curl_setopt($ch,CURLOPT_TIMEOUT,30);            //设置开启post            curl_setopt($ch,CURLOPT_POST,1);            //传递post数据            curl_setopt($ch,CURLOPT_POSTFIELDS,$field);        }        //定义一个空字符串,用来接收请求的结果        $data = '';        if (curl_exec($ch)){            $data = curl_multi_getcontent($ch);        }        //关闭curl        curl_close($ch);        //将得到的结果返回        return $data;    }}//测试获取access_token值的方法//$obj = new Wx();//$data = $obj->getAccessToken();//echo $data;//测试获取jsapiticket方法//$obj = new Wx();//$data = $obj->getJsapiTicket();//echo $data;//测试生成签名方法//$obj = new Wx();//$data = $obj->sign();//echo '<pre>';//print_r($data);?>
登录后复制后台控制器处理
<?phpnamespace app\index\controller;use think\Controller;use think\Db;use app\admin\model\Menu;use util\Jssdk;class Index extends Controller {    public function demo(){        $id = input('id',0);//ID        $catid = input('catid',0);//分类ID        $modelInfo = getModInfoById($catid);        $info = Db::name($modelInfo['tablename'])->where('id',$id)->find();        $catinfo = getCatInfoById($catid);        $p_catname = getCatInfoById($catinfo['parentid'],'catname');$obj = new Jssdk();$data = $obj->sign();        $this->assign('infos',$info);        $this->assign('catids',$catid);        $this->assign('catnames',$catinfo['catname']);        $this->assign('p_catnames',$p_catname);$this->assign('data',$data);        return view('../application/index/view/default/index/' . $modelInfo['show_template']);    }}?>
登录后复制微信事件响应
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script><script type="text/javascript">// 通过config接口注入权限验证配置wx.config({debug: false, appId: '{$data.appId}',timestamp: '{$data.timestamp}',nonceStr: '{$data.nonceStr}', signature: '{$data.signature}',jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage']});// 通过ready接口处理成功验证wx.ready(function(){// 分享到朋友圈wx.onMenuShareTimeline({title: '{$info.title}',link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', success: function () {// 用户点击了分享后执行的回调函数}});// 分享给朋友wx.onMenuShareAppMessage({title: '{$info.title}', desc: '{$info.description}', link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', type: 'link', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function () {// 用户点击了分享后执行的回调函数}});});</script>
登录后复制 全部分享接口
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script><script type="text/javascript">// 通过config接口注入权限验证配置wx.config({debug: true, appId: '{$data.appId}',timestamp: '{$data.timestamp}',nonceStr: '{$data.nonceStr}', signature: '{$data.signature}',jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone']});// 通过ready接口处理成功验证wx.ready(function(){// 分享到朋友圈wx.onMenuShareTimeline({title: '{$info.title}',link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', success: function () {// 用户点击了分享后执行的回调函数}});// 分享给朋友wx.onMenuShareAppMessage({title: '{$info.title}', desc: '{$info.description}', link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', type: 'link', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function () {// 用户点击了分享后执行的回调函数}});// 分享到QQwx.onMenuShareQQ({title: '{$info.title}', desc: '{$info.description}', link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', success: function () {// 用户确认分享后执行的回调函数},cancel: function () {// 用户取消分享后执行的回调函数}});// 分享到腾讯微博wx.onMenuShareWeibo({title: '{$info.title}',desc: '{$info.description}', link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', success: function () {// 用户确认分享后执行的回调函数},cancel: function () {// 用户取消分享后执行的回调函数}});// 分享到QQ空间wx.onMenuShareQZone({title: '{$info.title}', desc: '{$info.description}', link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', success: function () {// 用户确认分享后执行的回调函数},cancel: function () {// 用户取消分享后执行的回调函数}});});</script>
登录后复制

以上就是ThinkPHP5怎么集成JS-SDK实现微信自定义分享功能的详细内容,更多请关注9543建站博客其它相关文章!

9543建站博客
一个专注于网站开发、微信开发的技术类纯净博客。
作者头像
admin创始人

肥猫,知名SEO博客站长,14年SEO经验。

上一篇:介绍swoole之进程模型
下一篇:yii怎么输出sql语句?

发表评论

关闭广告
关闭广告