php jssdk 类,jsSdk.class.php

class jsSdk

{

//私有属性 APPID

private $appId;

//私有属性 APP秘钥

private $appSecret;

//初始化收取ID与秘钥 并定义相对应的私有属性

public function __construct($appId, $appSecret)

{

$this->appId = $appId;

$this->appSecret = $appSecret;

}

//获取JSSKD签名算法参数

public function getSignPackage()

{ //获取ticket文件中ticket值

$jsapiTicket = $this->getJsApiTicket();

//拼凑出当前url

$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

//获取当前时间戳

$timestamp = time(); //签名时间戳

//获取一个16字符的字符串

$nonceStr = $this->createNonceStr(); //签名随机串

// 这里参数的顺序要按照 key 值 ASCII 码升序排序

//ticket与签名随机字符串,与时间戳,url?

$string = "jsapi_ticket={$jsapiTicket}&noncestr={$nonceStr}&timestamp={$timestamp}&url={$url}";

//加密字符串

$signature = sha1($string);

//拼凑需要使用的信息数组

$signPackage = array(

//appid

"appId" => $this->appId,

//签名随机字符串

"nonceStr" => $nonceStr,

//签名时间戳

"timestamp" => $timestamp,

//当前网址

"url" => $url,

//签名

"signature" => $signature,

//ranstring?

"rawString" => $string

);

//返回信息数组

return $signPackage;

}

//创建随机字符串

private function createNonceStr($length = 16)

{ //字典

$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

//定义字符串

$str = "";

//获取字典中的随机16个字符串

for ($i = 0; $i < $length; $i++) {

$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);

}

//返回随机字符串

return $str;

}

//获取ticket文件中ticket值 以及检查ticket是否过期与调用方法更新ticket

private function getJsApiTicket()

{

//jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例

//获取路径

$path = "jsapi_ticket.json";

//判断路径

if (!file_exists($path))

//路径文件不存在 弹出

return $this->_get_ticket();

//获取路径中的json对象

$data = json_decode(file_get_contents($path));

//判断时间是否过期?

if ($data->expire_time < time())

//过期 调用get_ticket方法

return $this->_get_ticket();

//返回ticket

return $data->jsapi_ticket;

}

//获取ticket并更新ticket文件方法

private function _get_ticket()

{ //使用获取token方法获取token文件中的token数据

$accessToken = $this->getAccessToken();

//使用微信接口 发送token获取对应的ticket

$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";

//使用httpget方法执行接口url并获取返回的json数据

$res = json_decode($this->httpGet($url));

//获取ticket

$ticket = $res->ticket;

//判断是否有数据

if ($ticket) {

//有数据 拼凑ticket文件的内容数组

$data = array(

//过期时间 为获取时间的俩个小时候

'expire_time' => time() + 7000,

//ticket

'jsapi_ticket' => $ticket

);

//获取ticket文件的对象写权限

$fp = fopen("jsapi_ticket.json", "w");

//写入json格式 并覆盖原来的内容 更新ticket文件

fwrite($fp, json_encode($data));

//关闭文件对象

fclose($fp);

}

//返回ticket

return $ticket;

}

//获取token文件中的token 以及token过期与否的检测与更新

private function getAccessToken()

{

// access_token 应该全局存储与更新,以下代码以写入到文件中做示例

//获得token文件路径

$path = "access_token.json";

//判断路径正确?

if (!file_exists($path))

//路径错误 掉用获取token方法更新token文件

return $this->_get_token();

//获取token文件的内容

$data = json_decode(file_get_contents($path));

//判断是否时间过期?

if ($data->expire_time < time())

//过期 调用方法 获取token并更新token文件

return $this->_get_token();

//返回获得到的token

return $data->access_token;

}

//掉用接口获取token并更新token文件的内容

private function _get_token()

{ //使用微信接口 发送APPID 与APP秘钥 获取TOKEN

$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";

//使用httpGet方法执行URL 并返回JS对象

$res = json_decode($this->httpGet($url));

//获取TOKEN

$access_token = $res->access_token;

//判断TOKEN是否获取到

if ($access_token) {

//拼凑token文件的内容数组 过期时间为获取时间的俩个小时后

$data = array(

//过期时间

'expire_time' => time() + 7000,

//token

'access_token' => $access_token

);

//打开token文件

$fp = fopen("access_token.json", "w");

//以json格式写入文件中并覆盖原有的文本

fwrite($fp, json_encode($data));

//关闭文件对象

fclose($fp);

}

//返回

return $access_token;

}

//curl执行接口的方法

private function httpGet($url)

{

$curl = curl_init();

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_TIMEOUT, 500);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_URL, $url);

$res = curl_exec($curl);

curl_close($curl);

return $res;

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值