TSM
快速开始
嗯,这是一个php
的SDK
首先,我们需要加载tsm文件,ThirdServiceManager.php文件需要开发者自行加载,其他的文件tsm会自动加载。
require ThirdServiceManager.php
tsm的使用非常简单,配置好的tsm只需要两行代码就可以调用我们需要的第三方服务。
$service = \TSM\ThirdServiceManager::instance('serviceName');
$response = $service->execute('apiName', $params);
serviceName是配置文件中服务配置的key值,用来标记一个服务的配置。
apiName是配置文件中api配置的key值,用来标记一个api的配置。
$params是一个array,里面存放着此api需要的请求参数。
下一小节来聊下配置文件如何编写。
配置文件说明
配置文件是一个array
return array (
'zhifubao' => array(),
'weixin' => array(),
// ..
);
其中 zhifubao
就是 serviceName
,每一个服务的相关配置放在对应 array
里面。
'zhifubao' => array(
'service' => array(),
'apis' => array(),
),
'weixin' => array(),
// ..
);
在单个服务的配置里面有两个 array
,其中 service
表示服务的通用配置,apis
表示服务中各个api的配置
'zhifubao' => array(
'service' => array(
'dev' => array(
// 网关地址
'host' => 'http://dev.example.com:10099',
// 签名salt值
'signKey' => '9efa342d13496cce8da058dc5830096d',
),
'test' => array(
// 网关地址
'host' => 'http://test.example.com:10099',
// 签名salt值
'signKey' => '9efa342d13496cce8da058dc5830096d',
),
'pdtest' => array(
// 网关地址
'host' => 'http://pdtest.example.com',
// 签名salt值
'signKey' => '9efa342d13496cce8da058dc5830096d',
),
'product' => array(
// 网关地址
'host' => 'http://www.example.com',
// 签名salt值
'signKey' => '9efa342d13496cce8da058dc5830096d',
),
),
'apis' => array(
/*
* 每一个key表示api别名, 在调用第三方服务时需要用到
*/
'detail' => array(
// api
'path' => '/zeus/qxd/resale/order/detail',
// 请求方法, 支持值: 'get', 'post'
'method' => 'get',
// 接口请求重试次数, 不能是负数, 默认3次
'retryCount' => '4',
),
'check' => array(
'path' => '/zeus/qxd/resale/order/detail/check',
'method' => 'get',
),
'confirm' => array(
'path' => '/zeus/qxd/resale/order/detail/confirm',
'method' => 'get',
),
),
),
'weixin' => array(),
// ..
);
service
中,通过键值标记不同的开发环境,具体我们会在环境切换
小结讨论。每个键值包含若干值。
键值 | 说明 | 默认值 |
---|---|---|
host | 服务地址 | null |
开发者也可以自定义其他配置,通过 BaseService
中的 getCommonConfig
方法获取,具体我们在 第三方服务管理扩展
讨论。
apis
中,包含了此服务所有api的配置。通过键值表示此api的别名,array的内容包含若干值。
键值 | 说明 | 默认值 |
---|---|---|
path | 接口path | null |
method | 请求方式 | post |
retryCount | 请求次数 | 3 |
开发者也可以自定义其他配置,通过 BaseService
中的 getApiConfig
方法获取,具体我们在 第三方服务管理扩展
讨论。
这样,一个第三方服务就对接完成了
环境切换
对接第三方服务,一般都会有两三套环境。在不同的环境上,地址以及签名salt值等都会有差别。在配置中可以通过 service
下的key值来切换不同的环境。
'zhifubao' => array(
'service' => array(
'dev' => array(
// 网关地址
'host' => 'http://dev.example.com:10099',
// 签名salt值
'signKey' => '9efa342d13496cce8da058dc5830096d',
),
'test' => array(
// 网关地址
'host' => 'http://test.example.com:10099',
// 签名salt值
'signKey' => '9efa342d13496cce8da058dc5830096d',
),
'pdtest' => array(
// 网关地址
'host' => 'http://pdtest.example.com',
// 签名salt值
'signKey' => '9efa342d13496cce8da058dc5830096d',
),
'product' => array(
// 网关地址
'host' => 'http://www.example.com',
// 签名salt值
'signKey' => '9efa342d13496cce8da058dc5830096d',
),
),
'apis' => array(
// ..
),
),
'weixin' => array(),
// ..
);
诸如dev、test之类的值,可以通过配置文件中的APP_ENV来指定。
define(APP_ENV, 'dev');
tsm会根据APP_ENV来切换环境。
推荐使用如下方式来指定APP_ENV的值,在php.ini中自定义一个tsm.env的值,通过get_cfg_var函数来获取这个值。这样可以更灵活的指定环境而不需要修改代码。
define(APP_ENV, get_cfg_var(tsm.env)); // tsm.env 为php.ini中增加的一个自定义的配置值
第三方服务管理扩展
访问第三方接口一般需要数据签名或者数据加解密来认证,tsm
提供了灵活的方式来扩展程序。
在 tsm
的services文件中,新建一个名为、***Service.php的文件并完成一个同名的类,此类需要继承BaseService。
注意
***
要跟配置文件中的拼写serviceName
保持一致并且开头字母大写,例如配置的serviceName为 ‘example’,那么新建的文件名字为ExampleService.php,类名为class ExampleServcie
开发者可以重写 generateParams
方法以及 handleResponse
方法。
在 generateParams
方法中,可以进行数据发送前的数据重新组装,签名计算,数据加密等操作。
在 handleResponse
方法中,可以进行数据返回后的数据验签,数据解密等操作。
另外,BaseService提供了如下不可重写的方法来读取通用配置和api配置。
方法名称 | 参数 | 返回值 | 作用 |
---|---|---|---|
getCommonConfig | 配置key | 配置值 | 获取自定义的通用配置 |
getApiConfig | api key | api配置值(array) | 获取api相关配置数组 |
基本
项目介绍
对接第三方接口SDK
tsm, Third Services Manager 第三方服务管理器, 通过配置的方式管理多个第三方服务,适用于较为复杂的多系统交互场景
软件架构
软件架构说明
安装教程
- 下载tsm包到项目任意目录
- require ThirdServiceManager.php文件
使用说明
- 复制配置文件
config.default.php
为config.php
, 添加第三方服务的配置信息 - 使用配置中的第三方服务key为参数实例化一个tsm
- 调用tsm的execute方法来调用需要的第三方服务api, 参数为配置的api的key和api要求的参数
- 可以参照example.php来使用tsm