toopago/payu

使用 PayU latam 官方 SDK 的流畅接口为 Laravel 开发。

1.0.0 2020-02-04 19:58 UTC

This package is not auto-updated.

Last update: 2024-09-24 13:45:51 UTC


README

N|Solid

简介

LaravelPayU 为基于 Laravel 框架的项目提供了一个简单易用的接口来使用 PayU SDK。

已正确测试于 Laravel 版本 6.14。

此项目使用 Payu SDK,但不是 PayU 的官方项目。

安装和配置

使用 composer 安装此包

composer require toopago/payu

然后在 config/app.php 文件中的 providers 数组中包含 ServiceProvider

TooPago\Payu\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

PAYU_BUYER_EMAIL="developer@toopago.io"

PAYU_PAYER_NAME="TooPago"

PAYU_PAYER_DNI=xxxxxxxx

API 使用

此版本仅包含现金支付、信用卡支付、tokenization 和查询的接口。如果您需要使用定期支付或其他功能,请直接使用 PayU SDK。

Ping

要查询平台的可用性,可以在指定的控制器中使用 doPing 方法。

<?php

namespace App\Http\Controllers;

use TooPago\Payu\LaravelPayU;

class PaymentsController extends Controller
{
    LaravelPayU::doPing(function($response) {
        $code = $response->code;
        // ... revisar el codigo de respuesta
    }, function($error) {
     // ... Manejo de errores PayUException
    });

信用卡支付

允许以下方式使用 VISA||MASTERCARD||AMEX 进行支付

在此方法中,需要发送包含卡片数据、金额、国家和货币的数组

<?php

namespace App;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use TooPago\Payu\Payments;

class MyController extends Controller
{

    public function createChargeCard()
    {
        //PAYER_NAME: APPROVED||PENDING||REJECTED
        //PAYMENT_METHOD : VISA||MASTERCARD||AMEX
        //CREDIT_CARD_EXPIRATION_DATE : YYYY/MM
        //INSTALLMENTS_NUMBER : 1
        $sendData = [
            'REFERENCE_CODE' => 'referencia_' . uniqid(),
            'DESCRIPTION' => 'Deposito de $100',
            'VALUE' => 100,
            'BUYER_NAME' => 'Juan Lopez',
            'PAYER_NAME' => 'PENDING',
            'CREDIT_CARD_NUMBER' => '5491234534511478',
            'CREDIT_CARD_EXPIRATION_DATE' => '2023/05',
            'CREDIT_CARD_SECURITY_CODE' => '897',
            'PAYMENT_METHOD' => 'MASTERCARD',
            'INSTALLMENTS_NUMBER' => '1',
            'CURRENCY' => 'MXN',
            'COUNTRY' => 'MX',
        ];
        $Payu = new Payments();
        $Payu->CreatePaymentCash($sendData , function($response) {
            //**Respuesta Exitosa pero Pendiente**
            //$response->state
            //$response->orderId
            //$response->transactionId
            
            //**Respuesta Exitosa**
            //$response->state
            //$response->orderId
            //$response->transactionId
            //$response->trazabilityCode
            //$response->authorizationCode
        }, function($error) {
            //**Respuesta Erronea**
            //$error->state
            //$error->message
            //$error->responseCode //Opcional
            //$error->responseMessage //Opcional
        });
    }
    
}

注意:所有字段都是必填的。PAYER_NAME 字段在生产环境中应包含付款人的姓名,如果是测试环境,可以是上述任一状态

现金支付

允许以下方式使用 OXXO||SEVEN_ELEVEN||OTHERS_CASH_MX 进行支付:在此方法中,需要发送包含买家数据、金额、国家和货币的数组

<?php

namespace App;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use TooPago\Payu\Payments;


class MyController extends Controller
{

    public function createChargeCash()
    {
        //PAYMENT_METHOD: OXXO||SEVEN_ELEVEN||OTHERS_CASH_MX
        $sendData = [
            'REFERENCE_CODE' => 'referencia_' . uniqid(),
            'DESCRIPTION' => 'Deposito de $100',
            'VALUE' => 100,
            'PAYMENT_METHOD' => 'OXXO',
            'BUYER_NAME' => 'Mi Nombre',
            'PAYER_NAME' => 'Mi Nombre',
            'CURRENCY' => 'MXN',
            'COUNTRY' => 'MX',
        ];
        $Payu = new Payments();
        $Payu->CreatePaymentCard($sendData , function($response) {
            //**Respuesta Exitosa pero Pendiente de Pago**
            //$response->state
            //$response->orderId
            //$response->transactionId
            //$response->EXPIRATION_DATE
            //$response->BAR_CODE
            //$response->REFERENCE
            //$response->URL_PAYMENT_RECEIPT_PDF
            //$response->URL_PAYMENT_RECEIPT_HTML
            //$response->PAYMENT_WAY_ID
            //$response->BANK_REFERENCED_CODE
        }, function($error) {
            //**Respuesta Erronea**
            //$error->message
        });
    }
    
}

信用卡tokenization

允许以下方式对 VISA||MASTERCARD||AMEX 进行tokenization

在此方法中,需要发送包含卡片数据、金额、国家和货币的数组

<?php

namespace App;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use TooPago\Payu\Payments;


class MyController extends Controller
{

    public function tokenizarCard()
    {
        //PAYER_NAME: APPROVED||PENDING||REJECTED
        //PAYMENT_METHOD : VISA||MASTERCARD||AMEX
        //CREDIT_CARD_EXPIRATION_DATE : YYYY/MM
        $sendData = [
            'PAYER_NAME' => 'APPROVED',
            'PAYER_ID' => '1518', // id del usuario
            'CREDIT_CARD_NUMBER' => '5491234534511478',
            'CREDIT_CARD_EXPIRATION_DATE' => '2023/05',
            'PAYMENT_METHOD' => 'MASTERCARD',
        ];        
        $Payu = new Payments();
        $Payu->tokenizarCard($sendData , function($response) {
            //**Respuesta Exitosa**
            //$response->state
            //$response->creditCardTokenId
            //$response->paymentMethod
            //$response->maskedNumber
        }, function($error) {
            //**Respuesta Erronea**
            //$error->message
        });
    }
    
}

注意:所有字段都是必填的。PAYER_NAME 字段在生产环境中应包含付款人的姓名,如果是测试环境,可以是上述任一状态

使用卡片token进行扣款

允许以下方式对 VISA||MASTERCARD||AMEX 进行tokenization:在此方法中,需要发送包含用户数据、token、金额、国家和货币的数组

<?php

namespace App;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use TooPago\Payu\Payments;


class MyController extends Controller
{

    public function changeWithToken()
    {
        //PAYER_NAME: APPROVED||PENDING||REJECTED
        //PAYMENT_METHOD : VISA||MASTERCARD||AMEX
        //CREDIT_CARD_EXPIRATION_DATE : YYYY/MM
        //INSTALLMENTS_NUMBER : 1
        $sendData = [
            'REFERENCE_CODE' => 'referencia_' . uniqid(),
            'DESCRIPTION' => 'Deposito de $100',
            'VALUE' => 100,
            'BUYER_NAME' => 'Juan Lopez',
            'PAYER_NAME' => 'APPROVED',
            'TOKEN_ID' => '759497b1-ab49-4145-b652-0ad581a9f612', // id token tarjeta
            'PAYMENT_METHOD' => 'MASTERCARD',
            'INSTALLMENTS_NUMBER' => '1',
            'CURRENCY' => 'MXN',
            'COUNTRY' => 'MX',
        ];        
        $Payu = new Payments();
        $Payu->tokenizarCard($sendData , function($response) {
            //**Respuesta Exitosa**
            //$response->state
            //$response->orderId
            //$response->transactionId}
            
            //Si el estatus es pendiente
            //$response->pendingReason
            
            //Si el estatus es exitoso
            //$response->trazabilityCode // opcional
            //$response->authorizationCode // opcional
            //$response->responseMessage // opcional
            //$response->responseCode // opcional

        }, function($error) {
            //**Respuesta Erronea**
            //$error->message
        });
    }
    
}

注意:所有字段都是必填的。PAYER_NAME 字段在生产环境中应包含付款人的姓名,如果是测试环境,可以是上述任一状态

查询

按 ORDER_ID 查询的方式如下

<?php

namespace App;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use TooPago\Payu\Searchable;


class MyController extends Controller
{

    public function search()
    {
        $sendData = [
            'ORDER_ID' => 'xxxxx' //ID de la orden
        ];        
        $Payu = new Searchable();
        $Payu->searchById($sendData , function($response) {
            //**Respuesta Exitosa**
        }, function($error) {
            //**Respuesta Erronea**
            //$error->message
        });
    }
    
}

按 REFERENCE_CODE 查询的方式如下

<?php

namespace App;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use TooPago\Payu\Searchable;


class MyController extends Controller
{

    public function search()
    {
        $sendData = [
            'REFERENCE_CODE' => 'xxxxx' //REFERENCE_CODE de la orden
        ];        
        $Payu = new Searchable();
        $Payu->searchByReference($sendData , function($response) {
            //**Respuesta Exitosa**
        }, function($error) {
            //**Respuesta Erronea**
            //$error->message
        });
    }
    
}

按 TRANSACTION_ID 查询的方式如下

<?php

namespace App;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use TooPago\Payu\Searchable;


class MyController extends Controller
{

    public function search()
    {
        $sendData = [
            'TRANSACTION_ID' => 'xxxxx' //TRANSACTION_ID de la orden
        ];        
        $Payu = new Searchable();
        $Payu->searchByTransaction($sendData , function($response) {
            //**Respuesta Exitosa**
        }, function($error) {
            //**Respuesta Erronea**
            //$error->message
        });
    }
    
}

测试

安装包的依赖项。

配置 phpunit.xml 文件和 .env 文件变量,使用你的账户的测试配置。

PayU 网站上 查看信息,然后执行测试。

phpunit

错误和贡献

对于错误,请直接在 github issues 中描述问题或发送邮件至 miguel@lomeli.io。如果您想为此项目做出贡献,请遵循贡献指南发送调整。

  • 使用 psr-1psr-2 风格指南

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

  • 在发起 pull request 之前编写测试和审查代码