Consumir este webservice
tenho a seguinte classe:
arrayEntrada = class(TRemotable)
private
Fvscode: WideString;
Fvsusername: WideString;
Fvspass: WideString;
Fongcode: WideString;
Fvalue: WideString;
Fname_: WideString;
Femail: WideString;
Fphone: WideString;
Fpurchasecode: WideString;
published
property vscode: WideString read Fvscode write Fvscode;
property vsusername: WideString read Fvsusername write Fvsusername;
property vspass: WideString read Fvspass write Fvspass;
property ongcode: WideString read Fongcode write Fongcode;
property value: WideString read Fvalue write Fvalue;
property name_: WideString read Fname_ write Fname_;
property email: WideString read Femail write Femail;
property phone: WideString read Fphone write Fphone;
property purchasecode: WideString read Fpurchasecode write Fpurchasecode;
end;
e a função:
function setDonation(const arrayParametros: arrayEntrada): WideString; stdcall;
como utilizar essa função passando os parametros da classe?
Obrigado desde já!
arrayEntrada = class(TRemotable)
private
Fvscode: WideString;
Fvsusername: WideString;
Fvspass: WideString;
Fongcode: WideString;
Fvalue: WideString;
Fname_: WideString;
Femail: WideString;
Fphone: WideString;
Fpurchasecode: WideString;
published
property vscode: WideString read Fvscode write Fvscode;
property vsusername: WideString read Fvsusername write Fvsusername;
property vspass: WideString read Fvspass write Fvspass;
property ongcode: WideString read Fongcode write Fongcode;
property value: WideString read Fvalue write Fvalue;
property name_: WideString read Fname_ write Fname_;
property email: WideString read Femail write Femail;
property phone: WideString read Fphone write Fphone;
property purchasecode: WideString read Fpurchasecode write Fpurchasecode;
end;
e a função:
function setDonation(const arrayParametros: arrayEntrada): WideString; stdcall;
como utilizar essa função passando os parametros da classe?
Obrigado desde já!
Murilo Junqueira
Curtidas 0
Respostas
Claudia Nogueira
19/11/2012
Você pode declarar no uses do form a unit que contenha a classe que você citou.
Aí você declara uma variável do tipo arrayEntrada, carrega ela com as informações e chama a função.
Tenta assim:
Aí você declara uma variável do tipo arrayEntrada, carrega ela com as informações e chama a função.
Tenta assim:
procedure TForm2.BitBtn1Click(Sender: TObject); Var arr : arrayEntrada; begin arr.Fvscode := ''; arr.Fvsusername := ''; arr.Fvspass := ''; arr.Fongcode := ''; arr.Fvalue := ''; arr.Fname_ := ''; arr.Femail := ''; arr.Fphone := ''; arr.Fpurchasecode := ''; setDonation(arr); end;
GOSTEI 0
Rodolpho Silva
19/11/2012
Se você usar o WSDL import do Delphi, ele já vai montar esse método para você...
GOSTEI 0
Murilo Junqueira
19/11/2012
Obrigado por responder,
já importei o wsdl, já tenho o metodo, o tipo da variavel array
crio ela assim:
o problema consigo enviar e receber a resposta do webservice, o problema é que a resposta é como se ele não tivesse recebido os parametros (vscode is required)
o webservice é em PHP
segue url caso queiram importar o wsld
http://www.net4help.org/ws/n4h.wsdl
por isso perguntei como enviaria esses parametros!
Obrigado novamente!
já importei o wsdl, já tenho o metodo, o tipo da variavel array
crio ela assim:
var teste : arrayEntrada; begin teste := arrayEntrada.Create; teste.vscode := '1313'; teste.vsusername := 'teste'; teste.vspass := 'teste'; teste.ongcode := '1383'; teste.value := '5.0'; teste.name_ := 'Murilo Junqueira'; teste.email := 'darkducke@gmail.com'; teste.phone := '(62)8119-0058'; teste.purchasecode := 'x45s4d'; xT := ObjSoap.setDonation(teste); end;
o problema consigo enviar e receber a resposta do webservice, o problema é que a resposta é como se ele não tivesse recebido os parametros (vscode is required)
o webservice é em PHP
segue url caso queiram importar o wsld
http://www.net4help.org/ws/n4h.wsdl
por isso perguntei como enviaria esses parametros!
Obrigado novamente!
GOSTEI 0
Rodolpho Silva
19/11/2012
Bem,
Pelo que você postou, você está fazendo da maneira correta, passando o objeto (array) como parâmetro do método SOAP. Como o WS é em PHP (e eu não conheço nada de PHP :( ) tem como você obter o XML que o WS está recebendo? Aí, pode ser mais fácil identificar o que está acontecendo. Acho que a linha inicial, a princípio é essa.
Pelo que você postou, você está fazendo da maneira correta, passando o objeto (array) como parâmetro do método SOAP. Como o WS é em PHP (e eu não conheço nada de PHP :( ) tem como você obter o XML que o WS está recebendo? Aí, pode ser mais fácil identificar o que está acontecendo. Acho que a linha inicial, a princípio é essa.
GOSTEI 0
Claudia Nogueira
19/11/2012
Murilo quando importei no Delphi 7 e fiz o mesmo código que você, deu esse mesmo retorno.
Quando importei no Delphi XE, na Unit criada, onde estava String mudei pra WideString e ao executar a função o retorno foi diferente:
{"status":3,"pincode":"","smssent":0,"emailsent":0,"me...:"virtual store username \/password\/code do not match}
Você sabe como tem que ser o retorno?
Quando importei no Delphi XE, na Unit criada, onde estava String mudei pra WideString e ao executar a função o retorno foi diferente:
{"status":3,"pincode":"","smssent":0,"emailsent":0,"me...:"virtual store username \/password\/code do not match}
Você sabe como tem que ser o retorno?
GOSTEI 0
Murilo Junqueira
19/11/2012
Murilo quando importei no Delphi 7 e fiz o mesmo código que você, deu esse mesmo retorno.
Quando importei no Delphi XE, na Unit criada, onde estava String mudei pra WideString e ao executar a função o retorno foi diferente:
{"status":3,"pincode":"","smssent":0,"emailsent":0,"me...:"virtual store username \/password\/code do not match}
Você sabe como tem que ser o retorno?
Quando importei no Delphi XE, na Unit criada, onde estava String mudei pra WideString e ao executar a função o retorno foi diferente:
{"status":3,"pincode":"","smssent":0,"emailsent":0,"me...:"virtual store username \/password\/code do not match}
Você sabe como tem que ser o retorno?
Olá Claudia, creio que o problema está ao importar o wsdl no delphi 7... vc passou os parametros citados a cima?
vscode, password etc?
o retorno deveria ser "donation successful" poderia me enviar a unit que vc criou para eu fazer uns testes?
Obrigado novamente!
GOSTEI 0
Murilo Junqueira
19/11/2012
tb criei pelo delphi XE e pra mim deu o mesmo erro, como se os parâmetros não estivessem chegando ao webservice!
vc pode me passar a unit criada pelo seu import do delphi XE?
Obrigado!
vc pode me passar a unit criada pelo seu import do delphi XE?
Obrigado!
GOSTEI 0
Claudia Nogueira
19/11/2012
Murilo acabei de refazer aqui, pois eu não tinha mais o exemplo.
E olha minha surpresa: donation successfully.
Meu botão ficou assim:
Olha a unit gerada no import:
E olha minha surpresa: donation successfully.
Meu botão ficou assim:
procedure TForm2.BitBtn1Click(Sender: TObject); var teste : arrayEntrada; resultado : String; begin teste := arrayEntrada.Create; teste.vscode := '1313'; teste.vsusername := 'teste'; teste.vspass := 'teste'; teste.ongcode := '1383'; teste.value := '5.0'; teste.name_ := 'Murilo Junqueira'; teste.email := 'darkducke@gmail.com'; teste.phone := '(62)8119-0058'; teste.purchasecode := 'x45s4d'; resultado := Getserver_setDonationPortType.setDonation(teste); ShowMessage(resultado); end;
Olha a unit gerada no import:
// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL : C:\Users\claudia\Downloads\n4h.wsdl
// >Import : C:\Users\claudia\Downloads\n4h.wsdl>0
// Encoding : ISO-8859-1
// Version : 1.0
// (27/11/2012 11:14:18 - - $Rev: 28374 $)
// ************************************************************************ //
unit n4h;
interface
uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;
type
// ************************************************************************ //
// The following types, referred to in the WSDL document are not being represented
// in this file. They are either aliases[@] of other types represented or were referred
// to but never[!] declared in the document. The types from the latter category
// typically map to predefined/known XML or Embarcadero types; however, they could also
// indicate incorrect WSDL documents that failed to declare or import a schema type.
// ************************************************************************ //
// !:string - "http://www.w3.org/2001/XMLSchema"[Gbl]
arrayEntrada = class; { "urn:server.setDonation"[GblCplx] }
// ************************************************************************ //
// XML : arrayEntrada, global, <complexType>
// Namespace : urn:server.setDonation
// ************************************************************************ //
arrayEntrada = class(TRemotable)
private
Fvscode: string;
Fvsusername: string;
Fvspass: string;
Fongcode: string;
Fvalue: string;
Fname_: string;
Femail: string;
Fphone: string;
Fpurchasecode: string;
published
property vscode: string read Fvscode write Fvscode;
property vsusername: string read Fvsusername write Fvsusername;
property vspass: string read Fvspass write Fvspass;
property ongcode: string read Fongcode write Fongcode;
property value: string read Fvalue write Fvalue;
property name_: string read Fname_ write Fname_;
property email: string read Femail write Femail;
property phone: string read Fphone write Fphone;
property purchasecode: string read Fpurchasecode write Fpurchasecode;
end;
// ************************************************************************ //
// Name : server.setDonationPortType
// Namespace : urn:server.setDonation
// soapAction: urn:server.setDonation#setDonation
// transport : http://schemas.xmlsoap.org/soap/http
// style : rpc
// binding : server.setDonationBinding
// service : server.setDonation
// port : server.setDonationPort
// URL : http://www.net4help.org/ws/n4h.php
// ************************************************************************ //
server_setDonationPortType = interface(IInvokable)
['{B3AC45E3-A145-0476-BA43-E4CA9B349974}']
function setDonation(const arrayParametros: arrayEntrada): string; stdcall;
end;
function Getserver_setDonationPortType(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): server_setDonationPortType;
implementation
uses SysUtils;
function Getserver_setDonationPortType(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): server_setDonationPortType;
const
defWSDL = 'C:\Users\claudia\Downloads\n4h.wsdl';
defURL = 'http://www.net4help.org/ws/n4h.php';
defSvc = 'server.setDonation';
defPrt = 'server.setDonationPort';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as server_setDonationPortType);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
initialization
InvRegistry.RegisterInterface(TypeInfo(server_setDonationPortType), 'urn:server.setDonation', 'ISO-8859-1', '', 'server.setDonationPortType');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(server_setDonationPortType), 'urn:server.setDonation#setDonation');
RemClassRegistry.RegisterXSClass(arrayEntrada, 'urn:server.setDonation', 'arrayEntrada');
RemClassRegistry.RegisterExternalPropName(TypeInfo(arrayEntrada), 'name_', 'name');
end.
GOSTEI 0
Claudia Nogueira
19/11/2012
Esqueci de mencionar, fiz no XE e o retorno exato foi esse:
{"emailsent":1,"smssent":1,"status":1,"pincode":"138...:"donation successfully}
{"emailsent":1,"smssent":1,"status":1,"pincode":"138...:"donation successfully}
GOSTEI 0
Murilo Junqueira
19/11/2012
Esqueci de mencionar, fiz no XE e o retorno exato foi esse:
{"emailsent":1,"smssent":1,"status":1,"pincode":"138...:"donation successfully}
{"emailsent":1,"smssent":1,"status":1,"pincode":"138...:"donation successfully}
Eu vi mesmo, recebi alguns sms de confirmação aqui....
Obrigado, irei fazer os testes e posto o resultado aqui!
GOSTEI 0
Murilo Junqueira
19/11/2012
Deu certo, muitíssimo obrigado!
;)
;)
GOSTEI 0
Claudia Nogueira
19/11/2012
Por nada. :)
Deu certo, muitíssimo obrigado!
;)
;)
GOSTEI 0