yuepay / yuepay-laravel
粤收付(cnyepay)支付 SDK for Laravel,支持支付宝/微信/QQ钱包等多种支付方式
v2.0.0
2026-08-10 09:14 UTC
Requires
- php: >=7.3
- ext-openssl: *
- illuminate/http: ^6.0|^7.0|^8.0
- illuminate/support: ^6.0|^7.0|^8.0
README
基于粤收付开放平台接口文档封装的 Laravel 支付 SDK,支持支付宝、微信等多种支付方式。
环境要求
- PHP >= 7.3
- Laravel >= 6.0
- ext-openssl 扩展
安装
方式一:Composer(推荐)
composer require yuepay/yuepay-laravel
方式二:手动引入
将本目录放置到 Laravel 项目的 packages/yuepay 下,然后在 composer.json 中添加:
{
"autoload": {
"psr-4": {
"YuePay\\": "packages/yuepay/src/"
}
}
}
执行:
composer dump-autoload
配置
1. 发布配置文件
php artisan vendor:publish --tag=yuepay-config
这会将配置文件发布到 config/yuepay.php。
2. 生成 RSA 密钥对
# 生成 RSA 私钥(PKCS#8 格式,2048位) openssl genrsa -out private.pem 2048 # 从私钥生成公钥 openssl rsa -in private.pem -pubout -out public.pem
- 商户私钥:用于生成签名,必须妥善保管,不可泄露
- 商户公钥:提供给粤收付平台配置
- 粤收付平台公钥:从粤收付商户后台获取,用于回调验签
3. 配置 .env
# 粤收付配置 YUEPAY_BASE_URL=https://open.cnyepay.com YUEPAY_MCH_NO=你的商户号 YUEPAY_APP_ID=你的应用ID YUEPAY_PRIVATE_KEY=你的RSA私钥(可填路径或直接内容) YUEPAY_PLATFORM_PUBLIC_KEY=粤收付平台公钥(可填路径或直接内容) YUEPAY_NOTIFY_URL=https://your-domain.com/api/yuepay/notify YUEPAY_DEFAULT_WAY_CODE=ALI_JSAPI
4. 注册 ServiceProvider(手动安装时需要)
在 config/app.php 中添加:
'providers' => [ // ... YuePay\YuePayServiceProvider::class, ], 'aliases' => [ // ... 'YuePay' => YuePay\YuePay::class, ],
5. 注册路由
在 routes/api.php 中添加:
Route::prefix('api')->group(base_path('vendor/yuepay/routes/web.php'));
使用方法
基本调用
use YuePay\YuePay; // 统一下单(微信JSAPI支付) $result = YuePay::unifiedOrder([ 'mchOrderNo' => 'ORDER' . time(), 'wayCode' => 'WX_JSAPI', 'amount' => 100, // 单位:分(1元) 'subject' => '测试商品', 'body' => '测试商品描述', 'openid' => '用户的微信openid', 'returnUrl' => 'https://your-domain.com/return', ]); // 统一下单(支付宝扫码支付) $result = YuePay::unifiedOrder([ 'mchOrderNo' => 'ORDER' . time(), 'wayCode' => 'ALI_QR', 'amount' => 100, 'subject' => '测试商品', ]); // 查询支付订单 $result = YuePay::queryOrder(mchOrderNo: 'ORDER123456'); // 关闭订单 $result = YuePay::closeOrder(mchOrderNo: 'ORDER123456'); // 申请退款 $result = YuePay::refund([ 'mchOrderNo' => 'ORDER123456', 'mchRefundNo' => 'REFUND' . time(), 'refundAmount' => 100, 'refundReason' => '用户申请退款', ]); // 查询退款 $result = YuePay::queryRefund(mchRefundNo: 'REFUND123456');
依赖注入方式
use YuePay\YuePayService; class PaymentController extends Controller { public function __construct(private YuePayService $yuePay) {} public function pay() { $result = $this->yuePay->unifiedOrder([...]); } }
处理回调通知
SDK 已内置回调处理控制器,路由为 POST /api/yuepay/notify。
回调处理逻辑在 YuePay\Http\Controllers\YuePayController::notify() 方法中,请根据业务需求修改。
关键步骤:
- 验签(SDK自动完成)
- 校验金额一致性
- 更新本地订单状态
- 返回
success
支付方式 wayCode 一览
| wayCode | 说明 | 必填参数 |
|---|---|---|
| ALI_JSAPI | 支付宝JSAPI(小程序) | openid |
| ALI_QR | 支付宝二维码 | - |
| ALI_BAR | 支付宝条码(付款码) | authCode |
| ALI_WAP | 支付宝H5 | - |
| ALI_APP | 支付宝APP | - |
| WX_JSAPI | 微信JSAPI(小程序) | openid |
| WX_NATIVE | 微信扫码 | - |
| WX_BAR | 微信条码(付款码) | authCode |
| WX_H5 | 微信H5 | - |
| WX_APP | 微信APP | - |
目录结构
yuepay-sdk/
├── config/
│ └── yuepay.php # 配置文件
├── src/
│ ├── YuePayServiceProvider.php # 服务提供者
│ ├── YuePay.php # Facade 门面
│ ├── YuePayService.php # 核心支付服务
│ ├── Support/
│ │ ├── SignHelper.php # RSA2签名/验签工具
│ │ └── HttpClient.php # HTTP请求客户端
│ ├── Callback/
│ │ └── CallbackHandler.php # 回调通知处理器
│ ├── Exceptions/
│ │ └── YuePayException.php # 异常类
│ └── Http/
│ └── Controllers/
│ └── YuePayController.php # 示例控制器
├── routes/
│ └── web.php # 路由文件
├── keys/ # RSA密钥存放目录
├── composer.json
└── README.md
签名说明
SDK 使用 RSA2(SHA256withRSA)签名算法,流程如下:
- 将所有非空参数按参数名 ASCII 码字典序排序
- 拼接为
key1=value1&key2=value2...格式(sign 不参与签名) - 使用商户 RSA 私钥进行 SHA256withRSA 签名
- 签名结果转换为 Base64 编码
注意:与微信支付不同,粤收付 RSA2 签名时拼接字符串末尾不需要添加 API 密钥。
常见问题
Q: 签名失败?
- 检查私钥格式是否为 PKCS#8
- 确认私钥是否包含完整头尾标识(
-----BEGIN PRIVATE KEY-----) - 支持纯 Base64 字符串(SDK会自动格式化)
Q: 验签失败?
- 确认使用的是粤收付平台公钥(不是商户公钥)
- 检查平台公钥是否正确获取
Q: 回调收不到通知?
- 确认
notifyUrl为公网可访问的 HTTPS 地址 - 检查服务器防火墙是否放行
- 回调路由需排除 CSRF 中间件(SDK已处理)
License
MIT