移步Saber文档
[https://github.com/swlib/saber](https://github.com/swlib/saber)
# 案例
微信小程序登录,生成小程序码。
~~~
<?php
namespace app\Library;
use app\Model\User;
use ESD\Core\Plugins\Logger\GetLogger;
use ESD\Go\Exception\ResponseException;
use ESD\Plugins\Cache\Annotation\Cacheable;
use function Swlib\Http\build_query;
use Swlib\Http\ContentType;
use function Swlib\Http\str;
use Swlib\Saber;
/**
* 微信
*/
class Wechat
{
use GetLogger;
const WEIXIN_API = "https://api.weixin.qq.com";
private $app_info;
/**
* @var Saber
*/
private $http_client;
/**
* @param $app_id
* @return $this
* @throws \ESD\Plugins\Validate\ValidationException
*/
public function setAppid($app_id){
//此处获取appid 的方法自行实现。
$app_info = (new User())->app($app_id);
$this->app_info = $app_info;
$this->debug('wechat.setAppid', $this->app_info);
$saber = Saber::create([
'base_uri' => self::WEIXIN_API,
'use_pool' => true
]);
$this->http_client = $saber;
return $this;
}
/**
* @param $code
* @return mixed|null|\Psr\Http\Message\StreamInterface|\Swlib\Http\StreamInterface
* @throws ResponseException
*/
public function getSession($code){
$param = [
'appid' => $this->app_info['app_id'],
'secret' => $this->app_info['secret'],
'js_code' => $code,
'grant_type' => 'authorization_code',
];
$result = $this->http_client->get('/sns/jscode2session?' . build_query($param))->getBody();
$result = json_decode($result,true);
if(isset($result['errcode'])){
throw new ResponseException();
}
$this->debug('wechat.getSession' , $result);
return $result;
}
/**
* @param $scene
* @param string $path
* @param int $width
* @param bool $is_hyaline
* @return string
* @throws ResponseException
*/
public function getQrcode($scene, $path='', $width=280, $is_hyaline=false){
$params = [
'scene' => $scene,
'page' => $path,
'width' => $width,
'is_hyaline' => (bool) $is_hyaline,
];
$access_token = $this->getAccessToken($this->getAppid());
$response = $this->http_client->post('/wxa/getwxacodeunlimit?access_token='.$access_token,
json_encode($params),
[ 'headers' =>['content-type' => ContentType::JSON]]
);
$contentType = $response->getHeader('content-type')[0];
$body = $response->getBody();
if($contentType != 'image/jpeg'){
$err = json_decode($body,true);
$this->warn($err['errmsg']);
throw new ResponseException($err['errmsg']);
}
return (string)$body;
}
public function getAppid(){
return $this->app_info['app_id'];
}
public function getSecret(){
return $this->app_info['secret'];
}
/**
* @Cacheable(key="'wx_accesstoken'.$p[0]", time="7100")
* @param $cacheKey
* @return mixed
* @throws ResponseException
*/
public function getAccessToken($cacheKey){
$query = [
'grant_type' => 'client_credential',
'appid' => $this->getAppid(),
'secret' => $this->getSecret(),
];
$response = $this->http_client->get('/cgi-bin/token?' . build_query($query));
$token = json_decode($response->getBody(), true);
if(isset($token['errcode'])){
throw new ResponseException();
}
$this->debug('wechat.getAccessToken' , $token);
return $token['access_token'];
}
}
~~~
- 前言
- 捐赠ESD项目
- 使用篇-通用
- 环境
- 安装
- 规范
- 压力测试
- 配置
- 如何设置YML配置
- server配置
- 端口配置
- 项目结构
- 事件派发
- 日志
- 注解
- DI容器
- 自定义进程
- 并发及协程池
- Console插件
- Scheduled插件
- Redis插件
- AOP插件
- Saber插件
- Mysql插件
- mysql事务
- Actuator插件
- Whoops插件
- Cache插件
- PHPUnit插件
- Security插件
- Session插件
- EasyRoute插件
- http路由
- ProcessRpc插件
- AutoReload插件
- AnnotationsScan插件
- Tracing-plugin插件
- MQTT插件
- Pack插件
- AMQP插件
- Validate插件
- Uid插件
- Topic插件
- Blade插件
- CsvReader插件
- hashed-wheel-timer-plugin插件
- 使用篇-HTTP
- 路由
- 静态文件
- 路由定义
- 修饰方法
- 路由分组
- 资源路由
- 端口作用域
- 异常处理
- 跨域请求
- 路由缓存
- 控制器
- 控制器初始化
- 前置操作
- 跳转和重定向
- 异常处理
- 请求
- 请求对象
- 请求信息
- request消息
- response消息
- stream消息
- url接口
- 验证器
- 内置验证器
- 内置过滤器
- 使用篇-WS
- 如何使用
- 路由
- 使用篇-TCP
- 插件篇-PluginSystem
- 微服务篇-ESDCloud
- CircuitBreaker插件
- SaberCloud插件
- 分布式链路追踪系统
- Consul插件