用于 PHP 方便调用微信小程序的 服务端接口
"php": ">=5.4"
composer require luckyhjh/wechat-mini-program
新建类继承 WechatMiniProgram,并实现相关接口,token 可保存在 redis 或 mysql 等。
例如 Laravel/Lumen,可新建文件 app/Libs/WechatMiniProgram.php:
namespace App\Libs;
use Illuminate\Support\Facades\Cache;
use WechatMiniProgram\Api\AccessToken;
use WechatMiniProgram\ApiException;
class WechatMiniProgram extends \WechatMiniProgram\WechatMiniProgram
{
public function __construct($appid = '', $secret = '')
{
empty($appid) and $appid = env('WX_APPID');
empty($secret) and $secret = env('WX_SECRET');
parent::__construct($appid, $secret);
}
/**
* 读取token
* @return string
*/
public function getApiToken()
{
$cache_name = 'wx_token_' . $this->getAppid();
$access_token = Cache::get($cache_name);
if ($access_token) {
return $access_token;
}
$AccessToken = new AccessToken($this);
try {
$Token = $AccessToken->getAccessToken();
$access_token = $Token->access_token;
$this->setApiToken($access_token, $Token->expires_in);
return $access_token;
} catch (ApiException $apiException) {
return '';
}
}
/**
* 保存token
* @param string $access_token
* @param int $expire
* @return bool
*/
public function setApiToken($access_token, $expire = 7200)
{
$cache_name = 'wx_token_' . $this->getAppid();
return Cache::set($cache_name, $access_token, $expire);
}
}
例如 ThinkPHP,可新建文件 extend/WechatMiniProgram.php:
use WechatMiniProgram\Api\AccessToken;
use WechatMiniProgram\ApiException;
class WechatMiniProgram extends \WechatMiniProgram\WechatMiniProgram
{
public function __construct($appid = '', $secret = '')
{
empty($appid) and $appid = env('WX_APPID');
empty($secret) and $secret = env('WX_SECRET');
parent::__construct($appid, $secret);
}
/**
* 读取token
* @return string
*/
public function getApiToken()
{
$cache_name = 'wx_token_' . $this->getAppid();
$access_token = cache($cache_name);
if ($access_token) {
return $access_token;
}
$AccessToken = new AccessToken($this);
try {
$Token = $AccessToken->getAccessToken();
$access_token = $Token->access_token;
$this->setApiToken($access_token, $Token->expires_in);
return $access_token;
} catch (ApiException $apiException) {
return '';
}
}
/**
* 保存token
* @param string $access_token
* @param int $expire
* @return bool
*/
public function setApiToken($access_token, $expire = 7200)
{
$cache_name = 'wx_token_' . $this->getAppid();
return cache($cache_name, $access_token, $expire);
}
}
业务里根据需要调用
$mp = new WechatMiniProgram();
$Auth = new Auth($mp);
$User = new \WechatMiniProgram\Api\User($mp);//如果要调用其它接口,可复用$mp
try {
$session = $Auth->code2session($code);
$openid = $session->openid;
} catch (ApiException $apiException) {
}
- AccessToken->getAccessToken():获取小程序全局唯一后台接口调用凭据
- Auth->code2session():用 code 获取 openid
- User->getPhoneNumber():获取手机号
- SubscribeMessage->send():发送订阅消息
- WxaCode->getUnlimited():生成小程序码,可接受页面参数较短,生成个数不受限
- WxaCode->get():生成小程序码,可接受 path 参数较长,生成个数受限
- SecCheck->messageIsRisky():文本是否为风险内容
- SecCheck->imageIsRisky():文本是否为风险内容
MIT