gjae/laravel-payper

一个用于希望集成 Payper 支付的应用程序的 Laravel 集成

安装: 54

依赖: 0

建议者: 0

安全: 0

星星: 0

监视者: 2

分支: 0

开放问题: 0

语言:JavaScript

2.1.6-RC 2019-11-21 15:02 UTC

This package is auto-updated.

Last update: 2024-09-22 02:47:04 UTC


README

安装

composer require gjae/laravel-payper

在 config/app.php 文件中,在 $providers 数组内添加以下行

    ...
    Gjae\LaravelPayper\PayperServiceProvider::class,

然后,在 $aliases 数组中添加以下行

    ...
    Gjae\LaravelPayper\Facade::class,

最后,为了完成安装,执行以下行

php artisan vendor:publish --provider="Gjae\LaravelPayper\PayperServiceProvider"

从这一点开始,您将注意到 config/payper.php 文件、2 个新迁移以及位于 public/vendor/laravelpayper 的 CSS 和 JS 文件,以及位于 resources/views/vendor 的 3 个新视图(这些视图是基本的,可以帮助您在支付过程中进行指导,尽管您可以自由修改它们以进行个性化)。

执行迁移

php artisan migrate

基本使用

配置文件

首先,打开 config/payper.php 配置文件并根据您的需求进行修改,以下是配置文件中每行简要说明:

    'debug_mode'        => true,    

启用库的调试模式,当此变量为 true 时,唯一的有效卡片是“debug_cards”中存在的卡片,否则(如果为 false),库将在处理支付时发出错误,如果输入的卡片未在“debug_cards”属性中注册。

    'origin'            => env('PAYPER_ORIGIN', ''),

请求来源,例如:wwww.example-domain.com

    'access_token'      => env('PAYPER_ACCESS_TOKEN', ''),

由 PAYPER 发出的访问令牌,建议在 .env 文件中创建 PAYPER_ACCESS_TOKEN 变量并在此处分配其值

    'porcentaje_impuesto' => env('PAYPER_TAX_PERCENT', null),

税率(例如,增值税)

    'debug_cards'           => [

    ],

开发过程中有效的卡片,如果“debug_mode”变量为 true,则仅处理此数组中添加的卡片

    'transaction_case_routes'   => [

        'success'               => '',


        'failure'               => '',


        'pending'               => ''

    ],

... 的情况下可能的路由(例如,交易成功、失败或挂起),建议使用路由的 name 方法,如果这些路由为空,则库将执行默认路由,这些路由将发送到 resources/views/vendor/payper 中的视图

    'callback'                   => ''

完成过程后的重定向路由,用户定义该路由并调用 Payper Facade 的 callback 方法以返回 URL

工作原理

要开始交易,只需调用 Payper Facade 的 begin 方法,该方法接受一个回调参数,该回调参数接收交易对象本身,并返回一个完全配置的实例和已预插入数据库的模型实例。以下是其主要方法的快速概述:

    $txInstance = Payper::begin(function($trx){

        // Ingresar el valor de la transacción
        $trx->setValor( 100.00 ); 

        // Descripción de la transacción
        $trx->setDescription("Descripción de la transacción");

        // (OPCIONAL) datos extras de la transacción, recibe un arreglo con los datos adicionales de la transacción que quiera guardar
        $trx->setAditionalData([ 'foo' => 'bar', 'foo1' => [ 'foo.1' => 'bar-1' ] ]);

        // (OPCIONAL) en caso de querer agregar una referencia propia a la transacción
        // NOTA: La libreria genera una referencia automatica unica para la transacción en forma de UUID
        $trx->setReference("MY-AWESOME-REFERENCE");

        // (OPCIONAL) En caso de querer agregar un porcentaje de impuesto 
        // La libreria busca primero en la configuración, sin embargo si utiliza este metodo puede sobreescribir (para la transacción actual) el porcentaje de impuesto
        // NOTA: Si no se configura un porcentaje de impuesto bien sea por el archivo de configuracion o de manera manual. la libreria emitira una excepcion de tipo PayperConfigException
        $trx->setPayperTax(10);
    });

    // Por ultimo retorne la vista con el formulario para realizar el pago
    return view('vendor.payper.payper_form', ['transaction' => $trxInstance]);

完成支付过程后,Payper 库将根据配置返回视图,以处理交易中可能的三种情况。

将支付与其它模型关联

要将 Payper 支付与应用程序中的其他模型关联,只需满足以下要求:

  • 实现 Gjae\LaravelPayper\Contracts\HasTransaction 合同
  • 实现 Gjae\LaravelPayper\Traits\HasTransactions 特性

示例

...
use Gjae\LaravelPayper\Contracts\HasTransaction;
use Gjae\LaravelPayper\Traits\HasTransactions;
class class User extends Authenticatable implements HasTransaction
{
    use HasTransactions;
    ...
}

完成上述步骤后,只需将实现该合同和特性的模型实例作为第二个参数传递给 Payper Facade 的 begin 函数即可,示例

$user = User::first();
Payper::begin(..., $user);

一个交易可以与实现HasTransaction接口的多个对象相关联,无论该接口由哪种模型实现,只需要在begin方法中传入一个对象数组作为第二个参数,例如

$user1 = User::find(1);
$user2 = User::find(2);

Payper::begin(..., [$user1, $user2]);
从模型中恢复交易

通过调用使用HasTransactions特性的类中的transactions方法,可以恢复与模型相关的所有交易,例如

$user = User::first();
$user->transactions;

自定义处理交易

库已经提供了一种自动执行交易的方法;在resources/views/vendor/payper/payper_form.blade.php文件中的表单,您会看到action被指向名为'payper-payment'的路由

    <form action="{{ route('payper-payment') }}" method="POST" id="pay-form">

    </form>

此外,它还包含一个隐藏的input,其值为交易的引用

    <input type="hidden" name="reference" value="{{ $transaction->getReference() }}">

此表单旨在进行自定义(如果需要),表单将被发送到库的默认控制器,用户可以通过创建自己的控制器并注入控制器的方法,来改变这种功能,注入一个实现GatewayInterface接口的实例,该接口负责处理交易

...
use Gjae\LaravelPayper\Contracts\GatewayInterface;

class PayperPaymentsController extends Controller
{
    ...

    public function procesar_transaccion(GatewayInterface $transactionManager)
    {
        ...
        return $transactionManager->exec()->redirectTo([ 'foo' => 'bar' ]);
    }
}

该接口实例公开以下方法

    public function getAuthResponse();           // Retorna el codigo de autorización generado por PAYPER
    public function getBatchId();               // Devuelve el batch_id de la transacción
    public function getExtraData();      // Devuelve los datos adicionales de la transacción (agregados con el metodo setAditionalData)
    public function getResponseDescription();   // Devuelve la descripción de la respuesta
    public function getTranNbr();               // Devuelve el codigo de transacción del banco

    public function exec();             // Ejecuta la transacción con la api del servidor de PAYPER y retorna la instancia en si misma
    public function redirectTo(array $routeParams); // Devuelve la ruta segun el caso, configurados en el archivo config/payper.php