微信公众号get_access_token的函数封装

    在学习微信公众号开发时,会发现access_token的调用时由次数限制的,刚开始微信公众号用户较少,调用次数有限,并不会影响微信公众号的运行,如果达到次数限制后微信公众号的功能将受到影响,而且每使用一次就去调用一次,增加了腾讯服务器的负担,你本身的公众号反应也会稍慢。为了避免上述状况,我们需要写一个函数来获得统一的access_token,每次调用就访问该函数,由该函数判断当前的access_token是否仍然还在有效期内(access_token的时效为7200秒,而且刷新之后5分钟内旧的access_token仍然有效)如果仍在有效期内,则将该access_token返回,如果已经超出时效,则需重新调用端口,生成新的access_token。

以下是php程序

<?php

//https协议的get与post,
function httpsRequest($url,$data=null)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,false);
if(!empty($data)){
curl_setopt($curl, CURLOPT_POST,1);
curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
}
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}


function get_access_token()
{
$tokenFile = "acess_token.xml";//用一个xml格式的文件存储获取到的acess_token,好处在于可以方便的访问,只用在网址栏输入该文件的位置,例如http://juqiwu.duapp.com/acess_token.xml然后右击查看源代码就可以直接看到文件里面的数据,无需对数据另行加工,因为刚开始学习时要时时刻刻验证自己程序的正确性,最直接的方式就是看有没有结果返回或者显示
if(!file_exists($tokenFile))//用于刚开始创建文件,即刚开始并没有这个文件,则创建一个文件这个文件主要记录AccessToken,以及创建时间CreateTime
{
$access_token = "123";
$createtime = '0';//创建时间为time(),数据类型为整型
$xmlTpl = "<xml>
<AccessToken>%s</AccessToken>
<CreateTime>%s</CreateTime>
  </xml>";
$data = sprintf($xmlTpl, $access_token, $createtime);//将变量填进去, sprintf函数会自动将字符串中的%s按顺序替换为后面的变量
file_put_contents($tokenFile,$data);//创建文件,写入初始数据,当然这个数据是不能使用的因为创建时间为0,任何申请的时间都会远远大于0
}
$data = file_get_contents($tokenFile);//读取文件里的内容
$postObj = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);//将内容转换为对象,
$CreateTime = $postObj->CreateTime;//读取创建时间
$appid = "xxxxxxxxxx";//此次填入你的appid
$secret = "xxxxxxxxxxxxxxx";//此处填入你的secret
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
if(time()-$CreateTime>='6900')//如果超出时效则重新调用端口生成access_token
{
$json = httpsRequest("$url");//调用
        $arr = json_decode($json,true);//json转换
$access_token = $arr['access_token'];
$xmlTpl = "<xml>
<AccessToken>%s</AccessToken>
<CreateTime>%s</CreateTime>
  </xml>";
$data = sprintf($xmlTpl, $access_token, time());
file_put_contents($tokenFile,$data);//将新的数据覆盖文件里面的数据
}else//如果在有效时效内,则直接将文件里保存的access_token返回
{
$access_token = $postObj->AccessToken;
}
return $access_token;//返回access_token

}

$access_token = get_access_token();//用以在访问该文件时启动程序,程序调试完毕后注释掉该句话

下图为直接在网址栏输入该文件的位置,右击查看源代码的效果。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值