alexo/laravel-payu

使用 PayU latam 官方 SDK 为 Laravel 提供的流畅接口。

1.0.8 2020-05-21 22:49 UTC

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'
    ];
}

注意:字段 referencepayu_order_idtransaction_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 不使用命名空间和自动加载。
  • 一个接收查询响应的函数。
  • 一个接收由验证或支付错误引发的异常的函数。

还可以使用 authorizeWithcaptureWith 方法进行支付授权和订单捕获,但请注意,这些方法仅适用于 巴西

查看 支付 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
});

searchByIdsearchByReferencesearchByTransaction 方法接受两个参数

  • 一个接收查询响应的函数。
  • 一个接收由验证或支付错误引发的异常的函数。

查看 查询 SDK 文档。

测试

安装包的依赖关系。在包的根目录中创建一个 .env 文件,包含针对哥伦比亚的测试配置,因为这是唯一提供三种支付方式的国家。查看 PayU 网站 上的信息,然后执行测试

phpunit

错误与贡献

对于错误,请直接在 GitHub issues 中提出,或发送电子邮件至 alejandrogutierrezacosta@gmail.com。如果您想为项目做出贡献,请按照贡献指南发送调整内容。

  • 请使用 psr-1psr-2 的样式建议。

  • 优先编写有利于 Laravel 使用的代码。

  • 在发起 pull request 之前,请编写测试并审查代码。