欢迎使用拉卡拉PHP SDK

好拓客 1周前 ( 11-09 17:50 ) 47

为了帮助开发者快速接入拉卡拉开放平台,拉卡拉提供了PHP SDK, 为各个合作伙伴的技术人员封装了请求的签名和响应的验签,简化了系统的开发工作。

image.png

获取PHP SDK

开发语言资源下载环境要求
PHP 版资源PHP SDK
^7.0 || ^8.0

Lakala PHP SDK说明

流程说明

Lakala SDK与拉卡拉开放平台交互处理流程如下:

image.png

针对以上处理流程

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中。


857ffa90032c0c1473d3ac72ea0726a6_png.png

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: 联系已对接的售前同事。


The End