为银联商务UMS支付接口提供简单、统一、可靠的PHP SDK。
- ✅ 自助签约模块 - 商户入网、信息变更、状态查询
- ✅ 新购物车支付 - 微信公众号、小程序、H5、APP支付
- ✅ 多种认证方式 - OPEN-ACCESS-TOKEN、OPEN-BODY-SIG、OPEN-FORM-PARAM
- ✅ 加密签名支持 - 3DES、SHA-256、HMAC-SHA256
- ✅ 开箱即用 - 默认Symfony HttpClient和Monolog,支持自定义
- ✅ 类型安全 - PHP 8.4+,完整类型提示,PHPStan Level 8+
- ✅ 测试完善 - 单元测试、集成测试、功能测试
- PHP >= 8.4
- Composer
composer require lonquan/easy-umspayuse EasyUmsPay\UmsPayClient;
use EasyUmsPay\Config\Environment;
// 使用数组配置(最简单)
$client = new UmsPayClient([
'env' => Environment::TEST,
'log_level' => 'debug',
'self_contract' => [
'accesser_id' => 'your_accesser_id',
'sign_key' => '123456789012345678901234',
'iv' => '12345678',
],
'shopping_cart' => [
'app_id' => 'your_app_id',
'app_key' => 'your_app_key',
'auth_method' => 'OPEN-BODY-SIG',
'merchant_no' => 'your_merchant_no',
'terminal_no' => 'your_terminal_no',
],
]);use EasyUmsPay\SelfContract\Enums\DocumentType;
use EasyUmsPay\SelfContract\Enums\MerchantType;
// 上传证照
$response = $client->selfContract()->uploadImage(
DocumentType::BUSINESS_LICENSE,
file_get_contents('license.jpg')
);
$picId = $response->getPicId();
// 提交资料(敏感字段自动加密)
$response = $client->selfContract()->uploadData([
'merchantName' => '测试商户',
'merchantType' => MerchantType::ENTERPRISE->value,
'licenseNo' => '91110000123456789X',
'legalPerson' => '张三',
'legalIdCard' => '110101199001011234', // 自动3DES加密
'contactPhone' => '13800138000', // 自动3DES加密
'bankAccount' => '6222021234567890123', // 自动3DES加密
'licensePicId' => $picId,
]);
$tradeNo = $response->getTradeNo();
// 查询状态
$response = $client->selfContract()->queryStatus($tradeNo);
if ($response->getApplyStatus()->isSuccess()) {
echo "入网成功!商户号: {$response->getMerchantNo()}";
}// 微信公众号支付
$response = $client->shoppingCart()->webPay()->pay([
'mchntOrderId' => 'ORDER' . time(),
'amount' => 100,
'subject' => '测试商品',
'body' => '商品描述',
'openId' => 'user_openid',
'notifyUrl' => 'https://your-domain.com/notify',
]);
// 微信小程序支付
$response = $client->shoppingCart()->miniPay()->pay([
'mchntOrderId' => 'ORDER' . time(),
'amount' => 100,
'subject' => '测试商品',
'body' => '商品描述',
'openId' => 'user_openid',
'notifyUrl' => 'https://your-domain.com/notify',
]);
// H5支付(移动网页)
$response = $client->shoppingCart()->h5Pay()->pay([
'mchntOrderId' => 'ORDER' . time(),
'amount' => 100,
'subject' => '测试商品',
'body' => '商品描述',
'notifyUrl' => 'https://your-domain.com/notify',
'returnUrl' => 'https://your-domain.com/return',
]);
// APP支付
$response = $client->shoppingCart()->appPay()->pay([
'mchntOrderId' => 'ORDER' . time(),
'amount' => 100,
'subject' => '测试商品',
'body' => '商品描述',
'notifyUrl' => 'https://your-domain.com/notify',
]);# 安装依赖
composer install
# 运行所有测试
composer test
# 运行特定类型的测试
composer test:unit # 单元测试
composer test:integration # 集成测试
composer test:feature # 功能测试
composer test:coverage # 生成覆盖率报告
# 静态分析
composer phpstan # 运行静态分析
composer phpstan:baseline # 生成baseline文件
# 代码格式化
composer check-style # 检查代码风格
composer fix-style # 自动修复代码风格
# 全部检查(风格 + 静态分析 + 测试)
composer check
# 自动修复
composer fix# 使用composer命令(推荐)
composer test # 所有测试
composer test:unit # 单元测试
composer test:integration # 集成测试
composer test:feature # 功能测试
composer test:coverage # 代码覆盖率
# 或直接使用PHPUnit
./vendor/bin/phpunit
./vendor/bin/phpunit --testsuite=Unit
./vendor/bin/phpunit --coverage-html build/coverage欢迎提交Issue和Pull Request!
MIT License. 详见 LICENSE 文件。
感谢银联商务提供的支付服务。
如有问题,请: