php调用txt接口,PHP 如何更优雅地调用 API 接口
21
48 天前
那我贴出来吧。为什么要有 facade 等东西,目的就是为了实现 “调用方式不变,实现方式可变”啊。
```
require_once(__DIR__.'/vendor/autoload.php'); //@DUCKPHP_HEADFILE
use think\api\Client;
use GuzzleHttp\Client as GuzzleHttp_Client;
use GuzzleHttp\HandlerStack ;
use think\helper\Str;
trait SingletonExTrait
{
protected static $_instances = [];
public static function G($object = null)
{
if (defined('__SINGLETONEX_REPALACER')) {
$callback = __SINGLETONEX_REPALACER;
return ($callback)(static::class, $object);
}
//fwrite(STDOUT,"SINGLETON ". static::class ."\n");
if ($object) {
self::$_instances[static::class] = $object;
return $object;
}
$me = self::$_instances[static::class] ?? null;
if (null === $me) {
$me = new static();
self::$_instances[static::class] = $me;
}
return $me;
}
}
class MyService
{
use SingletonExTrait;
public $options =[
'endpoint' => 'https://api.topthink.com/',
'app_code' => '???',
'default_http_method'=>'GET',
];
public function init(array $options, object $context = null)
{
$this->options = array_intersect_key(array_replace_recursive($this->options, $options) ?? [], $this->options);
}
protected function do_call($method, $args)
{
$http_method = $this->get_http_method($method);
$uri = $this->get_uri($method);
$parameters = $this->get_parameters($method, $args);
try {
return $this->do_request($this->options['endpoint'], $this->options['app_code'], $http_method, $uri, $parameters);
} catch (RequestException $e) {
if ($e->hasResponse()) {
$response = $e->getResponse();
throw new Exception($response->getStatusCode(), $response->getBody()->getContents());
}
throw $e;
}
}
protected function get_http_method($method)
{
return $this->options['default_http_method'];
}
protected function get_uri($method)
{
//TODO 移除 Str 的引用
return $this->uri_map[$method] ?? Str::snake(class_basename($method), "/");
}
protected function get_parameters($method, $args)
{
$reflect = new \ReflectionMethod($this, $method);
$ret=[];
$params = $reflect->getParameters();
foreach ($args as $i => $v) {
if($v === null){
continue;
}
$name = $params[$i]->getName();
$ret[$name] = $v;
}
return $ret;
}
protected function do_request($endpoint, $app_code, $method, $uri, $parameters)
{
$body =[];
if ($method == 'GET') {
$options['query'] = $data;
} else {
$options['body'] = $data;
}
$handleStack = HandlerStack::create(null);
$client = new GuzzleHttp_Client([
'base_uri' => $endpoint,
'handler' => $handleStack,
'headers' => [
'Authorization' => "AppCode ".$app_code,
'User-Agent' => "ThinkApi/1.0",
],
'verify' => false,
]);
$response = $client->request($method, $uri, $options);
$result = $response->getBody()->getContents();
if (false !== strpos($response->getHeaderLine('Content-Type'), 'application/json')) {
$result = json_decode($result, true);
}
return $result;
}
}
// 这个类用脚本生成,省略更多
class CalendarService extends MyService
{
/**
* 查日历
*
* @access public
* @param mixed $year_month
*/
public function calendarMonth($yearMonth = null){
return $this->do_call(__FUNCTION__, func_get_args());
}
}
class LocalCalendarService extends CalendarService
{
public function calendarMonth($yearMonth = null){
return ['这是模拟数据'];
}
}
//*
// 这里是核心工程师老大的干活
//CalendarService::G(LocalCalendarService::G()); // 线上出问题的时候切这句
$options=['app_code'=>'???'];
CalendarService::G()->init($options);
下面是小弟写
$result = CalendarService::G()->calendarMonth('2019-1');
var_dump($result);
return;
//*/
$client = new Client('???');
$result = $client->calendarMonth()->withYearMonth('2019-1')->request();
var_dump($result);
```
php调用txt接口,PHP 如何更优雅地调用 API 接口相关推荐
- 唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口
一.唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口接口可获取到宝贝标题,宝贝价格,宝贝ID,宝贝图片,优惠价,宝贝链接,卖家昵称,店铺所在 ...
- 京东推荐商品列表API接口-(item_recommend-获取推荐商品列表API接口),京东API接口
一.京东推荐商品列表API接口-(item_recommend-获取推荐商品列表API接口),京东API接口代码对接如下: 1.请求参数: 名称 类型 必须 描述 key String 是 调用key ...
- 京东商品评论API接口-(item_review-获得JD商品评论API接口),京东API接口
一.京东商品评论API接口-(item_review-获得JD商品评论API接口),京东API接口代码对接如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GE ...
- tmall.product.schema.add(淘宝天猫商品发布接口),淘宝商品发布API接口,tmall.product.schema.get产品信息获取接口
tmall.product.schema.add(淘宝天猫商品发布接口),淘宝商品发布API接口,可以用于店铺发货,店铺订单详情获取,店铺明文接口,订单同步,订单推送等业务,下面是一套完整的订单发货的 ...
- 1688搜索新品API接口-(按关键字搜索新品数据API接口)
一.1688搜索新品API接口-(按关键字搜索新品数据API接口)代码如下: 1.公共参数: 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) secre ...
- 亚马逊商品详情API接口-(item_get-获得AMAZON商品详情接口),亚马逊详情API接口
一.亚马逊商品详情API接口-(item_get-获得AMAZON商品详情接口),亚马逊详情API接口可以获取到商品价格,商品库存,商品销量,商品ID,商品图片,商品sku属性,sku详情,sku图片 ...
- 1688搜索工厂数据API接口-(item_search_factory-按关键字搜索工厂数据API接口)
一.1688搜索工厂数据API接口-(item_search_factory-按关键字搜索工厂数据API接口)代码对接如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key ...
- 微店商品详情API接口(item_get-获得微店商品详情API接口),微店API接口
一.微店商品详情API接口(item_get-获得微店商品详情API接口),微店API接口代码对接可以获取到宝贝ID,宝贝标题,价格,掌柜名称,库存,最小购买数,宝贝链接,宝贝图片,品牌名称,商品详情 ...
- tmall.product.schema.get( 淘宝天猫商品发布API接口) ,淘宝商品发布API接口,淘宝店铺上传API接口,oAuth2.0店铺上传API接口
tmall.product.schema.get( 淘宝天猫商品发布API接口) ,淘宝商品发布API接口,淘宝店铺上传API接口,oAuth2.0店铺上传API接口,可适用于店铺上传商品,店铺发货, ...
最新文章
- PL/SQL三种集合类型的比较
- 用产品思路建设中台,这走得通吗?| 白话中台
- Python基础之最大公约数与最小公倍数
- Kubernetes 1.6新特性
- 简单实现实时输入网页,参考vue底层实现
- 给你安利一款国产良心软件uTools
- Media Player Classic - HC 源代码分析 1:整体结构
- 【学术新闻】强强联合!Papers with Code携手arXiv,上传论文、提交代码一步到位...
- Windows下安装elastic search
- ruby 基础知识(一)
- 西门子、安川、三菱伺服技术完全精通系列丛书!
- jackson java用法_Jackson 使用方法总结
- 【OpenCV笔记】光流法之金字塔Lucas-Kanade
- Python Numpy的数组array和矩阵matrix
- 用opencv检测convexity defects
- MySQL学习笔记(六)索引类别
- 怎么提取伴奏?有什么实用的提取软件?
- 直播平台接入美颜SDK已成刚需,它将带来哪些影响?
- 国标GB/T28181视频流媒体网页无插件直播服务4G摄像头无插件直播国标GB28181协议注册、心跳和注销协议说明介绍
- 一文读尽“数字化咨询”