TSM
项目介绍
对接第三方接口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
快速开始
嗯,这是一个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里面。
return array (
'zhifubao' => array(
'service' => array(),
'apis' => array(),
),
'weixin' => array(),
// ..
);
在单个服务的配置里面有两个array,其中 service 表示服务的通用配置,apis 表示服务中各个api的配置
return array (
'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值来切换不同的环境。
return array (
'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相关配置数组