printu-co / printu-co-laravel-payu
集成 SDK PayU 到 laravel
Requires
- php: >=5.5.9
- nesbot/carbon: ~2.0
Requires (Dev)
- phpunit/phpunit: ~4.0
- vlucas/phpdotenv: ~2.0
This package is auto-updated.
Last update: 2024-09-05 05:05:46 UTC
README
简介
LaravelPayU 为基于 Laravel 框架的项目提供了一个简单的接口来使用 PayU SDK。该项目使用了 Payu SDK,但不是 PayU 的官方项目。
安装和配置
使用 composer 安装包
composer require alexo/laravel-payu
然后在 config/app.php 中的 providers 数组中包含 ServiceProvider
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。如想为项目贡献,请按照贡献指南发送修改