PHP code example of freshwork / transbank

1. Go to this page and download the library: Download freshwork/transbank library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

freshwork / transbank example snippets


git clone [email protected]:freshworkstudio/transbank-web-services.git
cd transbank-web-services/
php -S localhost:8888 -t examples
  
  
  
use Freshwork\Transbank\CertificationBagFactory;  
use Freshwork\Transbank\TransbankServiceFactory;  
use Freshwork\Transbank\RedirectorHelper;  
  
  
  
// Comprueba que el pago se haya efectuado correctamente  
if (  
    $response->detailOutput->responseCode == 0
    /* Comprueba que la orden no haya sido pagada */  
) {  
    $plus->acknowledgeTransaction();  
}  
  
// Redirecciona al cliente a Webpay para recibir el Voucher  
return RedirectorHelper::redirectBackNormal($response->urlRedirection);  
  
  
  
use Freshwork\Transbank\CertificationBagFactory;  
use Freshwork\Transbank\TransbankServiceFactory;  
use Freshwork\Transbank\RedirectorHelper;  
  
nOneClick();  
$oneClick = TransbankServiceFactory::oneclick($certificationBag);  
  
  
// Informamos a Transbank que se iniciará un proceso de inscripción para un usuario  
$response = $oneClick->initInscription('username', '[email protected]', 'http://misitio.cl/webpayresponse');  
  
// Utilidad para generar formulario y realizar redirección POST  
echo RedirectorHelper::redirectHTML($response->urlWebpay, $response->token);  
  
  
  
  
use Freshwork\Transbank\CertificationBagFactory;  
use Freshwork\Transbank\TransbankServiceFactory;  
  
ionBag = CertificationBagFactory::integrationOneClick();  
$oneClick = TransbankServiceFactory::oneclick($certificationBag);  
  
$response = $oneClick->finishInscription($token);  
  
if($response->responseCode == 0)  
    // Inscripción exitosa  
}  
  
var_dump($response);  
  
  
  
use Freshwork\Transbank\CertificationBagFactory;  
use Freshwork\Transbank\TransbankServiceFactory;  
  
ionBag = CertificationBagFactory::integrationOneClick();  
$oneClick = TransbankServiceFactory::oneclick($certificationBag);  
  
// Identificador único de la compra generado por el comercio. Debe ser timestamp [yyyymmddhhMMss] + un correlativo de tres dígitos.  
// Ej: Para la tercera transacción realizada el día 15 de julio de 2011 a las 11:55:50 la orden de compra sería: 20110715115550003.  
$buyOrder = date('ymdhis') . str_pad(1, 3, '0', STR_PAD_LEFT);  
  
// Token provisto por Transbank para identificar a tu cliente  
$authToken = '9bf43307-6fa0-4b3b-888d-f36b6d040162'; //$user->tbkToken;  
  
try {  
    $response = $oneClick->authorize(1000, $buyOrder, 'username', $authToken);  
} catch (\Exception $e) {  
    // No se pudo realizar el cargo  
}  
  
var_dump($response);  
  
  
  
use Freshwork\Transbank\CertificationBagFactory;  
use Freshwork\Transbank\TransbankServiceFactory;  
use Freshwork\Transbank\RedirectorHelper;  
  
 //Amount & BuyOrder  
  
//Id del servicio a contratar, Rut cliente, Nombre, Apellido, Segundo apellido, Email cliente, Celular Cliente, Fecha termino contrato, Email comercio  
$patpass->addInscriptionInfo('serviceID', '11.111.111-5', 'Gonzalo', 'De Spirito', 'Zúñiga', '[email protected]',  
    '987654321', '2017-12-01', '[email protected]');  
  
$response = $patpass->init('http://test.dev/response', 'http://test.dev/thanks');  
echo RedirectorHelper::redirectHTML($response->url, $response->token);  
  
  
$response = $patpass->getTransactionResult();  
//If everything goes well (check stock, check amount, etc) you can call acknowledgeTransaction to accept the payment. Otherwise, the transaction is reverted in 30 seconds.  
//Si todo está bien, peudes llamar a acknowledgeTransaction. Si no se llama a este método, la transaccion se reversará en 30 segundos.  
$plus->acknowledgeTransaction();  
  
//Redirect back to Webpay Flow and then to the thanks page  
return RedirectorHelper::redirectBackNormal($response->urlRedirection);  

$providers = [
	...
	\Freshwork\Transbank\Laravel\WebpayServiceProvider::class
]

// routes/web.php
Route::get('/checkout', 'CheckoutController@initTransaction')->name('checkout');  
Route::post('/checkout/webpay/response', 'CheckoutController@response')->name('checkout.webpay.response');  
Route::post('/checkout/webpay/finish', 'CheckoutController@finish')->name('checkout.webpay.finish');

// app\Http\Controllers\CheckoutController.php
namespace App\Http\Controllers;

use Freshwork\Transbank\WebpayNormal;
class CheckoutController extends Controller  
{
	public function initTransaction(WebpayNormal $webpayNormal)
	{
		$webpayNormal->addTransactionDetail(1500, 'order-' . rand(1000, 9999));  
		$response = $webpayNormal->initTransaction(route('checkout.webpay.response'), route('checkout.webpay.finish')); 
		// Probablemente también quieras crear una orden o transacción en tu base de datos y guardar el token ahí.
		  
		return RedirectorHelper::redirectHTML($response->url, $response->token);
	}

	public function response(WebpayPatPass $webpayPatPass)  
	{  
	  $result = $webpayPatPass->getTransactionResult();  
	  session(['response' => $result]);  
	  // Revisar si la transacción fue exitosa ($result->detailOutput->responseCode === 0) o fallida para guardar ese resultado en tu base de datos. 
	  
	  return RedirectorHelper::redirectBackNormal($result->urlRedirection);  
	}

	public function finish()  
	{
	  dd($_POST, session('response'));  
	  // Acá buscar la transacción en tu base de datos y ver si fue exitosa o fallida, para mostrar el mensaje de gracias o de error según corresponda
	}
}

// app\Http\Middleware\VerifyCsrfToken.php
  
  
namespace App\Http\Middleware;  

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;  
  
class VerifyCsrfToken extends Middleware  
{  
  /**  
 * Indicates whether the XSRF-TOKEN cookie should be set on the response. * * @var bool  
 */  protected $addHttpCookie = true;  
  
  /**  
 * The URIs that should be excluded from CSRF verification. * * @var array  
 */  protected $except = [  
  '/checkout/webpay/response',  //Agregar esta línea. Cambiar a tu ruta
  '/checkout/webpay/finish', //Agregar esta línea. Cambiar a tu ruta
 ];}
  
  
      
use Freshwork\Transbank\Log\LoggerFactory;  
use Freshwork\Transbank\Log\TransbankCertificationLogger;  
  
  
  
  
use Freshwork\Transbank\Log\LogHandler;  
use Freshwork\Transbank\Log\LoggerInterface;  
  
LogHandler::log('Comenzando proceso de pago', LoggerInterface::LEVEL_INFO);   
LogHandler::log('Error!!', LoggerInterface::LEVEL_ERROR, 'mensajes_internos');   
LogHandler::log(['datos' => 'más datos', 'otros_datos']);   
  
  
  
use Freshwork\Transbank\CertificationBag;  
use Freshwork\Transbank\CertificationBagFactory;  
  
// Integración / Desarrollo  
$bag = new CertificationBag(  
   'path/to/cert/597020000000.key',  
   'path/to/cert/597020000000.crt',  
   null,  
   CertificationBag::INTEGRATION  
);  
  
// Producción  
$bag = new CertificationBag(  
   'path/to/cert/597020000001.key',  
   'path/to/cert/597020000001.crt',  
   null,  
   CertificationBag::PRODUCTION  
);  
  
//También se puede crear usando la clase CertificationBagFactory, que permite crear instancias de CertificationBag de manera más simple  
CertificationBagFactory::production('path/to/cert/597020000001.key', 'path/to/cert/597020000001.crt');  
  
//O si queremos crear un certification bag que venga con los certificados de integración para webpaynormal  
CertificationBagFactory::integrationWebpayNormal();  
  
  
  
  
use Freshwork\Transbank\CertificationBag;  
use Freshwork\Transbank\WebpayOneClickWebService;  
  
$bag = new CertificationBag(  
    '/path/to/597020000000.key',  
    '/path/to/597020000000.crt'  
);  
$bag->setEnvironment(CertificationBag::INTEGRATION);  
  
$oneClickService = new WebpayOneClickWebService($bag);  
  
//Eliminar esta  
$bag = CertificationBagFactory::integrationWebpayNormal();  
...  
  
//Reemplazar por esta  
$bag = CertificationBagFactory::production('tu/llave/privada.key', 'path/a/tu/ceriticado_publico.crt');  
...  
 php  
  
  
use Freshwork\Transbank\CertificationBagFactory;  
use Freshwork\Transbank\TransbankServiceFactory;  
use Freshwork\Transbank\RedirectorHelper;  
  
  
$plus = TransbankServiceFactory::normal($bag);  
  
// Para transacciones normales, solo puedes añadir una linea de detalle de transacción.  
$plus->addTransactionDetail(10000, 'Orden824201'); // Monto e identificador de la orden  
  
// Debes además, registrar las URLs a las cuales volverá el cliente durante y después del flujo de Webpay  
$response = $plus->initTransaction('http://test.dev/response', 'http://test.dev/thanks');  
  
// Utilidad para generar formulario y realizar redirección POST  
echo RedirectorHelper::redirectHTML($response->url, $response->token);  
 php  
  
  
use Freshwork\Transbank\CertificationBagFactory;  
use Freshwork\Transbank\TransbankServiceFactory;  
use Freshwork\Transbank\RedirectorHelper;  
  
  
  
$plus = TransbankServiceFactory::deferred($bag);  
  
// Para transacciones normales, solo puedes añadir una linea de detalle de transacción.  
$plus->addTransactionDetail(10000, 'Orden824201'); // Monto e identificador de la orden  
  
// Debes además, registrar las URLs a las cuales volverá el cliente durante y después del flujo de Webpay  
$response = $plus->initTransaction('http://test.dev/response', 'http://test.dev/thanks');  
  
// Utilidad para generar formulario y realizar redirección POST  
echo RedirectorHelper::redirectHTML($response->url, $response->token);  
 php  
  
  
use Freshwork\Transbank\CertificationBagFactory;  
use Freshwork\Transbank\TransbankServiceFactory;  
  
tionBagFactory::integrationWebpayDeferred();  
  
$plus = TransbankServiceFactory::captureNullify($bag);  
  
$authCode = 'this-auth-code-is-an-example';  
  
// Puedes capturar el monto total o parcial  
$plus->capture($authCode, 'Orden824201', 5000); // Código de autorización, identificador de la orden y monto  
 php  
  
  
use Freshwork\Transbank\CertificationBagFactory;  
use Freshwork\Transbank\TransbankServiceFactory;  
  
onBagFactory::normal();  
  
$plus = TransbankServiceFactory::captureNullify($bag);  
  
$authorizedAmount = '10000';  
$authCode = 'this-auth-code-is-an-example';  
  
// Puedes capturar el monto total o parcial  
$plus->nullify($authCode, $authorizedAmount, 'Orden824201', 2000); // Solo se anularán $2.000 y quedará un balance de $8.000  
 php  
  
  
use Freshwork\Transbank\CertificationBagFactory;  
use Freshwork\Transbank\TransbankServiceFactory;  
  
ag = CertificationBagFactory::integrationOneClick();  
$oneClick = TransbankServiceFactory::oneclick($certificationBag);  
  
// Ej: $response = $oneClick->codeReverseOneClick('20110715115550003');  
$response = $oneClick->codeReverseOneClick($buyOrder);  
 php  
  
  
use Freshwork\Transbank\CertificationBagFactory;  
use Freshwork\Transbank\TransbankServiceFactory;  
  
ag = CertificationBagFactory::integrationOneClick();  
$oneClick = TransbankServiceFactory::oneclick($certificationBag);  
  
$response = $oneClick->removeUser($userToken, $username);