Pago Recurrente
Las acciones anteriores permitieron crear un token
de la siguiente estructura
8ac7a4a26ccd39af016cce74ce5f4g4f, en este constan los datos de la tarjeta
de
crédito. Es de suma importancia que en el desarrollo cada token sea asociado a
un
único ID de cliente dentro de la plataforma del comercio, para esto deberá crear
una
estructura de base de datos adecuada, ya esto es a criterio del desarrollador.
No
olvidar que deben enviar también los parámetros obligatorios expuestos en
la guía de
implementación del botón de pagos.
Referencia de asociación de un cliente con tokens
Para realizar el proceso de recurrencia debe utilizar el siguiente código
referencial, el
campo de impuestos es igual como se lo implementó en el botón de pagos
function request($token, $amount, $token, $custom, $merchant){
$url = "htps://test.oppwa.com/v1/registrations/".$token."/payments";
$data = "entityId=8a8294185a65bf5e015a6c8b89a10d8d".
"&amount=1.12".//&amount.
"¤cy=USD" .
"&paymentType=DB" .
"&risk.parameters[USER_DATA2]=PagoRapidoDF".//Nombre diferente al canal principal
"&recurrentType=REPEATED".
"&merchantTransactionId=transaction_".$trx.//Identificador incremental de la recurrencia
"&customParameters[SHOPPER_MID]=1000000505".
"&customParameters[SHOPPER_TID]=PD100406".
"&customParameters[SHOPPER_ECI]=0103910".
"&customParameters[SHOPPER_PSERV]=17913101".
"&customParameters[SHOPPER_VAL_BASE0]=".$base0
"&customParameters[SHOPPER_VAL_BASEIMP]=.$base12".
"&customParameters[SHOPPER_VAL_IVA]=.$valoriva";
"&customParameters[SHOPPER_VERSIONDF]=2";
$data .="&testMode=EXTERNAL";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization:Bearer OGE4Mjk0MTg1MzNjZjMxZDAxNTMzZDA2ZmqwNDA3NDh8WHQ3RjIyUUVOWA=='));
curl_setopt($ch, CURLOPT_POST, '1');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //this should be set to true in production
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$responseData = curl_exec($ch);
if(curl_errno($ch)){
return curl_error($ch);
}
curl_close($ch);
return $responseData;
}
Como podrán observar en la figura 5, el campo $token en la URL es de suma
importancia sin olvidar el campo recurringType=REPEATED adicional
agregar el campo risk.parameters[USER_DATA1]=REPEATED
Para salir a producción se debe solicitar nuevas credenciales (EntityId /
Autorizador) para poder diferenciarlos en nuestra plataforma.
A continuación, el código de ejemplo en PHP. Como podrán observar, en la URL se
ubica el Token del cual se hará el pago recurrente, cabe recalcar que todo está
en ambiente de pruebas.
function request() {
$url = "https://test.oppwa.com/v1/registrations/".$token."/payments";
$data = "entityId=8a8294185a65bf5e015a6c8b89a10d8d".
"&amount=1.12".//$amount.
"¤cy=USD" .
"&paymentType=DB" .
"&risk.parameters[USER_DATA2]=PagoRapidoDF".//Nombre diferente al canal principal
"&recurringType=REPEATED".
"&risk.parameters[USER_DATA1]=REPEATED".
"&merchantTransactionId=transaction_".$trx.//identificador incremental de la recurrencia
"&customParameters[SHOPPER_MID]=1000000505".
"&customParameters[SHOPPER_TID]=PD100406".
"&customParameters[SHOPPER_ECI]=0103910".
"&customParameters[SHOPPER_PSERV]=17913101".
"&customParameters[SHOPPER_VAL_BASE0]=".$base0.
"&customParameters[SHOPPER_VAL_BASEIMP]=".$base12.
"&customParameters[SHOPPER_VAL_IVA]=".$valoriva.
"&customParameters[SHOPPER_VERSIONDF]=2";
$data .="&testMode=EXTERNAL";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization:Bearer OGE4Mjk0MTg1MzNjZjMxZDAxNTMzZDA2ZmQwNDA3NDh
8WHQ3RjIyUUVOWA=='));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// this should be set to true in production
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$responseData = curl_exec($ch);
if(curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $responseData;
}
La ejecución de esta función tendrá como respuesta un JSON de la siguiente
manera
{
"id":"8ac7a49f6ccd36fa016ccf0d766707a0",
"paymentType":"DB",
"amount":"1.12",
"currency":"USD",
"descriptor":"0940.0933.8506 Low Risk Sector",
"result":{"code":"000.100.110",
"description":"Request successfully processed in 'Merchant in Integrator Test Mode'"},
"resultDetails":{"ExtendedDescription":"Transaction suceeded",
"RiskStatusCode":"APPROVE",
"ResponseCode":"00",
"clearingInstituteName":"Datafast",
"AuthCode":"023336",
"ConnetorTxID1":"8ac7a49f6ccd36fa016ccf0d766707a0",
"RequestId":"700003447737",
"RiskFraudStatusCode":"ACCEPT",
"RiskResponseCode":"0100",
"ReferenceNbr":"190826_000247",
"AcquirerResponse":"00_04VG",
"OrderId":"000074713859"
},
"customParameters":{
"1000000505_PD100406":"0081003007010391000040120000000000120510081791310",
"risk":{"score":"0"},
"buildNumber":"1a3ea91512d1c7b8a7b49b36c3afe820628f94da@2019-08-23 11:26:37 +0000",
"timestamp": "2019-08-26 17:51:05+0000",
"ndc": "8a8294185a65bf5e015a6c8b89a10d8d_f9951e5a1da148cf9f5d6d8ad5659a43"}
A continuación, un ejemplo de interfaz de administración de recurrencias.
Ejemplo de interfaz de control de pagos recurrentes