zjpay / laravel-cpcn
Laravel package for CPCN (中金支付 壹企付) message gateway APIs.
1.0.0
2026-04-16 10:53 UTC
Requires
- php: ^8.0
- guzzlehttp/guzzle: ^7.8
- illuminate/support: ^8.0|^9.0|^10.0|^11.0|^12.0
README
基于《中金支付 报文交换技术规范 第2部分 壹企付 V2.3.4》实现的 Laravel Composer 包。
支持:
TxCode通用调用(覆盖全部接口)- 自动路由到测试/生产、普通网关/文件网关/聚合网关
message + signature协议封装- 请求签名、响应验签(RSA)
- 异步通知验签与解析
1. 安装
composer require zjpay/laravel-cpcn
发布配置:
php artisan vendor:publish --tag=cpcn-config
2. 配置
在 .env 中设置:
CPCN_MODE=test CPCN_INSTITUTION_ID=123456 CPCN_MERCHANT_PRIVATE_KEY_PATH=/path/to/merchant_private.pem CPCN_PLATFORM_PUBLIC_KEY_PATH=/path/to/cpcn_platform_public.pem # 可选:协议细节差异(按你们联调环境调) CPCN_REQUEST_MESSAGE_ENCODING=plain CPCN_RESPONSE_MESSAGE_ENCODING=auto CPCN_SIGNATURE_PAYLOAD=message CPCN_VERIFY_RESPONSE_SIGNATURE=true
3. 通用调用(推荐)
use Zjpay\Cpcn\Facades\Cpcn; $resp = Cpcn::tx('5011', [ 'PaymentNo' => 'P202604160001', 'Amount' => '100', 'SettlementFlag' => '10', // ...按文档拼 Body 字段 ]); if (! $resp->isSystemAccepted()) { throw new RuntimeException($resp->systemCode() . ':' . $resp->systemMessage()); } $body = $resp->body();
4. 常用便捷方法
Cpcn::openAccount([...]); // 4601 Cpcn::bindCard([...]); // 4611 Cpcn::bindCardConfirm([...]); // 4613 Cpcn::queryBindOrOpen([...]); // 4616 Cpcn::recharge([...]); // 4641 Cpcn::withdraw([...]); // 4643 Cpcn::transfer([...]); // 4645 Cpcn::pay([...]); // 5011 Cpcn::payPage([...]); // 5012 Cpcn::refund([...]); // 5021
5. 异步通知验签
use Illuminate\Http\Request; use Zjpay\Cpcn\Facades\Cpcn; Route::post('/cpcn/notify', function (Request $request) { $message = (string) $request->input('message'); $signature = (string) $request->input('signature'); $parsed = Cpcn::parseAndVerifyCallback($message, $signature); // TODO: 业务处理 return response('OK'); });
6. 网关路由策略(默认)
- 文件网关:
4600,4698 - 聚合网关:
5012 - 其余
TxCode:普通网关
可在 config/cpcn.php 的 routing 中调整或新增。
7. 注意事项
- 文档附录明确要求提交
message、signature参数;缺失可能返回240001。 - 返回
2000仅代表系统受理成功,最终业务结果请看Body.ResponseCode/Status等业务字段。 TxSN默认自动生成(17位时间戳前缀 + 随机串,总长 32)。
8. 自动发版与 Packagist 同步
仓库已内置:
.github/workflows/release.yml:push main时按 Conventional Commits 自动语义化发版(GitHub Release + tag).github/workflows/packagist-sync.yml:push main/tag时主动通知 Packagist 更新
请在 GitHub 仓库 Settings -> Secrets and variables -> Actions 添加:
PACKAGIST_USERNAME:你的 Packagist 用户名PACKAGIST_TOKEN:你的 Packagist API Token
建议提交信息遵循 Conventional Commits(决定版本号):
fix:=> patchfeat:=> minorfeat!:或包含BREAKING CHANGE:=> major