欢迎使用拉卡拉PHP SDK
为了帮助开发者快速接入拉卡拉开放平台,拉卡拉提供了PHP SDK, 为各个合作伙伴的技术人员封装了请求的签名和响应的验签,简化了系统的开发工作。
获取PHP SDK
| 开发语言 | 资源下载 | 环境要求 |
| PHP 版资源 | PHP SDK | ^7.0 || ^8.0 |
Lakala PHP SDK说明
流程说明
Lakala SDK与拉卡拉开放平台交互处理流程如下:
针对以上处理流程
1: 左侧为客户主动发起的Request-Response的流程:拉卡拉PHP SDK封装请求加密(若需要)、加签,返回解签、解密。
2: 右侧为拉卡拉开放平台发起的通知的流程:拉卡拉PHPSDK也封装了解析处理通知报文的类以及标准返回内容。
目录结构
├─example/ │ ├─RSAKeys/ │ │ └─DEV/ │ ├─v2/ │ └─v3/ ├─v2/ │ └─src/ │ └─Api │ └─V2LakalaApi.php │ ├─Model/ │ ├─Util/ │ └─.lklopensdk.env │ └─V2Configuration.php ├─v3/ │ ├─DEV/ │ └─src/ │ └─Api/ ├─LakalaNotifyApi.php │ └─LakalaApi.php │ ├─Model/ │ └─Util/ │ └─.lklopensdk.env │ └─Configuration.php └─composer.json └─README.md复制
拉卡拉开放平台的接口包含两种风格,部分接口风格为V2(驼峰)、部分接口风格为V3(下划线,基于openAPI规范),为此,PHPSDK封装了V2、V3两种接口的API,开发者可以根据所使用接口的风格选择不同API类。
目录或者文件 | 说明 |
example/ | 该目录包含了V2、V3风格代码示例【推荐读】。 |
v2/ | 该目录下包含了V2风格api以及相关Model。 |
V2LakalaApi.php | 该文件是V2风格Api主类。 |
V2Configuration.php | V2风格的配置类,读取配置文件(.lklopensdk.env) |
v3/ | 该目录下包含了V3风格api以及相关Model。 其中包含一些交易相关预先分装的类。 |
LakalaNotifyApi | 该文件是用来处理拉卡拉回调通知返回 |
LakalaApi.php | 该文件是V3风格Api主类。 |
Configuration.php | v3风格的配置类,读取配置文件(.lklopensdk.env) |
.lklopensdk.env | 配置文件,其中包含了appid、证书、密钥等配置。 |
README.md | 该文件说明了如何使用拉卡拉开放平台的PHP-SDK的使用方法。【必读】 |
composer.json | 该文件包含了php版本说明 |
调用示例代码说明
V3接口调用
require_once '../../vendor/autoload.php';$config = new \Lakala\OpenAPISDK\V3\Configuration();
$api = new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config);$request = new \Lakala\OpenAPISDK\V3\Model\ModelRequest();
// 请求字段
$request->setReqData([
'merchant_no' => '822290070111135',
'term_no' => '29034705',
'out_trade_no' => date('YmdHis', time()),
'trade_no' => '',
]);
$response = $api->tradeApi('/api/v3/labs/query/tradequery', $request);复制require_once '../../vendor/autoload.php';
V2接口调用
require_once '../../vendor/autoload.php';
require_once '../../vendor/autoload.php';
方法说明
通过观察V2、V3的代码示例中出现两个重要的方法。
| 方法名 | 说明 |
| tradeApi | 1:接口路径: 2:Request: |
| apiWithBody | 1:接口路径: 2:通用字符串:可以JSON格式字符串、若是加密就是加密后的字符串 |
重点类说明
| 类名 | 说明 |
Configuration; V2Configuration; | V2、V3配置类,其中构造函数配置文件地址(默认是随SDK包装的.lklsdksdk.env),配置文件中 |
LakalaApi V2LakalaApi | V2、V3主类, 构造方法需要有两个: 1. config 2. 加解密策略枚举类: const NONE = 'none'; // 普通无加解密:请求为明文,返回也是明文 const REQUEST = 'request'; // 只请求加密,返回为明文 const RESPONSE = 'response';// 请求明文、响应需解密 const BOTH = 'both'; // 请求需加密、返回需解密复制 注意:客户对接的时候,需要根据接口文档的加解密说明,选择以上策略 |
交易预封装类
针对V3风格的接口,拉卡拉预先封装了交易相关的几个V3接口,包括主扫、被扫、查询、退款,具体使用可参考example中。
FAQ&Tips(常见问题以及建议)
问题1:若同时对接V2,V3两类接口,是否需要分别使用V2LakalaApi、LakalaApi?
答案1:是的。需要分别初始化。
问题2:若同时对接加密或者不加密接口,如何初始化V2LakalaApi、LakalaApi?
答案2:
V2接口:
分别初始化不加解密策略的api对象
$api1 = new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::NONE); $api2= new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::REQUEST); $api3= new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::RESPONSE); $api4= new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::BOTH);复制
V3接口:
$api1 = new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::NONE); $api2= new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::REQUEST); $api3= new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::RESPONSE); $api4= new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::BOTH);复制
问题3:若同时对接加密或者不加密接口,如何初始化V2LakalaApi、LakalaApi?
答案3:
V2接口:
分别初始化不加解密策略的api对象
$api1 = new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::NONE); $api2= new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::REQUEST); $api3= new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::RESPONSE); $api4= new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::BOTH);复制
V3接口:
$api1 = new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::NONE); $api2= new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::REQUEST); $api3= new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::RESPONSE); $api4= new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::BOTH);复制
问题4:若同时对接加密或者不加密接口,如何初始化V2LakalaApi、LakalaApi?
答案4:
V2接口:
分别初始化不加解密策略的api对象
$api1 = new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::NONE); $api2= new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::REQUEST); $api3= new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::RESPONSE); $api4= new \Lakala\OpenAPISDK\V2\Api\V2LakalaApi($config,V2EncryptMode::BOTH);复制
V3接口:
$api1 = new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::NONE); $api2= new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::REQUEST); $api3= new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::RESPONSE); $api4= new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config,EncryptMode::BOTH);复制
问题5:若需要改变appid等配置信息,如何操作?
答案5:
1:通过修改默认配置文件;
2:可以修改V2Configuration、Configuration的值。
问题6:若需要改变appid等配置信息,如何操作?
答案6:
1:通过修改默认配置文件;
2:可以修改V2Configuration、Configuration的值。
问题7:若需要改变appid等配置信息,如何操作?
答案7:
1:通过修改默认配置文件;
2:可以修改V2Configuration、Configuration的值。
问题8:当请求报文字段需要扩充的时候,如何操作?
答案8:
1: 若字段是预封装的交易类接口,可以等新的SDK版本发布。
2:客户开发者可以通过扩展预封装的Request的字段,如V3接口
$request->setReqData([
'merchant_no' => '822290070111135',
'term_no' => '29034705',
'out_trade_no' => date('YmdHis', time()),
'trade_no' => '',
]);复制或继续原有预封装的请求类,如:
class QueryTradequeryRequestExt extends \Lakala\OpenAPISDK\V3\Model\RelationRefundRequest implements \JsonSerializable
{
protected $ext1;
public function setExt1($ext1)
{
$this->ext1 = $ext1;
return $this;
}3:客户可以使用直接原始JSON,并修改JSON的内容,并用LakalaApi.apiWithBody、V2LakalaApi.apiWithBody进行请求调用。
问题9:当返回报文字段需要扩充的时候,如何操作?
答案9:
1: 若字段是预封装的交易类接口,可以等新的SDK版本发布;
2: 直接使用返回对象的原始文本(V2ModelResponse.getOriginalText()、ModelResponse.getOriginalText()),并对其进行json反序列化。
问题10:返回对象是否支持使用自己的Response?
答案10:
V2接口V2LakalaApi:方法.tradeApi、apiWithBody的支持输入$returnType;
V3接口LakalaApi:方法LakalaApi.tradeApi、LakalaApi.apiWithBody的支持输入$returnType
可传入自己的returnType。
问题11:若需要反馈问题或者提供建议,是否有渠道。
答案11:
1: 联系已对接的售前同事。



