sonix / laravel-wayforpay
为 Laravel 的 WayForPay 付款
Requires
- php: ^8.0.2
- guzzlehttp/guzzle: ^7.2
- illuminate/support: ^7.0|^8.0|^9.0
- wayforpay/php-sdk: ^1.0
Requires (Dev)
- orchestra/testbench: 3.5|^4.0|^5.0|^6.0
- phpunit/phpunit: ^7.0|^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-10 13:06:54 UTC
README
此仓库是从原始 https://github.com/maksa988/laravel-wayforpay 分叉而来,由于原始项目长时间未更新,我决定分叉并独立工作,以继续支持该应用程序。
WayForPay 付款网关的 Laravel 付款处理器包
使用此 Laravel 框架包 (Laravel) 通过 WayForPay (wayforpay.com) 接受付款。
- 只需添加两个回调即可接收付款
Laravel >= 8.0.2
安装
使用 composer 安装此包。
composer require "sonix/laravel-wayforpay"
如果您不使用自动发现,请将 ServiceProvider 添加到 config/app.php
中的 providers 数组
Sonix\WayForPay\WayForPayServiceProvider::class,
将 WayForPay
面向对象添加到您的面向对象数组中
'WayForPay' => Sonix\WayForPay\Facades\WayForPay::class,
使用发布命令将包配置复制到您的本地配置
php artisan vendor:publish --provider="Sonix\WayForPay\WayForPayServiceProvider"
配置
发布配置文件后,请编辑 config/wayforpay.php
中的配置文件。
- 在 wayforpay.com 上创建账户和商户
- 添加您的项目,复制
merchantAccount
、merchantAccount
和merchantSecretKey
参数,并将它们粘贴到config/wayforpay.php
- 配置发布后,编辑
config/wayforpay.php
用法
此包使用官方的 WayForPay SDK。您可以在官方 SDK 仓库中找到此包使用的类和内容的完整描述和内容 - wayforpay/php-sdk
1. 购买
购买请求用于在受保护的 WayForPay 网站上与客户端进行支付。
官方文档 - https://wiki.wayforpay.com/en/view/852102
方法 purchase()
允许您为小部件或表单准备数据。您还可以获取包含数据的数组以构建您的表单。
$order_id = time(); // Payment`s order ID $amount = 100; // Payment`s amount $client = new \Sonix\WayForPay\Domain\Client('John', 'Doe', 'johndoe@gmail.com'); $products = new \Sonix\WayForPay\Collection\ProductCollection([ new \WayForPay\SDK\Domain\Product('iPhone 12', 10, 1), ]); // $data = WayForPay::purchase($order_id, $amount, $client, $products)->getData(); // Array of data for using to create your own form. $form = WayForPay::purchase($order_id, $amount, $client, $products)->getAsString($submitText = 'Pay', $buttonClass = 'btn btn-primary'); // Get html form as string
您可以在调用 purchase
方法后使用 getWidget
方法获取小部件的 JS 代码 (https://wiki.wayforpay.com/en/view/852091)。
$widget = WayForPay::purchase($order_id, $amount, $client, $products)->getWidget($callbackJsFunction = null, $buttonText = 'Pay', $buttonClass = 'btn btn-primary'); // Get html form as string
2. 充值
充值请求用于快速支付,一步完成。它是在单阶段模式范围内执行的。
请求处理的结果是从客户端的卡中提取货币资产。
官方文档 - https://wiki.wayforpay.com/en/view/852194
方法 charge()
允许您发送充值请求并获得响应对象。
$card = new \Sonix\WayForPay\Domain\Card('5276999765600381', '05', '2021', '237', 'JOHN DOU'); $cardToken = new \Sonix\WayForPay\Domain\Card('1aa11aaa-1111-11aa-a1a1-0000a00a00aa');
您可以使用 \Sonix\WayForPay\Domain\Card::class
代替 WayForPay\SDK\Domain\Card
和或 WayForPay\SDK\Domain\CardToken
。此类通过一个类简化了输入卡和卡令牌。当您只放入第一个参数时,此卡被定义为卡令牌。如果您放入所有参数,则此卡被定义为银行卡。
$response = WayForPay::charge($order_id, $amount, $client, $products, $card); $response = WayForPay::charge($order_id, $amount, $client, $products, $cardToken); echo "Status: ". $response->getTransaction()->getStatus();
3. 检查状态
检查状态请求用于检查订单引用上的支付状态。
官方文档 - https://wiki.wayforpay.com/en/view/852117
方法 check()
允许您使用订单号发送检查订单状态的请求。
$order = WayForPay::check($order_id)->getOrder(); echo "Status: ". $order->getStatus();
4. 退款
退款请求用于资产退款或取消支付。
官方文档 - https://wiki.wayforpay.com/en/view/852115
方法 refund()
允许您发送退款请求。
WayForPay::refund($order_id, $amount, $currency, $comment)->getTransactionStatus();
5. 创建发票
当前API允许为客户开具商品/服务的支付发票。
官方文档 - https://wiki.wayforpay.com/en/view/608996852
方法 createInvoice()
允许您创建发票。
$invoice = WayForpay::createInvoice($order_id, $amount, $client, $products); $url = $invoice->getInvoiceUrl(); $qrCode = $invoice->getQrCode();
6. 完成3DS
如果 merchantTransactionSecureTtype=3DS,系统最初会检查卡片是否参与3D Secure程序。如果卡片支持3D Secure验证,Wayforpay系统将返回客户端身份验证的参数。商户必须使用这些参数将客户端转到发卡行的认证URL。验证会话有效的时间为10分钟。如果在10分钟内没有获得 COMPLETE_3DS,系统将取消交易,视为失败。
$response = WayForPay::complete3ds($authTicket, $d3Md, $d3Pares); $response->getTransaction();
7. 处理支付
您可以使用WayForPay的服务URL处理支付过程。通过Laravel的控制器和此包,您可以处理支付。
要处理来自WayForPay的请求,您应该创建控制器和操作。在操作中,您应该使用方法 handleServiceUrl()
。
在第一个参数中,您应该放置请求数据的数组或 Arrayable
类。在第二个参数中,您应该放置一个 Closure
,它在支付成功时被调用,并将传递两个参数:Transaction
对象和用于创建成功响应的 Closure
。
// Controller action public function handle(Request $request) { return WayForPay::handleServiceUrl($request, function (\WayForPay\SDK\Domain\Transaction $transaction, $success) { if($transaction->getReason()->isOK()) { // Payment confirmation process and etc... return $success(); } return "Error: ". $transaction->getReason()->getMessage(); }); }
更新日志
有关最近更改的更多信息,请参阅更新日志。
贡献
有关详细信息,请参阅贡献指南。
安全
如果您发现任何与安全相关的问题,请通过电子邮件发送给我 maksa988ua@gmail.com,而不是使用问题跟踪器。
鸣谢
许可协议
MIT许可(MIT)。有关更多信息,请参阅许可文件。