xehub / xepay
Requires
- laravel/framework: ^5.5
- paypal/rest-api-sdk-php: ^1.14
This package is not auto-updated.
Last update: 2024-09-19 23:10:14 UTC
README
前置工作
要使用 payment 包,必须在 PaymentManager 中注册一个实现了 Order 接口的订单对象 OrderProvider。
use use Xehub\Xepay\OrderProvider; class CustomOrderProvider implements OrderProvider { ... }
class AppServiceProvider extends ServiceProvider { public function register() { $this->app->resolving('xepay', function ($payment, $app) { $payment->provider('custom', function () { return new CustomOrderProvider(); }); }); } }
并且指定已注册的 provider 到 config 中。
return [ 'default' => [ 'provider' => 'custom', ], ... ];
要在 config 中指定要使用的 pg,在 enables 项中写入。如果使用 2 个以上的 pg,则使用逗号(,)分隔。
'enables' => env('PAYMENT_ENABLES', 'paypal'),
此外,需要将操作所需的脚本文件发布到 public 目录。
# php artisan vendor:publish --tag=payment
如果包已更新,请添加 --force 选项来运行。
如果 PaymentServiceProvider 没有自动发现,请将 service provider 注册到 config/app.php 中。
添加支付页面功能
在支付页面底部插入如 @paying($order) 的 blade 指示符。传递的 $order 是订单对象(Order)。
可以使用 1 个以上的支付方式。使用 app('xepay')->getMethods() 可以在页面上显示和处理支付方式。
现在,当用户在支付页面上点击支付按钮(或表单提交)时,应在事件监听器中调用支付操作。
<script> $('.btn-submit').click(function () { xepay.exec(method); }); </script>
在执行方法时,请传递用户选择的支付方式代码。
如果完成支付时需要其他信息,则将这些值作为第二个参数传递。
xepay.exec(method, params);
在支付功能的 js 中,已嵌入一些事件。如果需要在请求中处理,可以通过这些事件执行任务。例如,为了避免重复请求,在执行 exec() 之前禁用支付按钮的情况,可以在支付表单请求完成后通过 prepare.complete 事件来解除禁用。
xepay.listen('prepare.complete', function () { $('.btn-submit').prop('disabled', false); });
支付后处理
在向订单对象(Order)请求成功处理之前,将调用 Paid 事件。将需要处理的任务注册为事件进行处理。
use Xehub\Xepay\Events\Paid; Event::listen(Paid::class, function($event) { // 필요한 비지니스 로직을 작성합니다. });
在成功处理订单对象后,通过 OrderProvider::success 处理需要执行的代码。
页面跳转
可以指定支付成功或失败后要跳转到的页面。
app('xepay.redirect')->completing(function ($order) { return route('complete', $order->getOrderId()); });
如果需要在跳转时执行额外的操作,如会话处理等,可以直接返回 RedirectResponse 来处理。
app('xepay.redirect')->completing(function ($order) { return redirect()->route('complete', $order->getOrderId()) ->with('message', 'payment complete!'); });
在支付失败时,请使用 failing 方法。