2024-01-03 14:19:05 +08:00

1 line
3.1 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace hema\wechat;
use hema\Http;
use think\facade\Cache;
/**
* 微信小程序接口
*/
class Wxapp
{
private $config;
private $error;
/**
* 构造函数
*/
public function __construct($config)
{
$this->config = $config;
}
/**
* 获取不限制数量的小程序码
* $path = 存放文件夹
*/
public function getUnlimitedQRCode($path='',string $scene = '',$page = 'pages/index/index')
{
$path = 'qrcode/' . $path;
$file_name = $path . '/' . $scene . '.png';
$access_token = $this->getAccessToken();
$url = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$access_token;
$queryarr = [
'scene' => $scene,
'page' => $page,
'check_path' => false,//不检测页面是否存在
//'is_hyaline' => true,//透明底色
];
$result = Http::post($url,json_encode($queryarr));
//严正是否返回JSON数据
if(is_json($result)){
return $this->result($result);
}
if(!file_exists('./'.$path)){
@mkdir('./'.$path,0777,true);
}
file_put_contents('./'.$file_name,$result);
//获取的二维码数据存储到指定的文件
return $file_name;
}
/**
* 小程序登录
*/
public function code2Session(string $code)
{
$url = 'https://api.weixin.qq.com/sns/jscode2session';
$params = [
'appid' => $this->config['app_id'],
'secret' => $this->config['app_secret'],
'grant_type' => 'authorization_code',
'js_code' => $code
];
return $this->result(Http::get($url, $params));
}
/**
* 获取令牌 - AccessToken
*/
private function getAccessToken()
{
$config = $this->config;
if(!$access_token = Cache::get("cxhxy:api:wechat:access_token_v2:{$config['app_id']}")){
//重新获取
$url = 'https://api.weixin.qq.com/cgi-bin/token';
$params = [
'grant_type' => 'client_credential',
'appid' => $config['app_id'],
'secret' => $config['app_secret']
];
$result = json_decode(Http::get($url, $params),true);
if(isset($result['access_token'])){
$access_token = $result['access_token'];
Cache::set("cxhxy:api:wechat:access_token_v1:{$config['app_id']}", $access_token, 7000); //设置将近2小时失效
}
}
return $access_token;
}
/**
* 请求数据验证
**/
private function result($result)
{
$result = json_decode($result,true);
if(!is_array($result)){
$this->error = '未知错误';
return false;
}
if(isset($result['errcode']) and $result['errcode']!=0){
$this->error = 'code' . $result['errcode'] . 'msg' . $result['errmsg'];
return false;
}
return $result;
}
public function getError()
{
return $this->error;
}
}