lokir/cpcn-sdk

CPCN Payment SDK for PHP & Laravel

v1.0.0 2025-04-29 05:51 UTC

This package is not auto-updated.

Last update: 2025-04-29 06:52:44 UTC


README

支持 Laravel / PHP 快速集成中金支付接口。
封装了签名、验签、发起请求、回调处理、异常捕获、日志记录功能。

📁 项目目录结构

cpcn-sdk/
├── composer.json
├── config/
│   └── cpcn.php
├── src/
│   ├── Client.php
│   ├── Config.php
│   ├── CpcnServiceProvider.php
│   ├── Helpers/
│   │   ├── ArrayHelper.php
│   │   └── SignHelper.php
│   ├── Service/
│   │   ├── AccountService.php
│   │   ├── PaymentService.php
│   │   └── NotifyService.php
│   ├── Console/
│   │   ├── GenerateOrderCommand.php
│   │   ├── GenerateAccountCommand.php
│   │   └── PingCommand.php
│   ├── Exception/
│   │   ├── CpcnException.php
│   │   ├── SignatureException.php
│   │   ├── GatewayException.php
│   │   └── HttpRequestException.php
├── README.md
└── LICENSE (optional)

⚙️ 安装方式

  1. 手动下载 SDK 项目目录。
  2. 或者在你的 composer.json 中添加本地路径仓库引用:
"repositories": [
  {
    "type": "path",
    "url": "./packages/cpcn-sdk"
  }
],
"require": {
  "cpcn/cpcn-sdk": "*"
}

然后执行:

composer require lokir/cpcn-sdk

🔧 Laravel项目中配置

发布配置文件:

php artisan vendor:publish --provider="CpcnSdk\CpcnServiceProvider"

编辑 config/cpcn.php,配置下列信息:

return [
    'institution_id' => 'your institution id',
    'private_key_path' => storage_path('cpcn/private.pem'),
    'public_key_path' => storage_path('cpcn/public.pem'),
    'gateway_url' => 'https://test.cpcn.com.cn/Gateway/InterfaceII',
    'log_enabled' => true,
];

🚀 使用示例

1. 支付示例

use CpcnSdk\Service\PaymentService;

$paymentService = app(PaymentService::class);

$response = $paymentService->pay([
    'UserID' => '100001',
    'Amount' => 10000,
    'TxSN' => now()->format('YmdHis') . rand(100,999),
]);

dd($response);

2. 回调验签示例

use CpcnSdk\Service\NotifyService;

$notifyService = app(NotifyService::class);

data = $notifyService->verifyNotification(request()->all());

dd($data); // 验签成功返回解析数据

3. Artisan命令

生成支付示例订单:

php artisan cpcn:generate-order

生成开户示例数据:

php artisan cpcn:generate-account

检测接口连通性:

php artisan cpcn:ping

🛠️ 异常捕获示例

符合PSR标准,给出统一的异常捕获:

use CpcnSdk\Exception\CpcnException;

try {
    $paymentService = app(PaymentService::class);
    $response = $paymentService->pay([...]);
} catch (CpcnException $e) {
    logger()->error('CPCN调用异常:' . $e->getMessage());
    return response()->json(['error' => $e->getMessage()], 500);
}

📜 License

MIT License