This action will force synchronization from yansongda/easyPay, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
该文档为 v2.x 版本,如果您想找 v1.x 版本文档,请点击https://github.com/yansongda/pay/tree/v1.x
注意:v1.x 与 v2.x 版本不兼容
开发了多次支付宝与微信支付后,很自然产生一种反感,惰性又来了,想在网上找相关的轮子,可是一直没有找到一款自己觉得逞心如意的,要么使用起来太难理解,要么文件结构太杂乱,只有自己撸起袖子干了。
!!请先熟悉 支付宝/微信 说明文档!!请具有基本的 debug 能力!!
欢迎 Star,欢迎 PR!
laravel 扩展包请 传送至这里 yii 扩展包请 传送至这里
QQ交流群:690027516
php5 请使用 v1.x 版本https://github.com/yansongda/pay/tree/v1.x
method | 描述 |
---|---|
web | 电脑支付 |
wap | 手机网站支付 |
app | APP 支付 |
pos | 刷卡支付 |
scan | 扫码支付 |
transfer | 帐户转账 |
mini | 小程序支付 |
method | 描述 |
---|---|
mp | 公众号支付 |
miniapp | 小程序支付 |
wap | H5 支付 |
scan | 扫码支付 |
pos | 刷卡支付 |
app | APP 支付 |
transfer | 企业付款 |
redpack | 普通红包 |
groupRedpack | 分裂红包 |
所有网关均支持以下方法
find(array/string $order)
说明:查找订单接口
参数:$order
为 string
类型时,请传入系统订单号,对应支付宝或微信中的 out_trade_no
; array
类型时,参数请参考支付宝或微信官方文档。
返回:查询成功,返回 Yansongda\Supports\Collection
实例,可以通过 $colletion->xxx
或 $collection['xxx']
访问服务器返回的数据。
异常:GatewayException
或 InvalidSignException
refund(array $order)
说明:退款接口
参数:$order
数组格式,退款参数。
返回:退款成功,返回 Yansongda\Supports\Collection
实例,可以通过 $colletion->xxx
或 $collection['xxx']
访问服务器返回的数据。
异常:GatewayException
或 InvalidSignException
cancel(array/string $order)
说明:取消订单接口
参数:$order
为 string
类型时,请传入系统订单号,对应支付宝或微信中的 out_trade_no
; array
类型时,参数请参考支付宝或微信官方文档。
返回:取消成功,返回 Yansongda\Supports\Collection
实例,可以通过 $colletion->xxx
或 $collection['xxx']
访问服务器返回的数据。
异常:GatewayException
或 InvalidSignException
close(array/string $order)
说明:关闭订单接口
参数:$order
为 string
类型时,请传入系统订单号,对应支付宝或微信中的 out_trade_no
; array
类型时,参数请参考支付宝或微信官方文档。
返回:关闭成功,返回 Yansongda\Supports\Collection
实例,可以通过 $colletion->xxx
或 $collection['xxx']
访问服务器返回的数据。
异常:GatewayException
或 InvalidSignException
verify()
说明:验证服务器返回消息是否合法
返回:验证成功,返回 Yansongda\Supports\Collection
实例,可以通过 $colletion->xxx
或 $collection['xxx']
访问服务器返回的数据。
异常:GatewayException
或 InvalidSignException
PAYMETHOD(array $order)
说明:进行支付;具体支付方法名称请参考「支持的支付方法」一栏
返回:成功,返回 Yansongda\Supports\Collection
实例,可以通过 $colletion->xxx
或 $collection['xxx']
访问服务器返回的数据或 Symfony\Component\HttpFoundation\Response
实例,可通过 return $response->send()
(laravel 框架中直接 return $response
) 返回,具体请参考文档。
异常:GatewayException
或 InvalidSignException
composer require yansongda/pay -vvv
<?php
namespace App\Http\Controllers;
use Yansongda\Pay\Pay;
use Yansongda\Pay\Log;
class PayController
{
protected $config = [
'app_id' => '2016082000295641',
'notify_url' => 'http://yansongda.cn/notify.php',
'return_url' => 'http://yansongda.cn/return.php',
'ali_public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWJKrQ6SWvS6niI+4vEVZiYfjkCfLQfoFI2nCp9ZLDS42QtiL4Ccyx8scgc3nhVwmVRte8f57TFvGhvJD0upT4O5O/lRxmTjechXAorirVdAODpOu0mFfQV9y/T9o9hHnU+VmO5spoVb3umqpq6D/Pt8p25Yk852/w01VTIczrXC4QlrbOEe3sr1E9auoC7rgYjjCO6lZUIDjX/oBmNXZxhRDrYx4Yf5X7y8FRBFvygIE2FgxV4Yw+SL3QAa2m5MLcbusJpxOml9YVQfP8iSurx41PvvXUMo49JG3BDVernaCYXQCoUJv9fJwbnfZd7J5YByC+5KM4sblJTq7bXZWQIDAQAB',
// 加密方式: **RSA2**
'private_key' => 'MIIEpAIBAAKCAQEAs6+F2leOgOrvj9jTeDhb5q46GewOjqLBlGSs/bVL4Z3fMr3p+Q1Tux/6uogeVi/eHd84xvQdfpZ87A1SfoWnEGH5z15yorccxSOwWUI+q8gz51IWqjgZxhWKe31BxNZ+prnQpyeMBtE25fXp5nQZ/pftgePyUUvUZRcAUisswntobDQKbwx28VCXw5XB2A+lvYEvxmMv/QexYjwKK4M54j435TuC3UctZbnuynSPpOmCu45ZhEYXd4YMsGMdZE5/077ZU1aU7wx/gk07PiHImEOCDkzqsFo0Buc/knGcdOiUDvm2hn2y1XvwjyFOThsqCsQYi4JmwZdRa8kvOf57nwIDAQABAoIBAQCw5QCqln4VTrTvcW+msB1ReX57nJgsNfDLbV2dG8mLYQemBa9833DqDK6iynTLNq69y88ylose33o2TVtEccGp8Dqluv6yUAED14G6LexS43KtrXPgugAtsXE253ZDGUNwUggnN1i0MW2RcMqHdQ9ORDWvJUCeZj/AEafgPN8AyiLrZeL07jJz/uaRfAuNqkImCVIarKUX3HBCjl9TpuoMjcMhz/MsOmQ0agtCatO1eoH1sqv5Odvxb1i59c8Hvq/mGEXyRuoiDo05SE6IyXYXr84/Nf2xvVNHNQA6kTckj8shSi+HGM4mO1Y4Pbb7XcnxNkT0Inn6oJMSiy56P+CpAoGBAO1O+5FE1ZuVGuLb48cY+0lHCD+nhSBd66B5FrxgPYCkFOQWR7pWyfNDBlmO3SSooQ8TQXA25blrkDxzOAEGX57EPiipXr/hy5e+WNoukpy09rsO1TMsvC+v0FXLvZ+TIAkqfnYBgaT56ku7yZ8aFGMwdCPL7WJYAwUIcZX8wZ3dAoGBAMHWplAqhe4bfkGOEEpfs6VvEQxCqYMYVyR65K0rI1LiDZn6Ij8fdVtwMjGKFSZZTspmsqnbbuCE/VTyDzF4NpAxdm3cBtZACv1Lpu2Om+aTzhK2PI6WTDVTKAJBYegXaahBCqVbSxieR62IWtmOMjggTtAKWZ1P5LQcRwdkaB2rAoGAWnAPT318Kp7YcDx8whOzMGnxqtCc24jvk2iSUZgb2Dqv+3zCOTF6JUsV0Guxu5bISoZ8GdfSFKf5gBAo97sGFeuUBMsHYPkcLehM1FmLZk1Q+ljcx3P1A/ds3kWXLolTXCrlpvNMBSN5NwOKAyhdPK/qkvnUrfX8sJ5XK2H4J8ECgYAGIZ0HIiE0Y+g9eJnpUFelXvsCEUW9YNK4065SD/BBGedmPHRC3OLgbo8X5A9BNEf6vP7fwpIiRfKhcjqqzOuk6fueA/yvYD04v+Da2MzzoS8+hkcqF3T3pta4I4tORRdRfCUzD80zTSZlRc/h286Y2eTETd+By1onnFFe2X01mwKBgQDaxo4PBcLL2OyVT5DoXiIdTCJ8KNZL9+kV1aiBuOWxnRgkDjPngslzNa1bK+klGgJNYDbQqohKNn1HeFX3mYNfCUpuSnD2Yag53Dd/1DLO+NxzwvTu4D6DCUnMMMBVaF42ig31Bs0jI3JQZVqeeFzSET8fkoFopJf3G6UXlrIEAQ==',
// 使用公钥证书模式,请配置下面两个参数,同时修改ali_public_key为以.crt结尾的支付宝公钥证书路径,如(./cert/alipayCertPublicKey_RSA2.crt)
// 'app_cert_public_key' => './cert/appCertPublicKey.crt', //应用公钥证书路径
// 'alipay_root_cert' => './cert/alipayRootCert.crt', //支付宝根证书路径
'log' => [ // optional
'file' => './logs/alipay.log',
'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
'type' => 'single', // optional, 可选 daily.
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
],
'http' => [ // optional
'timeout' => 5.0,
'connect_timeout' => 5.0,
// 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
],
'mode' => 'dev', // optional,设置此参数,将进入沙箱模式
];
public function index()
{
$order = [
'out_trade_no' => time(),
'total_amount' => '1',
'subject' => 'test subject - 测试',
];
$alipay = Pay::alipay($this->config)->web($order);
return $alipay->send();// laravel 框架中请直接 `return $alipay`
}
public function return()
{
$data = Pay::alipay($this->config)->verify(); // 是的,验签就这么简单!
// 订单号:$data->out_trade_no
// 支付宝交易号:$data->trade_no
// 订单总金额:$data->total_amount
}
public function notify()
{
$alipay = Pay::alipay($this->config);
try{
$data = $alipay->verify(); // 是的,验签就这么简单!
// 请自行对 trade_status 进行判断及其它逻辑进行判断,在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。
// 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
// 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
// 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email);
// 4、验证app_id是否为该商户本身。
// 5、其它业务逻辑情况
Log::debug('Alipay notify', $data->all());
} catch (\Exception $e) {
// $e->getMessage();
}
return $alipay->success()->send();// laravel 框架中请直接 `return $alipay->success()`
}
}
<?php
namespace App\Http\Controllers;
use Yansongda\Pay\Pay;
use Yansongda\Pay\Log;
class PayController
{
protected $config = [
'appid' => 'wxb3fxxxxxxxxxxx', // APP APPID
'app_id' => 'wxb3fxxxxxxxxxxx', // 公众号 APPID
'miniapp_id' => 'wxb3fxxxxxxxxxxx', // 小程序 APPID
'mch_id' => '14577xxxx',
'key' => 'mF2suE9sU6Mk1Cxxxxxxxxxxx',
'notify_url' => 'http://yanda.net.cn/notify.php',
'cert_client' => './cert/apiclient_cert.pem', // optional,退款等情况时用到
'cert_key' => './cert/apiclient_key.pem',// optional,退款等情况时用到
'log' => [ // optional
'file' => './logs/wechat.log',
'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
'type' => 'single', // optional, 可选 daily.
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
],
'http' => [ // optional
'timeout' => 5.0,
'connect_timeout' => 5.0,
// 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
],
'mode' => 'dev', // optional, dev/hk;当为 `hk` 时,为香港 gateway。
];
public function index()
{
$order = [
'out_trade_no' => time(),
'total_fee' => '1', // **单位:分**
'body' => 'test body - 测试',
'openid' => 'onkVf1FjWS5SBIixxxxxxx',
];
$pay = Pay::wechat($this->config)->mp($order);
// $pay->appId
// $pay->timeStamp
// $pay->nonceStr
// $pay->package
// $pay->signType
}
public function notify()
{
$pay = Pay::wechat($this->config);
try{
$data = $pay->verify(); // 是的,验签就这么简单!
Log::debug('Wechat notify', $data->all());
} catch (\Exception $e) {
// $e->getMessage();
}
return $pay->success()->send();// laravel 框架中请直接 `return $pay->success()`
}
}
如果在调用相关支付网关 API 时有错误产生,会抛出 GatewayException
,InvalidSignException
错误,可以通过 $e->getMessage()
查看,同时,也可通过 $e->raw
查看调用 API 后返回的原始数据,该值为数组格式。
ali_public_key
, private_key
等。由于测试及使用环境的限制,本项目中只开发了「支付宝」和「微信支付」的相关支付网关。
如果您有其它支付网关的需求,或者发现本项目中需要改进的代码,欢迎 Fork 并提交 PR!
MIT
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。