<?php
/**
* Created by PhpStorm.
* User: xpz
* Date: 2021/12/15
* Time: 11:23
* qq 1522508767
*/
namespace app\common\library;
use think\Cache;
class WechatToken
{
private $appId;
private $appSecret;
private $cachewechatToken;
private $getTokenByInterface = true; //是否时时从微信获取token
/**
*
* 使用方法:
* $wxtoken = new WechatToken('公众号appId', '公众号Secret');
* $token = $wxtoken->accessToken();
* 如有疑问,添加qq:1522508767
*
*
*
*/
/**
* WechatToken constructor.
* @param $appId 公众号id
* @param $appSecret 公众号Secret
*/
public function __construct($appId,$appSecret){
$this->appId = $appId;
$this->appSecret = $appSecret;
$this->cachewechatToken = 'cache_wechat_token';
}
/**
* 从缓存获取token,如果过期则从微信接口获取
* @return mixed
*/
public function accessToken() {
if($this->getTokenByInterface){
return $this->setAccessToken();
} else {
$accessTokenArr = $this->getAccessToken();
if(empty($accessTokenArr)){
return $this->setAccessToken();
} else {
if($accessTokenArr['expire_time'] > time()){
return $accessTokenArr['access_token'];
} else {
return $this->setAccessToken();
}
}
}
}
/**
* 从微信获取token并设置缓存
* @return mixed
*/
private function setAccessToken(){
// 如果是企业号用以下URL获取access_token
//$url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
$res = json_decode($this->httpGet($url));
if(isset($res->access_token) && !empty($res->access_token)){
$arr['access_token'] = $res->access_token;
$arr['expire_time'] = 7000+time();
Cache::set($this->cachewechatToken,$arr,0);
// Tool::mylog(Config::get('xpz.my_log_show'),'接口获取Token:' , $arr['access_token'] ."===".date("Y-m-d H:i:s",$arr['expire_time']), 'wxtoken');
return $arr['access_token'];
} else {
// Tool::mylog(Config::get('xpz.my_log_show'),'接口获取Token:' , '失败!' , 'wxtoken');
}
}
/**
* 从缓存获取token
* @return mixed
*/
private function getAccessToken(){
return Cache::get($this->cachewechatToken);
}
/**
* 请求微信接口
* @param $url
* @return mixed
*/
private function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
}

xiaopzi123123
- 粉丝: 602
最新资源
- 3生物组织中还原糖、脂肪、蛋白质的鉴定.doc
- 微信小程序-NAMI DEMO-赞赏(支付,登录).zip
- 简洁、易用、灵活的微信小程序组件库.zip
- 造价员考试《工程造价基础知识》重点知识点.doc
- 微信小程序 —— 新闻阅读器.zip
- 35kv输电线路施工组织措施及施工方案.doc
- 流动图书馆微信小程序前端.zip
- 重庆某污水处理厂施工方案.doc
- wanandroid 微信小程序.zip
- 浅析建筑施工企业索赔策略及措施.doc
- 一个简单的微信小程序购物车DEMO.zip
- sprnigboot和微信小程序实现点餐系统(全栈开发之微信小程序点餐).zip
- 微信小程序商城后台,微信小程序微店后台,接口基于FaShop.zip
- 基于 Apache ECharts 的微信小程序图表库.zip
- 德国威达种植屋面系统介绍.doc
- 油压机操作规程.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


