Enviar parametros a un URL

875 views
Skip to first unread message

Sergio Monroy

unread,
Jan 20, 2016, 12:59:29 AM1/20/16
to Comunidad de Visual Foxpro en Español
Buenas Noches a todos

Como lo dice el encabezado, necesito enviar 3 parametros (variables) a un URL de un cliente, esto con la finalidad de enviar informacion desde mi sistema a su sistema, son valores sencillos, solo que no se como, me ayudaron un poco enviandome una rutina en PHP pero no se como convertirla a VFP, si alguien tiene un ejemplo, o me puede ayudar con esto, desde ya le doy las gracias

Nota: aqui dejo el codigo que me proporcionaron

<?php
/**
*
* PHP Curl 
*
* EJEMPLO CURL DE COMO ACTUALIZAR EXISTENCIAS
*/

/**
  * Credenciales API PRUEBA (Despues se cambiaran por unos definidos)
  */
$credentials = array('xxxxxxxxxx','xxxxxxxxxxxxx');

/**
* URL donde se enviaran las nuevas existencias de los medicamentos
*/
$url = "http://xxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxx";

/**
* Informacion de existencias de medicamentos segun sucursales en formato Array
* sucursal_id = El id de la farmacia.
* farmaco_id = El codigo de el medicamento.
* existencia = A la existencia de el medicamento.
*/
$data = ['sucursal_id'=>5,'farmaco_id'=>2,'existencia'=>20];

/**
* Generacion de cadena para mandarla como parametros y valores.
*/
$data = implode("&",array_map(function($value,$key){ return $key.="=".$value; },$data,array_keys($data)));

/**
* Inicio de CURL
*/

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER,$credentials);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

/**
* Termino de CURL
*/

/**
* Respuesta servidor
*/
return ($httpcode>=200 && $httpcode<300) ? $data : false;

?>


Nota: las credeciales y URL los modifique ya que es info que ellos me mandaron

por su apoyo Muchas Gracias

mapner

unread,
Jan 20, 2016, 8:28:42 AM1/20/16
to Comunidad de Visual Foxpro en Español
* Prueba con el objeto Msxml2.ServerXMLHTTP

cURL = ''http:\\xyz.com"
cDATA="ID=1,NOMBRE=JUAN"
 
oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')
oHTTP.OPEN("POST", cURL, .F.)
oHTTP.setRequestHeader("Content-Type", "text/xml;charset=utf-8")
oHTTP.SEND(cDATA)

* Saludos

Julián May

unread,
Jan 20, 2016, 9:06:20 AM1/20/16
to Comunidad de Visual Foxpro en Español
Y por que no preguntas si tienen un web service en esa aplicación y la consumes el colega Baltazar Moreno tiene publicado la manera de hacerlo.
.

Saludos.

Julián May

Victor Espina

unread,
Jan 20, 2016, 10:04:58 AM1/20/16
to Comunidad de Visual Foxpro en Español
Los parametros por URL se conocen como QueryString y se indican de esta forma:



Ten en cuenta que los valores deben estar "escapados", es decir, por ejemplo, los espacios en blanco deben ser cambiados por &nbsp;.  Mi rutina JSON contiene una funcion para escapar strings (www.noiqs.com/sos/json.prg) y seguramente por ahi deben haber algunas mas.

Saludos

Victor


El miércoles, 20 de enero de 2016, 2:59:29 (UTC-3), Sergio Monroy escribió:

Sergio Monroy

unread,
Jan 20, 2016, 12:26:43 PM1/20/16
to publice...@googlegroups.com

Gracias por contestar
Lo voy a probar y les cuento, gracias por su apoyo

Sergio Monroy

unread,
Jan 20, 2016, 3:21:43 PM1/20/16
to Comunidad de Visual Foxpro en Español

Estoy utilizando la rutina que muy amablemene mando mapner solo que no se como agregar las credenciales, nombre y password? para enviarlas tambien

mapner

unread,
Jan 21, 2016, 7:06:20 PM1/21/16
to Comunidad de Visual Foxpro en Español
A partir del código PHP que envías 

$credentials = array('xxxxxxxxxx','xxxxxxxxxxxxx');
curl_setopt($ch, CURLOPT_HTTPHEADER,$credentials);

entiendo que en VFP sería algo así

oHTTP.setRequestHeader('xxxxxxxxxx','xxxxxxxxxxxxx')

habría que probarlo con el sitio al cual apuntas...

Saludos

Sergio Monroy

unread,
Jan 21, 2016, 9:45:48 PM1/21/16
to Comunidad de Visual Foxpro en Español
Gracias mapner por tu ayuda, pero fijate que no esta enviando la informacion, te dejo aqui la function ya como quedo, no se que me este faltando, si tengo que instalar algo, o agregar algo a mi proyecto, pero no la esta enviando, ademas como puedo saber la respuesta, si lo hizo correctamente o no

Esta es la function como quedo:

function ENVIA(csucursal_id,cfarmaco_id,nexistencia,napartado)

cURL = 'http://farmacias.solorzano-asoc.com/almacen'

cDATA=alltrim("sucursal_id="+csucursal_id+","+"farmaco_id="+cfarmaco_id+","+"existencia="+alltrim(str(nexistencia))+","+"apartado="+alltrim(str(napartado)))

oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')

oHTTP.OPEN("POST", cURL, .F.)

oHTTP.setRequestHeader('solorzano-api-name: test','solorzano-api-password: 123456')

oHTTP.setRequestHeader("Content-Type", "text/xml;charset=utf-8")

crespuesta = (oHTTP.SEND(cDATA))

endfunc


Asi la mando llamar:

c_farma = alltrim(str(n_emp+n_suc))

c_partno = "0002585"

n_qty = 10

n_apartado = 5

Envia(c_farma,c_partno,n_qty,n_apartado)


Muchas Gracias por tu apoyo

mapner

unread,
Jan 22, 2016, 1:39:30 PM1/22/16
to Comunidad de Visual Foxpro en Español
Sergio,

te mando el código de la solución

ENVIA('1','1',0,10)

PROCEDURE ENVIA(csucursal_id,cfarmaco_id,nexistencia,napartado)
LOCAL lOk, oHTTP, cURL, cDATA, cResponse

TRY

cDATA='sucursal_id='+TRANSFORM(csucursal_id)
cDATA=cDATA+'&farmaco_id='+TRANSFORM(cfarmaco_id)
cDATA=cDATA+'&existencia='+TRANSFORM(nexistencia)
cDATA=cDATA+'&apartado='+TRANSFORM(napartado)

oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')

oHTTP.OPEN('POST', cURL, .F.)

oHTTP.setRequestHeader('solorzano-api-name', 'test')
oHTTP.setRequestHeader('solorzano-api-password', '123456')
oHTTP.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded')
oHTTP.SEND(cDATA)
lOk = .T.
CATCH TO loErr
cResponse = '{ "Error:" '+ TRANSFORM(loErr.ErrorNo) + loErr.MESSAGE+'}'
ENDTRY
IF lOk
IF oHTTP.STATUS = 200
cResponse = oHTTP.responseText
ELSE
cResponse = '{"Error": "No se logró la conexión con el Web Service.'+oHTTP.responseText+'"}'
lOk = .F.
ENDIF
ENDIF

oHTTP = NULL

MESSAGEBOX(cResponse)

RETURN lOk

ENDPROC

* Saludos
* mapner

Sergio Monroy

unread,
Jan 22, 2016, 2:28:04 PM1/22/16
to Comunidad de Visual Foxpro en Español
Muchisimas Gracias mapner, estoy hacienda pruebas pero parece que ya funciono, muchas gracias nuevamente

Sergio Monroy

unread,
Jan 28, 2016, 4:07:42 PM1/28/16
to Comunidad de Visual Foxpro en Español
Muchas gracias a todos lo que me ayudaron, tengo otra duda, como se dieron cuenta me falta mucho por aprender esto de los wservise desde la logica hasta la sintaxis, alguna idea con que puedo empezar a aprender, ya que esto mismo se lo pregunte a alguien mas y me contesto, "pues aqui en el foro"...jeje si entiendo, pero ni siquiera se que preguntar o como empezar... alguna idea?

Muchas gracias por su apoyo


El martes, 19 de enero de 2016, 21:59:29 (UTC-8), Sergio Monroy escribió:

Edgar Acevedo

unread,
Jan 29, 2016, 1:25:24 AM1/29/16
to publicesvfoxpro
Si ya te funcionó. ¿Podrías orientarnos con un ejemplo sobre cómo lo hiciste funcionar?

Sergio Monroy

unread,
Jan 29, 2016, 1:37:10 AM1/29/16
to publice...@googlegroups.com

La rutina que hizo mapner funciona perfectamente

Reply all
Reply to author
Forward
0 new messages