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