alexo / laravel-payu
使用 PayU latam 官方 SDK 为 Laravel 提供的流畅接口。
Requires
- php: >=5.5.9
Requires (Dev)
- phpunit/phpunit: ^9.1
- vlucas/phpdotenv: ^4.1
This package is not auto-updated.
Last update: 2024-10-01 11:00:01 UTC
README
简介
LaravelPayU 为基于 Laravel 框架的项目提供了一个简单的接口来使用 PayU 的 SDK。该项目使用了 PayU SDK,但不是 PayU 的官方项目。
安装和配置
使用 composer 安装包
composer require alexo/laravel-payu
然后在 config/app.php 中将 ServiceProvider 添加到 providers 数组中
Alexo\LaravelPayU\LaravelPayUServiceProvider::class,
发布配置以包含 PayU 账户信息
php artisan vendor:publish
在 .env 文件或直接在配置文件 config/payu.php 中包含账户信息和设置
APP_ENV=local PAYU_ON_TESTING=true PAYU_MERCHANT_ID=your-merchant-id PAYU_API_LOGIN=your-api-login PAYU_API_KEY=your-api-key PAYU_ACCOUNT_ID=your-account-id PAYU_COUNTRY=your-country-ref: AR/BR/CO/CL/MX/PA/PE/US PSE_REDIRECT_URL=your-pse-redirect-url
API 使用
此版本仅包含单一支付和查询接口。如果需要使用令牌化和定期支付,请直接使用 PayU SDK。
Ping 和 银行
要查询平台可用性,可以在指定的控制器中使用 doPing 方法
<?php namespace App\Http\Controllers; use Alexo\LaravelPayU\LaravelPayU; class PaymentsController extends Controller { LaravelPayU::doPing(function($response) { $code = $response->code; // ... revisar el codigo de respuesta }, function($error) { // ... Manejo de errores PayUException });
使用 getPSEBanks 方法进行银行查询,该方法也接受一个响应函数和一个错误函数
<?php namespace App\Http\Controllers; use Alexo\LaravelPayU\LaravelPayU; class PaymentsController extends Controller { LaravelPayU::getPSEBanks(function($banks) { //... Usar datos de bancos foreach($banks as $bank) { $bankCode = $bank->pseCode; } }, function($error) { // ... Manejo de errores PayUException, InvalidArgument });
单一支付
允许通过以下方式使用 trait 进行订单支付
在订单模型中(例如 Order.php),应包括
<?php namespace App; use Alexo\LaravelPayU\Payable; use Illuminate\Database\Eloquent\Model; class Order extends Model { use Payable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'reference', 'payu_order_id', 'transaction_id', 'state', 'value', 'user_id' ]; }
注意:字段 reference、payu_order_id、transaction_id 是进行后续查询所必需的。
配置好模型后,在指定的支付控制器中,可以使用 payWith 方法进行查询和支付捕获(相当于 SDK 中的 doAuthorizationAndCapture)
<?php $order = Order::find($id); $data = [ \PayUParameters::DESCRIPTION => 'Payment cc test', \PayUParameters::IP_ADDRESS => '127.0.0.1', \PayUParameters::CURRENCY => 'COP', \PayUParameters::CREDIT_CARD_NUMBER => '378282246310005', \PayUParameters::CREDIT_CARD_EXPIRATION_DATE => '2017/02', \PayUParameters::CREDIT_CARD_SECURITY_CODE => '1234', \PayUParameters::INSTALLMENTS_NUMBER => 1 ... ]; $order->payWith($data, function($response, $order) { if ($response->code == 'SUCCESS') { $order->update([ 'payu_order_id' => $response->transactionResponse->orderId, 'transaction_id' => $response->transactionResponse->transactionId ]); // ... El resto de acciones sobre la orden } else { //... El código de respuesta no fue exitoso } }, function($error) { // ... Manejo de errores PayUException, InvalidArgument });
payWith 方法接收三个参数
- 使用 "" 前的类名 PayUParameters,以便使用常量,因为 SDK 不使用命名空间和自动加载。
- 一个接收查询响应的函数。
- 一个接收由验证或支付错误引发的异常的函数。
还可以使用 authorizeWith 和 captureWith 方法进行支付授权和订单捕获,但请注意,这些方法仅适用于 巴西。
查看 支付 SDK 文档。
查询
为了查询,在订单模型中添加 Searchable trait,如下所示
<?php namespace App; use Alexo\LaravelPayU\Payable; use Alexo\LaravelPayU\Searchable; use Illuminate\Database\Eloquent\Model; class Order extends Model { use Payable, Searchable; }
然后,在指定的查询控制器中,可以使用 Payu 分配的 ID、我们提供的参考或事务 ID 进行查询
<?php $order = Order::find($id); $order->searchById(function($response, $order) { // ... Usar la información de respuesta }, function($error) { // ... Manejo de errores PayUException, InvalidArgument }); $order->searchByReference(function($response, $order) { // ... Usar la información de respuesta }, function($error) { // ... Manejo de errores PayUException, InvalidArgument }); $order->searchByTransaction(function($response, $order) { // ... Usar la información de respuesta }, function($error) { // ... Manejo de errores PayUException, InvalidArgument });
searchById、searchByReference 和 searchByTransaction 方法接受两个参数
- 一个接收查询响应的函数。
- 一个接收由验证或支付错误引发的异常的函数。
查看 查询 SDK 文档。
测试
安装包的依赖关系。在包的根目录中创建一个 .env 文件,包含针对哥伦比亚的测试配置,因为这是唯一提供三种支付方式的国家。查看 PayU 网站 上的信息,然后执行测试
phpunit
错误与贡献
对于错误,请直接在 GitHub issues 中提出,或发送电子邮件至 alejandrogutierrezacosta@gmail.com。如果您想为项目做出贡献,请按照贡献指南发送调整内容。