微信php无法获取token,php微信开发 大神看看有没有语法错误,能不能自动获取到最新access_token...

class Wechat_base_api{

private $appid='wx5d4b7d2e8bfd5793';

private $appsecret='4379ef7213c36eae5dc2ab91f9f6aced';

//构造函数

public function __construct($appid,$appsecret)

{

$this->appid = $appid;

$this->appsecret = $appsecret;

}

//获取access_token(支持自动更新凭证)

public function get_access_token()

{

$this->last_time = 1408851194;

$access_token = "jIGpovtFGZDXCB_K2vqDPTA05zP7VWZaKIHXC_qZDqEiSGONWfCzQ45fI9aksl2L188yhtPpNB61iOBS4TTtgw";

if(time() > ($this->last_time + 7200))

{

//GET请求的地址

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

$access_token_Arr =  $this->https_request($url);

$this->last_time = time();

return $access_token_Arr['access_token'];

}

return $access_token;

}

//https请求(支持GET和POST)

protected function https_request($url,$data = null)

{

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

if(!empty($data))

{

curl_setopt($ch,CURLOPT_POST,1);//模拟POST

curl_setopt($ch,CURLOPT_POSTFIELDS,$data);//POST内容

}

$outopt = curl_exec($ch);

curl_close($ch);

$outopt = json_decode($outopt,true);

return $outopt;

}

}

1.没有语法错误

2.这是谁家的id和secret…

问题大的很

过期时间写死,会导致不停请求微信接口,可能会达到接口请求上限

access_token也是写死,当达到接口请求上限后,返回都是过期错误的access_token

说到底,access_token没有缓存起来。

下面这个是根据微信提供的示例代码更改改过的:

<?php

/**

* Created by PhpStorm.

* User: T.H

* Date: 12/9/2015

* Time: 9:59 AM

*/

class WxApi

{

/**

* 填你的AppId

* @var string

*/

private $appId = '';

/**

* 填你的Secret

* @var string

*/

private $appSecret = '';

/**

* 填你的 access_token 缓存文件存存放的位置

* @var string

*/

private $file_path = '/var/wx/AccessToken.json';

/**

* WxAccessToken constructor.

* @param string $appId

* @param string $appSecret

* @param string $file_path

*/

public function __construct($appId = '', $appSecret = '', $file_path = '') {

//初始化

$this->appId = $appId ? $appId : $this->appId;

$this->appSecret = $appSecret ? $appSecret : $this->appSecret;

$this->file_path = $file_path ? $file_path : $this->file_path;

}

/**

* 获取微信AccessToken

* @return mixed

*/

private function getAccessToken() {

$data = json_decode(file_get_contents($this->file_path));

if ($>expire_time < time()) { //判断本地存储的access_token是否过期

// 如果是企业号用以下URL获取access_token

// $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";

// 其它类型公众号使用这个URL获取access_token

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

//访问微信接口,拉取access_token等信息

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

//提取出access_token

$access_token = $res->access_token;

//判断access_token是否存在,存在保存到本地文件中

if ($access_token) {

$>expire_time = time() + 7190;

$>access_token = $access_token;

$fp = fopen($this->file_path, "w");

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

fclose($fp);

}

} else { //本地存储的access_token没有过期

$access_token = $>access_token;

}

//返回

return $access_token;

}

/**

* 拉取数据

* @param $url

* @return mixed|string

*/

private function httpGet($url) {

//本地请求,则跳过请求

if('127.0.0.1' == $_SERVER['SERVER_ADDR']){

return '';

}

$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_SSL_VERIFYHOST, false);

curl_setopt($curl, CURLOPT_URL, $url);

$res = curl_exec($curl);

curl_close($curl);

return $res;

}

}

微信官方文档中的 PHP 代码,感觉坑比较多,自己一个个接口试过去太耗时了(别问我是怎么知道的…)。

因为我们项目中用的是 CI 框架,在 GitHub 中这个项目:https://github.com/dodgepudding/wechat-php-sdk 的基础上稍加改动,就完成了微信的集成。

看这份代码比看官方文档要快,我是这么觉得的…

哥们 你们家的appid 跟appsecret 暴露了!!!

另外 access_token 是有次数限制的

记得缓存下来,不然请求次数过多,会出错的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值