Integración API

696 views
Skip to first unread message

Duvan

unread,
May 19, 2016, 10:23:21 AM5/19/16
to Desarrolladores PayU Latam
Buenas Tardes.

Estoy realizando la Integración de la API con JSON, trabajo con ANGULARJS y NODEJS pero no entiendo muchas cosas, a continuación las listo.

1).En las configuraciones iniciales, no se donde deben ir estos datos: 

POST /payments-api/4.0/service.cgi HTTP/1.1 
Host: sandbox.api.payulatam.com
Content-Type: application/xml; charset=utf-8
Accept: application/xml
Content-Length: length

2).Estoy realizando una prueba con un AJAX(Jquery) pero me sale el siguiente error:

XMLHttpRequest cannot load https://sandbox.api.payulatam.com/reports-api/4.0/service.cgi. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5000' is therefore not allowed access.

Este es el código Jquery:

 $("#button").click(function(){

   
{  
   dataType: "jsonp",
   "test": false,
   "language": "en",
   "command": "PING",
   "merchant": {
      "apiLogin": "pRRXKOl8ikMmt9u",
      "apiKey": "4Vj8eK4rloUd272L48hsrarnUA"
   },

}, function(data, status){
                       alert("Data: " + data + "\nStatus: " + status);
                   }

);

});

Agradesco mucho su ayuda.

 


ADMIN

unread,
May 19, 2016, 12:56:46 PM5/19/16
to Desarrolladores PayU Latam
Buenos días Duvan,

De antemano te agradecemos el hacer uso de nuestro foro para publicar tus dudas.

Te informamos que la información del post y el host hacen referencia a la URL para acceder al web service. En este caso será https://sandbox.api.payulatam.com/reports-api/4.0/service.cgi.
Por otro lado, Content-Type, Accept y Content-Length son headers o cabeceras que se deben especificar cuando vayas a enviar la petición. De acuerdo al ejemplo que nos envías, los headers Content-type y Accept deben tener el valor "application/json" debido al formato que estás utilizando.

Con respecto al error que estás presentando, te recomendamos analizar los siguientes links que pueden estar asociados al inconveniente: Problema acceso y Ejemplo Foro.

Esperamos que la información haya sido de utilidad.

Duvan

unread,
May 20, 2016, 6:35:39 PM5/20/16
to Desarrolladores PayU Latam
Muchas gracias, me fue de mucha utilidad, logre entender muchas cosas.
aunque aún me quedan dudas sobre las cabeceras pues no se en donde colocarlas.
Por el momento tengo el código JQUERY asi: 

$.ajax({
  type:"POST",

  contentType:"application/json; charset=utf-8",
  dataType:"json",
  crossDomain : true,
  'contentType': "application/json",
    headers: {
      "Access-Control-Allow-Origin:": "*",
      "Access-Control-Allow-Methods": "GET,POST,PUT,DELETE,OPTIONS",
      "Access-Control-Allow-Headers": " Access-Control-Allow-Origin, Authorization, Origin, x-requested-with, Content-Type, Content-Range, Content-Disposition, Content-Description"
     },

     data:{
               "test": false,
               "language": "en",
               "command": "PING",
               "merchant": {
                  "apiLogin": "pRRXKOl8ikMmt9u",
                  "apiKey": "4Vj8eK4rloUd272L48hsrarnUA"
               }
            },
        success: function(){
            console.log("data");
        }
})


pero no puedo acceder a la URL: https://sandbox.api.payulatam.com/reports-api/4.0/service.cgi 
Me sigue dando este error : 


XMLHttpRequest cannot load https://sandbox.api.payulatam.com/reports-api/4.0/service.cgi. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5000' is therefore not allowed access.

Muchas gracias por su atención y respuestas

ADMIN

unread,
May 20, 2016, 6:48:24 PM5/20/16
to Desarrolladores PayU Latam
Buenas tardes Duvan,

Este error se genera debido a que están consumiendo nuestro servicio web desde el lado 'cliente' de su página web. En este caso, los navegadores restringen las peticiones por cuestiones de seguridad. Para evitar el error, es necesario que implementes un servicio web REST para consumir nuestra API, solucionando así el inconveniente. Sin embargo, no es permitido para nosotros enviarte directamente el desarrollo, la implementación depende directamente del comercio.

Esperamos que la información sea de utilidad.

Duvan

unread,
May 25, 2016, 4:23:34 PM5/25/16
to Desarrolladores PayU Latam
Muchas gracias ya pude resolver el error utilizando nodejs y un modulo que se llama request.

Ahora tengo un error que me dice que el formato no es correcto.


request({
hostname: 'sandbox.api.payulatam.com',
url: 'https://sandbox.api.payulatam.com/payments-api/4.0/service.cgi', //URL to hit
method: 'POST', //Specify the method
headers: { //We can define headers too
'Content-Type': 'application/json; charset=utf-8',
'Accept': 'application/json',
'Content-Length': 'Buffer.byteLength(data)'
},
       data:{
"test": false,
"language": "en", "command": "PING",
"merchant": {
"apiLogin": "pRRXKOl8ikMmt9u",
"apiKey": "4Vj8eK4rloUd272L48hsrarnUA"
}
}

}

Estoy inseguro de como estoy enviando estos datos.
¿Puedo enviar los datos dentro de un objeto o array con nombre "data" (como se ve en el código)? o ¿cuál es la forma correcta?

Muchas Gracias

Duvan

unread,
May 25, 2016, 4:24:29 PM5/25/16
to Desarrolladores PayU Latam
Buenas tardes.

Estuve probando multiples conexiones con nodejs, pero siempre consigo el mismo error, no importa los datos que ingrese ni los datos que cambie.
El error es este:

'{"code":"ERROR","error":"Invalid request format","transactionResponse":null}'

Aunque el estatus de la conexión es 
200, es decir que si me puedo conectar pero, por alguna razón los datos no son recibidos correctamente. Estos son los datos que envió :

Estos datos son la respuesta que me envía nodejs, por la consola, por eso algunos datos aparecen como [object], todas las variables siguientes son datos de la consola 



Request {

method: 'POST',

data: 

      { test: false,

        language: 'en',

        command: 'PING',

        merchant: [Object] },


CABECERAS:

host: 'sandbox.api.payulatam.com',


 _header: 'POST /payments-api/4.0/service.cgi HTTP/1.1\r\nContent-Type: application/json; charset=utf-8\r\nAccept: application/json\r\nContent-Length: 0\r\nhost: sandbox.api.payulatam.com\r\nConnection: close\r\n\r\n',



headers: 

      { 'Content-Type': 'application/json; charset=utf-8',

        Accept: 'application/json',

        'Content-Length': 0 },



ADMIN

unread,
May 25, 2016, 5:15:43 PM5/25/16
to Desarrolladores PayU Latam
Buenas tardes Duvan,

De acuerdo a la petición que envías, te pedimos que por favor la modifiques para que se visualice de tal forma:

request({
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
data:{
"test": false,
"language": "en",
"command": "PING",
"merchant": {
"apiLogin": "pRRXKOl8ikMmt9u",
"apiKey": "4Vj8eK4rloUd272L48hsrarnUA"
}
}       

});

De igual forma, un ejemplo que podría ayudarte a crear peticiones http a través de Node.js es https://nodejs.org/api/http.html y https://www.sitepoint.com/making-http-requests-in-node-js/.

Esperamos que la información te ayude a solucionar los inconvenientes.
Reply all
Reply to author
Forward
0 new messages