maksa988 / laravel-wayforpay
Laravel 的 WayForPay 付款
Requires
- php: ^7.2
- guzzlehttp/guzzle: ~6.2|~7.0
- illuminate/support: ^5.5|^6.0|^7.0|^8.0
- wayforpay/php-sdk: ^1.0
Requires (Dev)
- orchestra/testbench: ^3.5|^4.0|^5.0|^6.0
- phpunit/phpunit: ^6.0|^7.0|^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-13 12:18:05 UTC
README
通过此 Laravel 框架包(Laravel)接受 WayForPay(《wayforpay.com》)的付款。
- 只需添加两个回调即可接收付款
Laravel >= 5.5.*, PHP >= 7.2
安装
使用 composer 需要此包。
composer require "maksa988/laravel-wayforpay"
如果您不使用自动发现,请将 ServiceProvider 添加到 config/app.php
中的 providers 数组
Maksa988\WayForPay\WayForPayServiceProvider::class,
将 WayForPay
门面添加到您的门面数组
'WayForPay' => Maksa988\WayForPay\Facades\WayForPay::class,
使用发布命令将包配置复制到您的本地配置
php artisan vendor:publish --provider="Maksa988\WayForPay\WayForPayServiceProvider"
配置
发布配置文件后,请编辑 config/wayforpay.php
中的配置文件。
- 在 wayforpay.com 上创建一个账户和商家
- 添加您的项目,复制
merchantAccount
、merchantAccount
、merchantSecretKey
参数并将它们粘贴到config/wayforpay.php
- 配置发布后,编辑
config/wayforpay.php
用法
此包使用官方 WayForPay SDK for PHP。您可以在官方 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 \Maksa988\WayForPay\Domain\Client('John', 'Doe', 'johndoe@gmail.com'); $products = new \Maksa988\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 \Maksa988\WayForPay\Domain\Card('5276999765600381', '05', '2021', '237', 'JOHN DOU'); $cardToken = new \Maksa988\WayForPay\Domain\Card('1aa11aaa-1111-11aa-a1a1-0000a00a00aa');
您可以使用 \Maksa988\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. 检查状态
检查状态请求用于在 orderReference 上检查付款状态。
官方文档 - https://wiki.wayforpay.com/en/view/852117
check()
方法允许您使用订单 ID 发送请求以检查您的订单状态。
$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
如果商户交易安全类型为 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()
方法。
在第一个参数中,您应该放置请求数据数组或 Arrayble
类。在第二个参数中,您应该放置在支付成功时被调用的 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(); }); }
更新日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全性
如果您发现任何与安全相关的问题,请通过发送电子邮件到 maksa988ua@gmail.com 来联系我,而不是使用问题跟踪器。
鸣谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。