PyThon desde Velneo?

Hola todos!!
Pues como siempre pidiendo ayuda, que digo, AUXILIO. como algunos de ustedes se darán cuenta he estado intentando conectar mi ERP al WS de FacturaTECH, (soy de Colombia) y pues…aunque alguna vez lo logré, ahora no he sido capaz de hacerlo mediante xmlHttpRequest.

De tanto probar y probar, intenté hacerlo en otro lenguaje y lo intenté con Python y para mi sorpresa pues fue muy sencillo… logré conectarme sin problemas al WS.

El asunto es que no se que tan viable es la interacción entre Velneo y Python, es decir:
¿Puedo ejecutar código Python desde Velneo?
¿De poderse, podría capturar valores de retorno de Python para procesar en Velneo?

¿Qué puede estarme fallando desde Velneo con xmlHttpRequest… si con Python solo uso el header Content-type y un body formateado tal cual FacturaTECH lo requiere ?

Se que querrían mas datos:

el objeto xmlHttpRequest me devuelve un readyState=4 pero un errorCode=99 y ningún valor en statusText ni en responseText

He hecho pruebas con SOAPUI y con POSTMAN y en ambas herrameintas me da conexión correcta.

esta es la url del WS: https://ws.facturatech.co/21/index.php?wsdl

///--------------------------------------
var xhr = new XMLHttpRequest();
xhr.open(“POST”, url, false);
xhr.setRequestHeader(‘Content-Type’, ‘text/xml;charset=UTF-8’);
//xhr.setRequestHeader(‘Host’, ‘ws.facturatech.co’);
xhr.send(data);
///--------------------------------------
ESTE ES el body:
//----------------------------------
data=<soapenv:Envelope xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/” xmlns:ns=“urn:https://ws.facturatech.co/21”>soapenv:Header/soapenv:Body<ns:FtechAction.uploadInvoiceFile soapenv:encodingStyle=“http://schemas.xmlsoap.org/soap/encoding/”>GesTEC728739f533f0b84d1008404badb41bbda4edb1260f8b82b0b13d067344501ffdPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48RkFDVFVSQSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj48RU5DPjxFTkNfMT5JTlZPSUM8L0VOQ18xPjxFTkNfMj45MDExNDMzMTE8L0VOQ18yPjxFTkNfMz45MDAxOTIzMTYtMDwvRU5DXzM+PEVOQ180PlVCTCAyLjE8L0VOQ180PjxFTkNfNT5ESUFOIDIuMTwvRU5DXzU+PEVOQ182PlRDRkEyPC9FTkNfNj48RU5DXzc+MjAyMC0wMy0zMTwvRU5DXzc+PEVOQ184PjEzOjU1OjI3LTA1OjAwPC9FTkNfOD48RU5DXzk+MDE8L0VOQ185PjxFTkNfMTA+Q09QPC9FTkNfMTA+PEVOQ18xMT48L0VOQ18xMT48RU5DXzEyPjwvRU5DXzEyPjxFTkNfMTM+PC9FTkNfMTM+PEVOQ18xND48L0VOQ18xND48RU5DXzE1PjI8L0VOQ18xNT48RU5DXzE2PjIwMjAtMDQtMzA8L0VOQ18xNj48RU5DXzE3PjwvRU5DXzE3PjxFTkNfMTg+PC9FTkNfMTg+PEVOQ18xOT48L0VOQ18xOT48RU5DXzIwPjI8L0VOQ18yMD48RU5DXzIxPjEwPC9FTkNfMjE+PEVOQ18yMj48L0VOQ18yMj48L0VOQz48RU1JPjxFTUlfMT4xPC9FTUlfMT48RU1JXzI+OTAxMTQzMzExLTE8L0VNSV8yPjxFTUlfMz4zMTwvRU1JXzM+PEVNSV80PjQ4PC9FTUlfND48RU1JXzU+MTwvRU1JXzU+PEVNSV82PkZBQ1RVUkFURUNIIFNBLiBERSBDVjwvRU1JXzY+PEVNSV83PkZBQ1RVUkFURUNIIFNBLiBERSBDVjwvRU1JXzc+PEVNSV84PjwvRU1JXzg+PEVNSV85PjwvRU1JXzk+PEVNSV8xMD48L0VNSV8xMD48RU1JXzExPjA1PC9FTUlfMTE+PEVNSV8xMj48L0VNSV8xMj48RU1JXzEzPk1FREVMTM1OPC9FTUlfMTM+PEVNSV8xND4wNTAwMjE8L0VNSV8xND48RU1JXzE1PkNPPC9FTUlfMTU+PEVNSV8xNj43MDcxPC9FTUlfMTY+PEVNSV8xNz48L0VNSV8xNz48RU1JXzE4PjwvRU1JXzE4PjxFTUlfMTk+QW50aW9xdWlhPC9FTUlfMTk+PEVNSV8yMD48L0VNSV8yMD48RU1JXzIxPkNPTE9NQklBPC9FTUlfMjE+PEVNSV8yMj4xPC9FTUlfMjI+PEVNSV8yMz4wNTAwMTwvRU1JXzIzPjxFTUlfMjQ+RkFDVFVSQVRFQ0ggU0EuIERFIENWPC9FTUlfMjQ+PEVNSV8yNT42MjAxPC9FTUlfMjU+PFRBQz48VEFDXzE+Ty00ODwvVEFDXzE+PC9UQUM+PERGRT48REZFXzE+MDUwMDE8L0RGRV8xPjxERkVfMj4wNTwvREZFXzI+PERGRV8zPkNPPC9ERkVfMz48REZFXzQ+MDUwMDIxPC9ERkVfND48REZFXzU+Q09MT01CSUE8L0RGRV81PjxERkVfNj5BbnRpb3F1aWE8L0RGRV82PjxERkVfNz5NRURFTEzNTjwvREZFXzc+PERGRV84PjwvREZFXzg+PC9ERkU+PElDQz48SUNDXzE+Tk0xMjM0NTY3ODwvSUNDXzE+PC9JQ0M+PENERT48Q0RFXzE+MTwvQ0RFXzE+PENERV8yPkZBQ1RVUkFURUNIIFNBLiBERSBDVjwvQ0RFXzI+PENERV8zPjMxMCA1MDEgMTQgODg8L0NERV8zPjxDREVfND5oamNvbXB1dGFkb3Jlc0Bob3RtYWlsLmNvbTwvQ0RFXzQ+PENERV81PjwvQ0RFXzU+PENERV82PjwvQ0RFXzY+PC9DREU+PEdURT48R1RFXzE+MDE8L0dURV8xPjxHVEVfMj5JVkE8L0dURV8yPjwvR1RFPjwvRU1JPjxBRFE+PEFEUV8xPjI8L0FEUV8xPjxBRFFfMj45MDAxOTIzMTY8L0FEUV8yPjxBRFFfMz4xMzwvQURRXzM+PEFEUV80PjQ5PC9BRFFfND48QURRXzU+MTI8L0FEUV81PjxBRFFfNj5QUkVOREVSSUEgRUwgMTI8L0FEUV82PjxBRFFfNz5QQU9MQSBUUlVKSUxMTzwvQURRXzc+PEFEUV84PlBBT0xBIFRSVUpJTExPPC9BRFFfOD48QURRXzk+UEFPTEEgVFJVSklMTE88L0FEUV85PjxBRFFfMTA+PC9BRFFfMTA+PEFEUV8xMT4wNTwvQURRXzExPjxBRFFfMTI+PC9BRFFfMTI+PEFEUV8xMz5UQVJBWsE8L0FEUV8xMz48QURRXzE0PjA1MDAxMDwvQURRXzE0PjxBRFFfMTU+Q088L0FEUV8xNT48VENSPjxUQ1JfMT5PLTQ5PC9UQ1JfMT48L1RDUj48SUxBPjxJTEFfMT5QQU9MQSBUUlVKSUxMTzwvSUxBXzE+PElMQV8yPjkwMDE5MjMxNjwvSUxBXzI+PElMQV8zPjEzPC9JTEFfMz48SUxBXzQ+MDwvSUxBXzQ+PC9JTEE+PERGQT48REZBXzE+Q088L0RGQV8xPjxERkFfMj4wNTwvREZBXzI+PERGQV8zPjA1MDAxMDwvREZBXzM+PERGQV80PjA1NzkwPC9ERkFfND48REZBXzU+Q09MT01CSUE8L0RGQV81PjxERkFfNj5BbnRpb3F1aWE8L0RGQV82PjxERkFfNz5UQVJBWsE8L0RGQV83PjxERkFfOD48L0RGQV84PjwvREZBPjxDREE+PENEQV8xPjE8L0NEQV8xPjxDREFfMj5QQU9MQTwvQ0RBXzI+PENEQV8zPjwvQ0RBXzM+PENEQV80PjwvQ0RBXzQ+PENEQV81PjwvQ0RBXzU+PENEQV82PjwvQ0RBXzY+PC9DREE+PEdUQT48R1RBXzE+MDE8L0dUQV8xPjxHVEFfMj5JVkE8L0dUQV8yPjwvR1RBPjwvQURRPjxUT1Q+PFRPVF8xPjI1MDQ3LjYyPC9UT1RfMT48VE9UXzI+Q09QPC9UT1RfMj48VE9UXzM+MTkwNDcuNjI8L1RPVF8zPjxUT1RfND5DT1A8L1RPVF80PjxUT1RfNT4yNjAwMC4wMDwvVE9UXzU+PFRPVF82PkNPUDwvVE9UXzY+PFRPVF83PjI2MDAwLjAwPC9UT1RfNz48VE9UXzg+Q09QPC9UT1RfOD48L1RPVD48VElNPjxUSU1fMT5mYWxzZTwvVElNXzE+PFRJTV8yPjE5MDQ3LjYyPC9USU1fMj48VElNXzM+Q09QPC9USU1fMz48SU1QPjxJTVBfMT4wMTwvSU1QXzE+PElNUF8yPjE5MDQ3LjYyPC9JTVBfMj48SU1QXzM+Q09QPC9JTVBfMz48SU1QXzQ+OTUyLjM4PC9JTVBfND48SU1QXzU+Q09QPC9JTVBfNT48SU1QXzY+NS4wMDwvSU1QXzY+PC9JTVA+PC9USU0+PERSRj48RFJGXzE+MTIzNDU2Nzg5MCBUaXBvOiBERU1PPC9EUkZfMT48RFJGXzI+MjAxOS0xMS0xMTwvRFJGXzI+PERSRl8zPjIwMjAtMTItMzE8L0RSRl8zPjxEUkZfND5UQ0ZBPC9EUkZfND48RFJGXzU+MTwvRFJGXzU+PERSRl82PjUwMDAwMDA8L0RSRl82PjwvRFJGPjxNRVA+PE1FUF8xPjEwPC9NRVBfMT48TUVQXzI+MTwvTUVQXzI+PE1FUF8zPjIwMjAtMDQtMzA8L01FUF8zPjwvTUVQPjxJVEU+PElURV8xPjE8L0lURV8xPjxJVEVfMz4xLjAwPC9JVEVfMz48SVRFXzQ+OTQ8L0lURV80PjxJVEVfNT4yMDAwMC4wMDwvSVRFXzU+PElURV82PkNPUDwvSVRFXzY+PElURV83PjE5MDQ3LjYyPC9JVEVfNz48SVRFXzg+Q09QPC9JVEVfOD48SVRFXzExPlBST1RFQ1RPUkVTICBNVUxUSSBOT1MrSkFCT04gSU5USU1PIDExME1MPC9JVEVfMTE+PElURV8xNz4wODY0PC9JVEVfMTc+PElURV8xOT4yMDAwMC4wMDwvSVRFXzE5PjxJVEVfMjc+MS4wMDwvSVRFXzI3PjxJVEVfMjg+VU5EPC9JVEVfMjg+PElBRT48SUFFXzE+PC9JQUVfMT48SUFFXzI+PC9JQUVfMj48SUFFXzM+PC9JQUVfMz48SUFFXzQ+PC9JQUVfND48L0lBRT48L0lURT48SVRFPjxJVEVfMT4yPC9JVEVfMT48SVRFXzM+MS4wMDwvSVRFXzM+PElURV80Pjk0PC9JVEVfND48SVRFXzU+NjAwMC4wMDwvSVRFXzU+PElURV82PkNPUDwvSVRFXzY+PElURV83PjYwMDAuMDA8L0lURV83PjxJVEVfOD5DT1A8L0lURV84PjxJVEVfMTE+TEVDSEUgREUgTUFHTkVTSUEgUEhJTExJUFMgU1VTUEVOU0lPTiAxMjBNTDwvSVRFXzExPjxJVEVfMTc+MDcyNDwvSVRFXzE3PjxJVEVfMTk+NjAwMC4wMDwvSVRFXzE5PjxJVEVfMjc+MS4wMDwvSVRFXzI3PjxJVEVfMjg+VU5EPC9JVEVfMjg+PElBRT48SUFFXzE+PC9JQUVfMT48SUFFXzI+PC9JQUVfMj48SUFFXzM+PC9JQUVfMz48SUFFXzQ+PC9JQUVfND48L0lBRT48L0lURT48L0ZBQ1RVUkE+</ns:FtechAction.uploadInvoiceFile></soapenv:Body></soapenv:Envelope>
//----------------------------------------
Mil gracias por la ayuda que me puedan prestar

Hola Yarumal, desconozco Python pero en su momento yo hice una app en C# para controlar una impresora fiscal (Arg.) y lo conecte lo más bien con Velneo. Lo que hice fue generar un .exe al cual le podia pasar parametros al ejecutarlo.
Desde Velneo lo adjunte al proyecto y al momento de usarlo lo ejecute mediante la instrucción ejecutar comando de sistema y de ahi el programa en C# toma el control de la operación.
En mi caso no necesito respuesta de retorno, pero si lo necesitas, podrias hacer que Python te deje un archivo .txt o similar que puedas “levantar” y leer desde Velneo.

Un Saludo
Matias | Rimatcom

Matcas muchas gracias por tu respuesta, sí, en eso estaba pensando, voy a buscar la forma de pasarle parámetros al programa de Python y el retorno que necesito lo dejo en un .txt, el cual recojo desde Velneo.

Mil gracias.