digital-threads / liqpay
Laravel LiqPay 客户端
1.0.1
2021-06-17 12:05 UTC
Requires
- php: ^7.3|^8.0
- laravel/framework: >=6.20.12
- liqpay/liqpay: ^1.2
Requires (Dev)
- fakerphp/faker: ^1.14
- friendsofphp/php-cs-fixer: ^3.0
- mockery/mockery: ^1.4
- orchestra/testbench: ^6
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.6
- vimeo/psalm: ^4.7
This package is auto-updated.
Last update: 2024-09-17 19:52:31 UTC
README
安装
运行 composer require digital-threads/liqpay
配置
LiqPay 客户端需要在您的环境中设置以下配置
或者您也可以发布包配置并指定自己的边界
php artisan vendor:publish --provider='DigitalThreads\LiqPay\LiqPayServiceProvider' --tag='config'
使用
在指定了包配置之后,您可以使用 DigitalThreads\LiqPay\LiqPay
门面对象进行支付操作。
检查
为了渲染 LiqPay 表单,您可能需要从后端 API 安全地接收以下 Checkout 编码表单参数,如下所示
PaymentController.php
<?php namespace App\Http\Controllers\Api; use App\Models\Order; use DigitalThreads\LiqPay\LiqPay; use App\Http\Controllers\Controller; class PaymentController extends Controller { public function checkout($orderId) { $order = Order::findOrFail($orderId); $prerequisites = LiqPay::getCheckoutFormPrerequisites([ 'amount' => $order->amount, 'description' => $order->description, 'order_id' => $order->id, 'result_url' => route('web.checkout'), 'server_url' => route('api.liqpay_callback'), // The url that wil be used for order webhook notification 'currency' => $order->currency, // Optional. If not set - default currency will be used. ]); return new JsonResponse([ 'action' => $prerequisites->getAction(), 'data' => $prerequisites->getData(), 'signature' => $prerequisites->getSignature(), ]); } }
api.php
<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\Api\PaymentController; Route::get('{order}/checkout', [PaymentController::class, 'checkout']);
然后您可以使用您喜欢的前端框架(如 VueJS)渲染表单
<template> <form method="POST" action="{{ form.action }}" accept-charset="utf-8"> <input type="hidden" name="data" value="{{ form.data }}" /> <input type="hidden" name="signature" value="{{ form.signature }}" /> <input type="image" src="//static.liqpay.ua/buttons/p1en.radius.png" name="btn_text" /> </form> </template> <script> export default { data() { return { orderId: 1, form: { action: null, data: null, signature: null, }, }; }, async mounted() { const response = await fetch(`{your-api-url}/${this.orderId}/checkout`); this.form = response.json(); }, }; </script>
回调验证
在支付处理过程中,您的 API 将接收到一个 回调 POST 请求,其 URL 已在 PaymentController
中的 server_url
中指定。您需要注册回调处理路由,以便根据请求中的数据更新订单状态。
PaymentController.php
<?php namespace App\Http\Controllers\Api; use App\Models\Order; use Illuminate\Http\Request; use DigitalThreads\LiqPay\LiqPay; use App\Http\Controllers\Controller; use DigitalThreads\LiqPay\Exceptions\InvalidCallbackRequestException; class PaymentController extends Controller { public function checkout($orderId) { $order = Order::findOrFail($orderId); $prerequisites = LiqPay::getCheckoutFormPrerequisites([ 'amount' => $order->amount, 'description' => $order->description, 'order_id' => $order->id, 'result_url' => route('web.checkout'), 'server_url' => route('api.liqpay_callback'), // The url that wil be used for order webhook notification 'currency' => $order->currency, // Optional. If not set - default currency will be used. ]); return new JsonResponse([ 'action' => $prerequisites->getAction(), 'data' => $prerequisites->getData(), 'signature' => $prerequisites->getSignature(), ]); } public function callback(Request $request) { try { $payload = LiqPay::validateCallback($request); $order = Order::findOrFail($payload->get('order_id')); $order->update(['status' => $payload->get('status')]); } catch (InvalidCallbackRequestException $e) { return new JsonResponse(['error' => $e->getMessage()], 400); } } }
api.php
<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\Api\PaymentController; Route::get('{order}/checkout', [PaymentController::class, 'checkout']); Route::post('callback', [PaymentController::class, 'callback'])->name('liqpay_callback');
LiqPay::validateCallback
方法将负责请求验证和签名检查,并返回一个 LiqPayPaymentDetailsInterface
实例,使用它来提取订单详情数据以满足您的需求。