toopago / payu
使用 PayU latam 官方 SDK 的流畅接口为 Laravel 开发。
Requires
- php: ^7.2
Requires (Dev)
- orchestra/testbench: ^4.6
This package is not auto-updated.
Last update: 2024-09-24 13:45:51 UTC
README
简介
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。如果您想为此项目做出贡献,请遵循贡献指南发送调整。