printu-co/printu-co-laravel-payu

集成 SDK PayU 到 laravel

dev-master 2019-10-04 18:06 UTC

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

注意:字段 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 之前编写测试并检查代码