php 微信管理,PHP全局管理微信公众平台token

本文介绍了一种使用PHP在单台服务器上全局保存微信公众号的access_token和ticket的方法,通过文件系统来存储,并提供了更新和检查超时的逻辑。如果需要在多台服务器间共享,建议实现一个内部HTTP接口。代码示例展示了如何利用文件锁确保并发安全,并在token和ticket过期时自动更新。
摘要由CSDN通过智能技术生成

由于微信平台对获取token有限制,而且每次获取的token不一样,需要对获取到的token,ticket之类的数据进行服务器全局保存,而且有7200秒的限制,如果token不同步或超时,会导致相关接口不可用.

对于java这类语言而言,维护全局变量是很简单的事,但是PHP做全局一直是个麻烦事,需要借助第三方的功能才能实现,如数据库,缓存,文件系统等,我这里提供一种文件系统全局保存ticket的方式,对单台服务器有效,如果要用在多台服务器上,可以实现成一个http接口给其他服务器获取token

下面是PHP代码

//weixin.php

//全局保存ticket和token,系统中的所有获取token的地方通过引用该文件

//注意:需要保证该php文件可以读写同目录下的lock,_weixin_tickets.php两个文件.

$cdir=dirname(__FILE__);

$file=$cdir.'/lock';

if(!file_exists($file)) touch($file);

$lock=fopen($file,'w');

flock($lock,LOCK_EX);

$tokenFile=$cdir.'/_weixin_tickets.php';

$ticketData=include($tokenFile);

//如果token超时,更新token

if(time()-$ticketData['time']>=7100){

$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=myappid&secret=mysecret";

$datas=json_decode(file_get_contents($url));

$ticketData=array(

'access_token'=>$datas->access_token,

'time'=>time()

);

$token=$ticketData['access_token'];

$rdata=file_get_contents("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$token}&type=jsapi");

$datas=json_decode($rdata);

$ticketData['ticket']=$datas->ticket;

unlink($tokenFile);

file_put_contents($tokenFile,"<?php \nreturn ".var_export($ticketData,true).";");

}

flock($lock,LOCK_UN);

fclose($lock);

return $ticketData;

如果需要多个服务器共享token,可以某一台服务器实现一个内部http接口,引用该文件,输出token等信息,如下示例

//内部api

$ticketData=include("/path/to/weixin.php");

echo json_encode($ticketData);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值