jssdk类库

1、文件名及位置
名字:Jssdk.php位置:extendutilJssdk.php
2、代码<?php
namespace util;

class Jssdk {

protected $appid = &#39;xxxx&#39;;
protected $secret = &#39;xxxx&#39;;

/**
 * 获取access_token方法
 */
public function getAccessToken(){
    //定义文件名称
    $name = &#39;token_&#39; . md5($this->appid . $this->secret);
    //定义存储文件路径
    // $filename = __DIR__ . &#39;/cache/&#39; . $name . &#39;.php&#39;;
    $filename = &#39;../runtime/temp/&#39; . $name . &#39;.php&#39;;
    //判断文件是否存在,如果存在,就取出文件中的数据值,如果不存在,就向微信端请求
    if (is_file($filename) && filemtime($filename) + 7100 > time()){
        $result = include $filename;
        //定义需要返回的内容$data
        $data = $result[&#39;access_token&#39;];
    }else{
        // https请求方式: GET
        // https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
        // 调用curl方法完成请求
        $url = &#39;https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=&#39;.$this->appid.&#39;&secret=&#39; . $this->secret;
        $result = $this->curl($url);
        //将返回得到的json数据转成php数组
        $result = json_decode($result,true);
        //将内容写入文件中
        file_put_contents($filename,'<?php

return ' . var_export($result,true) . ';
?>');
//定义需要返回的内容
$data = $result['access_token'];
}

    //将得到的access_token的值返回
    return $data;

}

/**
 *
 * 获取临时票据方法
 *
 * @return mixed
 */
public function getJsapiTicket(){
    //存入文件中,定义文件的名称和路径
    $name = &#39;ticket_&#39; . md5($this->appid . $this->secret);
    //定义存储文件路径
    //$filename = __DIR__ . &#39;/cache/&#39; . $name . &#39;.php&#39;;
    $filename = &#39;../runtime/temp/&#39; . $name . &#39;.php&#39;;
    //判断是否存在临时票据的文件,如果存在,就直接取值,如果不存在,就发送请求获取并保存
    if (is_file($filename) && filemtime($filename) + 7100 > time()){
        $result = include $filename;
    }else{
        //定义请求地址
        $url = &#39;https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=&#39;.$this
                ->getAccessToken().&#39;&type=jsapi&#39;;
        //使用curl方法发送请求,获取临时票据
        $result = $this->curl($url);
        //转换成php数组
        $result = json_decode($result,true);
        //将获取到的值存入文件中
        file_put_contents($filename,'<?php

return ' . var_export($result,true) . ';
?>');

    }
    //定义返回的数据
    $data = $result[&#39;ticket&#39;];
    //将得到的临时票据结果返回
    return $data;
}

/**
 * 获取签名方法
 */
public function sign(){
    //需要定义4个参数,分别包括随机数,临时票据,时间戳和当前url地址
    $nonceStr = $this->makeStr();
    $ticket = $this->getJsapiTicket();
    $time = time();
    //组合url
    //$url = $_SERVER[&#39;REQUEST_SCHEME&#39;] . &#39;://&#39; . $_SERVER[&#39;SERVER_NAME&#39;] . $_SERVER[&#39;REQUEST_URI&#39;];
    $url = &#39;http://&#39; . $_SERVER[&#39;SERVER_NAME&#39;] . $_SERVER[&#39;REQUEST_URI&#39;];
    //将4个参数放入一个数组中
    $arr = [
        &#39;noncestr=&#39; . $nonceStr,
        &#39;jsapi_ticket=&#39; . $ticket,
        &#39;timestamp=&#39; . $time,
        &#39;url=&#39; . $url
    ];
    //对数组进行字段化排序
    sort($arr,SORT_STRING);
    //对数组进行组合成字符串
    $string = implode(&#39;&&#39;,$arr);
    //将字符串加密生成签名
    $sign = sha1($string);
    //由于调用签名方法的时候不只需要签名,还需要生成签名的时候的随机数,时间戳,所以我们应该返回由这些内容组成的一个数组
    $reArr = [
        &#39;appId&#39; => $this->appid,
        &#39;timestamp&#39; => $time,
        &#39;nonceStr&#39; => $nonceStr,
        &#39;signature&#39; => $sign,
        &#39;url&#39; => $url
    ];
    //将数组返回
    return $reArr;
}

/**
 *
 * 生成随机数
 *
 * @return string
 */
protected function makeStr(){
    //定义字符串组成的种子
    $seed = &#39;www512wayanbao1qasxianrendong5tgblaochaguan8ik9500net&#39;;
    //通过循环来组成一个16位的随机字符串
    //定义一个空字符串 用来接收组合成的字符串内容
    $str = &#39;&#39;;
    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 = &#39;&#39;;
    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 '

';
//print_r($data);

?>登录后复制后台控制器处理<?php
namespace appindexcontroller;
use thinkController;
use thinkDb;
use appadminmodelMenu;
use utilJssdk;

class Index extends Controller {
public function demo(){
$id = input('id',0);//ID
$catid = input('catid',0);//分类ID

    $modelInfo = getModInfoById($catid);

    $info = Db::name($modelInfo[&#39;tablename&#39;])->where(&#39;id&#39;,$id)->find();
    $catinfo = getCatInfoById($catid);
    $p_catname = getCatInfoById($catinfo[&#39;parentid&#39;],&#39;catname&#39;);

    $obj = new Jssdk();
    $data = $obj->sign();

    $this->assign(&#39;infos&#39;,$info);
    $this->assign(&#39;catids&#39;,$catid);
    $this->assign(&#39;catnames&#39;,$catinfo[&#39;catname&#39;]);
    $this->assign(&#39;p_catnames&#39;,$p_catname);
    $this->assign(&#39;data&#39;,$data);

    return view(&#39;../application/index/view/default/index/&#39; . $modelInfo[&#39;show_template&#39;]);
}

}
?>登录后复制微信事件响应

登录后复制 全部分享接口 登录后复制以上就是ThinkPHP5怎么集成JS-SDK实现微信自定义分享功能的详细内容,更多请关注php中文网其它相关文章!