gjae / laravel-payper
一个用于希望集成 Payper 支付的应用程序的 Laravel 集成
Requires
- php: ^7.1.3
- guzzlehttp/guzzle: >=6.4.1
- laravel/framework: >=5.7.0
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