NewDiverseYouthNightSchool/vendor/lakala/lkl-zf-bs-laop-php-sdk-master
2025-08-01 11:39:06 +08:00
..
2025-08-01 11:39:06 +08:00
2025-08-01 11:39:06 +08:00
2025-08-01 11:39:06 +08:00
2025-08-01 11:39:06 +08:00
2025-08-01 11:39:06 +08:00
2025-08-01 11:39:06 +08:00
2025-08-01 11:39:06 +08:00

拉卡拉开放平台SDK集成

使用 autoload

在 composer.json 文件中,定义自动加载规则:

{
    "autoload": {
        "psr-4": {
            "Lakala\\OpenAPISDK\\V2\\" : "v2/src/",
            "Lakala\\OpenAPISDK\\V3\\" : "v3/src/"
        }
    }
}

运行 dump-autoload

配置好 composer.json 后,运行以下命令生成自动加载文件:

> composer dump-autoload

在项目中引入 autoload 文件

require __DIR__ . '/vendor/autoload.php';

拉卡拉开放平台SDK配置文件

拉卡拉开放平台SDK配置 .lklopensdk.env根据获取的开放平台信息设置

#是否为测试环境
APP_DEBUG = true

[APP]
APP_ID      = OP00000003
SERIAL_NO   = 00dfba8194c41b84cf
# 生产主机地址
HOST_PRO    = https://s2.lakala.com
# 测试主机地址
HOST_TEST   = https://test.wsmsd.cn/sit

[CERT]
SM4_KEY = uIj6CPg1GZAY10dXFfsEAQ==
#相对当前配置文件的路径
MERCHANT_PRIVATE_KEY_PATH   = ../DEV/private_key.pem
LKL_CERTIFICATE_PATH        = ../DEV/lkl-apigw-v2.cer

使用

# 读取配置文件
$config = new \Lakala\OpenAPISDK\V3\Configuration();
# 指定配置相对Configuration.php文件的路径
$config = new \Lakala\OpenAPISDK\V3\Configuration($configfile);
# 或直接传入配置信息path为绝对路径
$config = new \Lakala\OpenAPISDK\V3\Configuration(
    array(
        'app_debug' => true,
        'app_id' => 'OP00000003',
        'serial_no' => '00dfba8194c41b84cf',
        'host_pro' => 'https://s2.lakala.com',
        'host_test' => 'https://test.wsmsd.cn/sit',
        'sm4_key' => 'uIj6CPg1GZAY10dXFfsEAQ==',
        'merchant_private_key_path' => '/path/example/RSAKeys/DEV/OP00000003_private_key.pem',
        'lkl_certificate_path' => '/path/example/RSAKeys/DEV/lkl-apigw-v2.cer'
    )
);

拉卡拉开放平台SDK使用

请求体加密码SM4

/**
 * Api请求体加密码需在第二个参数设置为true,默认为false
 * 
 * @config                 配置文件
 * @useSM4ForRequestBody   请求体是否用sm4加密码
 */
$api = new \Lakala\OpenAPISDK\V3\Api\******Api($config, false);

主扫交易

# 加载配置
$config = new \Lakala\OpenAPISDK\V3\Configuration();
# 多配置文件传递config文件名可是相对于默认配置文件的相对路径../../.lklopensdk2.env
$config2 = new \Lakala\OpenAPISDK\V3\Configuration('.lklopensdk2.env');


$tradeLocationInfo = new \Lakala\OpenAPISDK\V3\Model\TradeLocationInfo('106.37.232.115');

/**
 * 主扫交易
 * 
 * @config                 配置文件
 * @useSM4ForRequestBody   请求体是否用sm4加密码
 */
$api = new \Lakala\OpenAPISDK\V3\Api\TransPreorderApi($config, false);
$request = new \Lakala\OpenAPISDK\V3\Model\TransPreorderRequest();
$request->setOutTradeNo(date('YmdHis', time()));
$request->setTotalAmount('100');
$request->setLocationInfo($tradeLocationInfo);
$request->setNotifyUrl('https://www.test.com/lakela/order/payment/callback.php');
$request->setRemark('5i - 订单支付');

# 支付宝主扫场景
$acc_busi_fields = new \Lakala\OpenAPISDK\V3\Model\TradePreorderAlipayAccBusiFields();
$acc_busi_fields->setUserId('2843132323');

$extend_params = new \Lakala\OpenAPISDK\V3\Model\TradePreorderAlipayExtendParams();
$extend_params->setSysServiceProviderId('12121');

$acc_busi_fields->setExtendParams($extend_params);

$goods_detail = new \Lakala\OpenAPISDK\V3\Model\TradePreorderAlipayGoodsDetail();
$goods_detail->setGoodsId('1042e1e1e');
$goods_detail1 = new \Lakala\OpenAPISDK\V3\Model\TradePreorderAlipayGoodsDetail();
$goods_detail1->setGoodsId('37024242');

$acc_busi_fields->setGoodsDetail([$goods_detail, $goods_detail1]);

$request->setAccBusiFields($acc_busi_fields);

/* 微信主扫场景
$acc_busi_fields = new \Lakala\OpenAPISDK\V3\Model\TradePreorderWechaAccBusiFields();
$acc_busi_fields->setUserId('2843132323');

$detail = new \Lakala\OpenAPISDK\V3\Model\TradePreorderWechaDetail;
$detail->setCostPrice('100');

$goods_detail = new \Lakala\OpenAPISDK\V3\Model\TradePreorderWechaGoodsDetail;
$goods_detail->setGoodsId('3452234');

$detail->setGoodsDetail([$goods_detail]);

$acc_busi_fields->setDetail($detail);

$request->setAccBusiFields($acc_busi_fields);
*/

/* 银联云闪付主扫场景
$acc_busi_fields = new \Lakala\OpenAPISDK\V3\Model\TradePreorderUnionPayAccBusiFields();
$acc_busi_fields->setUserId('2843132323');

$acqAddnDataOrderInfo = new \Lakala\OpenAPISDK\V3\Model\TradePreorderUnionPayAcqAddnDataOrderInfo();
$acqAddnDataOrderInfo->setTitle('标题');

$addnInfo = new \Lakala\OpenAPISDK\V3\Model\TradePreorderUnionPayAddnInfo();
$addnInfo->setLockplan('3');

$riskInfo = new \Lakala\OpenAPISDK\V3\Model\TradePreorderUnionPayRiskInfo();
$riskInfo->setItemNo('3');
$riskInfo->setOrderSource('枚举如下微信APP扫一扫、京东金融、京东');
$riskInfo->setPayCodeId('商户收款码ID可以是商家展业所应用的静态码/动态码所发生的终端设备唯一识别序列号');
$addnInfo->setRiskInfo($riskInfo);

$acqAddnDataOrderInfo->setAddnInfo($addnInfo);

$acc_busi_fields->setAcqAddnDataOrderInfo($acqAddnDataOrderInfo);

$acq_addn_data_goods_info = new \Lakala\OpenAPISDK\V3\Model\TradePreorderUnionPayAcqAddnDataGoodsInfo();
$acq_addn_data_goods_info->setId('1221212');

$acc_busi_fields->setAcqAddnDataGoodsInfo([$acq_addn_data_goods_info]);

$request->setAccBusiFields($acc_busi_fields);
*/

/* 网联小钱包主扫场景
$acc_busi_fields = new \Lakala\OpenAPISDK\V3\Model\TradePreorderNucspayAccBusiFields();
$acc_busi_fields->setNucIssrId('121213313');
$request->setAccBusiFields($acc_busi_fields);
*/

try {
    $response = $api->transPreorder($request);
    print_r($response->getRespData());
    print_r($response->getAccRespFields());
    echo $response->getCode();

    # 响应头信息
    print_r($response->getHeaders());

    # 响应原文
    echo $response->getOriginalText();
} catch (\Lakala\OpenAPISDK\V3\ApiException $e) {
    echo $e->getMessage();
}

被扫交易

# 加载配置
$config = new \Lakala\OpenAPISDK\V3\Configuration();

$tradeLocationInfo = new \Lakala\OpenAPISDK\V3\Model\TradeLocationInfo('106.37.232.115');

/**
 * 被扫交易
 * 
 * @config                 配置文件
 * @useSM4ForRequestBody   请求体是否用sm4加密码
 */
$api = new \Lakala\OpenAPISDK\V3\Api\TransMicropayApi($config, false);
$request = new \Lakala\OpenAPISDK\V3\Model\TransMicropayRequest();
$request->setOutTradeNo(date('YmdHis', time()));
$request->setAuthCode('h30230nd9823f-w20189312f3ri0023jf0239423');
$request->setTotalAmount('100');
$request->setLocationInfo($tradeLocationInfo);

#支付宝被扫场景
$acc_busi_fields = new \Lakala\OpenAPISDK\V3\Model\TradeMicropayAccBusiFields();
$acc_busi_fields->setUserId('2843132323');

$extend_params = new \Lakala\OpenAPISDK\V3\Model\TradeMicropayExtendParams();
$extend_params->setSysServiceProviderId('12121');

$acc_busi_fields->setExtendParams($extend_params);

$goods_detail = new \Lakala\OpenAPISDK\V3\Model\TradeMicropayGoodsDetail();
$goods_detail->setGoodsId('1042e1e1e');
$goods_detail1 = new \Lakala\OpenAPISDK\V3\Model\TradeMicropayGoodsDetail();
$goods_detail1->setGoodsId('37024242');

$acc_busi_fields->setGoodsDetail([$goods_detail, $goods_detail1]);

$request->setAccBusiFields($acc_busi_fields);

# 微信被扫场景
/*
$acc_busi_fields = new \Lakala\OpenAPISDK\V3\Model\TradeMicropayWechaAccBusiFields();
$acc_busi_fields->setUserId('2843132323');

$detail = new \Lakala\OpenAPISDK\V3\Model\TradeMicropayWechaDetail;
$detail->setCostPrice('100');

$goods_detail = new \Lakala\OpenAPISDK\V3\Model\TradeMicropayWechaGoodsDetail;
$goods_detail->setGoodsId('3452234');

$detail->setGoodsDetail([$goods_detail]);

$acc_busi_fields->setDetail($detail);

$request->setAccBusiFields($acc_busi_fields);
*/

try {
    $response = $api->transMicropay($request);
    print_r($response->getRespData());
    print_r($response->getAccRespFields());
    echo $response->getCode();
} catch (\Lakala\OpenAPISDK\V3\ApiException $e) {
    echo $e->getMessage();
}

退款交易

$api = new \Lakala\OpenAPISDK\V3\Api\RelationRefundApi($config);
$request = new \Lakala\OpenAPISDK\V3\Model\RelationRefundRequest();
$request->setOutTradeNo(date('YmdHis', time()));
$request->setRefundAmount('100');
$request->setLocationInfo($tradeLocationInfo);

try {
    $response = $api->relationRefund($request);
    print_r($response->getRespData());
    echo $response->getCode();
} catch (\Lakala\OpenAPISDK\V3\ApiException $e) {
    echo $e->getMessage();
}

查询交易

$api = new \Lakala\OpenAPISDK\V3\Api\QueryTradequeryApi($config);
$request = new \Lakala\OpenAPISDK\V3\Model\QueryTradequeryRequest();
$request->setOutTradeNo(date('YmdHis', time()));

try {
    $response = $api->queryTradequery($request);

    print_r($response->getRespData());
    echo $response->getCode();
} catch (\Lakala\OpenAPISDK\V3\ApiException $e) {
    echo $e->getMessage();
}

通用接口调用 -> 查询交易

$api = new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config);
$request = new \Lakala\OpenAPISDK\V3\Model\ModelRequest();
# 请求字段
$request->setReqData([
    'merchant_no' => $config->getMerchantNo(),
    'term_no' => $config->getTermNo(),
    'out_trade_no' => date('YmdHis', time()),
    'trade_no' => '',
]);

try {
    $response = $api->tradeApi('/api/v3/labs/query/tradequery', $request);
    print_r($response->getRespData());
    echo $response->getCode();
} catch (\Lakala\OpenAPISDK\V3\ApiException $e) {
    echo $e->getMessage();
}

使用报文体接口调用 -> 查询交易

$api = new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config);
try {
    $body = '{"req_time":"20240929033128","version":"3.0","req_data":{"merchant_no":"822290070111135","term_no":"29034705","out_trade_no":"20240929033128","trade_no":""}}';
    $response = $api->apiWithBody('/api/v3/labs/query/tradequery', $body);
    print_r($response->getRespData());
    echo $response->getCode();
} catch (\Lakala\OpenAPISDK\V3\ApiException $e) {
    echo $e->getMessage();
}

$api = new \Lakala\OpenAPISDK\V3\Api\LakalaApi($config);
try {
    $json = new stdClass;
    $json->req_time = "20240929033128";
    $json->version = "3.0";
    $json->req_data = new stdClass;
    $json->req_data->merchant_no = "822290070111135";
    $json->req_data->term_no = "29034705";
    $json->req_data->out_trade_no = "20240929033128";
    $json->req_data->trade_no = "";

    // json格式body
    $response = $api->apiWithBody('/api/v3/labs/query/tradequery', $json);
    print_r($response->getRespData());
    echo $response->getCode();
} catch (\Lakala\OpenAPISDK\V3\ApiException $e) {
    echo $e->getMessage();
}

拉卡拉开放平台回调示例

require_once '../../vendor/autoload.php';

$config = new \Lakala\OpenAPISDK\V3\Configuration();
$api = new \Lakala\OpenAPISDK\V3\Api\LakalaNotifyApi($config);

try {
    $response = $api->notiApi();
    # 响应头信息
    $headers = $response->getHeaders();
    # 响应原文
    $originalText = $response->getOriginalText();

    $obj = json_decode($originalText);

    // 处理$obj中交易状态 -> 可能多次调用

    // 通知拉卡拉业务处理成功
    $api->success();
} catch (\Lakala\OpenAPISDK\V3\ApiException $e) {
    // echo $e->getMessage();
    // 通知拉卡拉发生异常
    $api->fail($e->getMessage());
}

请求参数扩展

$api = new \Lakala\OpenAPISDK\V3\Api\RelationRefundApi($config);

#扩展请求参数类
class QueryTradequeryRequestExt extends \Lakala\OpenAPISDK\V3\Model\RelationRefundRequest implements \JsonSerializable
{
    protected $ext1;

    public function setExt1($ext1)
    {
        $this->ext1 = $ext1;
        return $this;
    }
    
    public function getExt1()
    {
        return $this->ext1;
    }
    

    public function jsonSerialize()
    {
        $js = parent::jsonSerialize();
        $js['ext1'] = $this->ext1;
        return $js;
    }
}

$request = new QueryTradequeryRequestExt();

#扩展请求参数赋值
$request->setExt1('hello ext 1');

try {
    $response = $api->relationRefund($request);
} catch (\Lakala\OpenAPISDK\V3\ApiException $e) {
    echo $e->getMessage();
}

响应字段扩展

#扩展响应字段数类
class RelationRefundResponseExt extends \Lakala\OpenAPISDK\V3\Model\RelationRefundResponse implements \JsonSerializable
{
    protected $ext1;

    public function setExt1($ext1)
    {
        $this->ext1 = $ext1;
        return $this;
    }
    
    public function getExt1()
    {
        return $this->ext1;
    }
}
#扩展请求类
class RelationRefundApiExt extends \Lakala\OpenAPISDK\V3\Api\RelationRefundApi
{
    public function relationRefundExt($relationRefundRequest)
    {
        $resourcePath = '/api/v3/labs/relation/refund';
        return $this->tradeApi($resourcePath, $relationRefundRequest, 'RelationRefundResponseExt');
    }
}

$api = new RelationRefundApiExt($config);

$request = new \Lakala\OpenAPISDK\V3\Model\RelationRefundRequest();

try {
    $response = $api->relationRefundExt($request);
} catch (\Lakala\OpenAPISDK\V3\ApiException $e) {
    echo $e->getMessage();
}