Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Diego Farias

Como chamar uma função php em uma aplicação Windows Application - C# ?

Mensagens Recomendadas

Diego Farias

Boa tarde,

Estou desenvolvendo um projeto que faz integração com web services, gostaria de saber se existe a possíbilidade de conectar com o web services via código, no caso sem add web reference, ou add service references.

já tenha a função em php, pensei em converter ela para C#, mas não sei como fazer.

Também pensei em utilizar essa função chamando ela em tempo de execução, só que não sei como utilizar ela em C#:

segue função em php,

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$apiUser = 'user';
$apiKey = 'senha';


$proxy = new SoapClient('http://test:!test123/index.php/api/soap/?wsdl',
   array(
       'trace'    => true,
      'login'    => 'test',
      'password' => '!test123!',
   )
); 

$incrementId = '100000130';
$trackNumber = 'XXXXXXXXX';

$sessionId = $proxy->login( $apiUser, $apiKey); 

$shipmentId = $proxy->call($sessionId, 'sales_order_shipment.create', $incrementId);

$result = $proxy->call($sessionId, 'sales_order_shipment.addTrack', array('shipmentIncrementId' => $shipmentId, 'carrier' => 'pedroteixeira_correios', 'title' => 'Test', 'trackNumber' => $trackNumber));
var_dump($result);

$result = $proxy->call($sessionId, 'sales_order.info', $incrementId);   
echo '<pre>';
var_dump($result);


$result = $proxy->call($sessionId, 'sales_order_shipment.info', $shipmentId);   
var_dump($result);

$result = $proxy->call($sessionId, 'sales_order_shipment.addComment', array(
   'shipmentIncrementId' => $shipmentId,
   'comment' => 'Seu pedido foi enviado. #' . $trackNumber,
   'email' => true,
   'include' => true,
));

var_dump($result);

Alguém poderia me ajudar.

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
General

Olá, penso que tens que fazer com WebRequest:

Exemplo:

string message = "a=2";

string envelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"+

"<soap:Body><Validation xmlns=\"http://myweb.com/WS\"><data>@Data</data></Validation></soap:Body></soap:Envelope>";

string SOAPmessage = envelope.Replace("@Data", System.Web.HttpUtility.HtmlEncode(message));

// The message must be converted to bytes, so it can be sent by the request

byte[] data = Encoding.UTF8.GetBytes(SOAPmessage);

request.ContentLength = data.Length;

request.Timeout = 20000;

Stream dataStream = request.GetRequestStream();

dataStream.Write(data, 0, data.Length);

dataStream.Close();

WebResponse response = request.GetResponse();

Stream inputStream = response.GetResponseStream();

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Diego Farias

Boa tarde, Amigo

Obrigado pela sua contribuição, mas consegui resolver. O problema estava na configuração do WS do Magento.

Contatei o suporte e eles fizeram alguns ajustes WSDL por lá mesmo.

Mas ficou assim o código para acesso:

try

{

WsMagento.PortTypeClient magento = new WsMagento.PortTypeClient();

string strSoapUser = "user";

string strSoapPassword = "senha";

// O método de login(), retorna o código da sessão que foi aberta no momento da conexão com o WS(WebServices)

string strSessionId = magento.login(strSoapUser, strSoapPassword);

string strIncrementId = "100000185";

// Código de rastreio que será inserido na plataforma do magento

string strTrackNumber = "SO552439776BR";

// N° da remessa é retornado, após ser gerado dentro da plataforma do magento

string strShipmentId = (string)magento.call(strSessionId, "sales_order_shipment.create", strIncrementId);

// Array populado será utilizado para adicionar o código de rastreio na plataforma do magento

string[] array = new string[] {

strShipmentId,

"ups",

"Test",

strTrackNumber

};

/* O método "sales_order_shipment.addTrack" adiciona o código de rastreio no magento

* retorno do método é o ID referente ao código que foi inserido no magento */

int nuTranckingNumberID = Convert.ToInt32(magento.call(strSessionId, "sales_order_shipment.addTrack", array));

ArrayList arrList = new ArrayList();

arrList.Add(strShipmentId.ToString()); // shipmentIncrementId

arrList.Add("Seu pedido foi enviado. #" + strTrackNumber); // "comment"

arrList.Add(true); // "email"

arrList.Add(true); // "include"

bool booComentario = (bool)magento.call(strSessionId, "sales_order_shipment.addComment", arrList);

}

catch (Exception ex)

{

MessageBox.Show(string.Format("Detalhes: {0}", ex.Message), "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.