VB para Delphi
Caros, bom dia.
tenho um exemplo, de uma apostila, feita em VB.
O QUE ESTE PROGRAMA FAZ: ele conecta via API, num sisteama de website, e atualiza o que banco de dados, preciso fazer a mesma coisa, so que em delphi.
quais componentes devo utilizar para executar a mesma rotina em delphi ?
obrigado.
segue codigo em vbscript:
Segue exemplo de integração em VBScript:
Option Explicit
Dim oHTTP,sHTTP,sParam
'Exemplo de relatóriosParam=""
BuildParam "StoreName","SP Departamentos"
BuildParam "StoreID",184
BuildParam "Username","Paulo"
BuildParam "Password","123456"
BuildParam "method","ReportView"
BuildParam "ObjectID",424 'ObjectID do relatório "Lista de pedidos para alterações via API"BuildParam "Par1",4
BuildParam "OutputFormat",1
ExecutaAPI
'Exemplo de alteração de um pedidosParam=""
BuildParam "StoreName","SP Departamentos"
BuildParam "StoreID",184
BuildParam "Username","Paulo"
BuildParam "Password","123456"
BuildParam "method","OrderUpdate"
BuildParam "XMLRecords","<Records><Record><Field Name=""NumPedido"" Value=""25013""/><Field Name=""ObsCurta"" Value=""Cheque OK""/><Field Name=""Status"" Value=""6""/><Field Name=""ObjSedex"" Value=""SDX0002999""/></Record></Records>"
ExecutaAPI
Sub BuildParam(sName,sValue) sParam=sParam & sName &"="& URLEncode(sValue) &"&"
End Sub
Function URLEncode(sText) Dim i,char,sOut,AscChar For i=1 To Len(sText) char=Mid(sText,i,1)
AscChar=Asc(char)
If AscChar=32 Then 'Converte espaço para + sOut=sOut &"+"
ElseIf (AscChar<48 OR AscChar>122) OR (AscChar>57 AND AscChar<65) OR (AscChar>90 AND AscChar<97) Then sOut=sOut &"%"& FormatZeros(Hex(AscChar),2)
Else sOut=sOut & char
End If Next URLEncode=sOut
End Function
Function FormatZeros(Num,nz)'Retorna string formatada com nz zeros à frente Dim sNum,iTrunc,LenNum sNum=Trim(Num)
LenNum=Len(sNum)
If LenNum>Int(nz) Then iTrunc=LenNum
Else iTrunc=nz
End If FormatZeros=Right(String(nz,"0")& sNum,iTrunc)
End Function
Sub ExecutaAPI Set oHTTP=CreateObject("WinHttp.WinHttpRequest.5.1") oHTTP.Open "POST","https://www.rumo.com.br/sistema/adm/APILogon.asp",False
oHTTP.Option(0)="FastCommerce API Interface" 'Alterar o UserAgent, para evitar filtragem do FC
oHTTP.SetRequestHeader "Content-type","application/x-www-form-urlencoded"
oHTTP.Send sParam
WScript.echo oHTTP.ResponseText
Set oHTTP=
tenho um exemplo, de uma apostila, feita em VB.
O QUE ESTE PROGRAMA FAZ: ele conecta via API, num sisteama de website, e atualiza o que banco de dados, preciso fazer a mesma coisa, so que em delphi.
quais componentes devo utilizar para executar a mesma rotina em delphi ?
obrigado.
segue codigo em vbscript:
Segue exemplo de integração em VBScript:
Option Explicit
Dim oHTTP,sHTTP,sParam
'Exemplo de relatóriosParam=""
BuildParam "StoreName","SP Departamentos"
BuildParam "StoreID",184
BuildParam "Username","Paulo"
BuildParam "Password","123456"
BuildParam "method","ReportView"
BuildParam "ObjectID",424 'ObjectID do relatório "Lista de pedidos para alterações via API"BuildParam "Par1",4
BuildParam "OutputFormat",1
ExecutaAPI
'Exemplo de alteração de um pedidosParam=""
BuildParam "StoreName","SP Departamentos"
BuildParam "StoreID",184
BuildParam "Username","Paulo"
BuildParam "Password","123456"
BuildParam "method","OrderUpdate"
BuildParam "XMLRecords","<Records><Record><Field Name=""NumPedido"" Value=""25013""/><Field Name=""ObsCurta"" Value=""Cheque OK""/><Field Name=""Status"" Value=""6""/><Field Name=""ObjSedex"" Value=""SDX0002999""/></Record></Records>"
ExecutaAPI
Sub BuildParam(sName,sValue) sParam=sParam & sName &"="& URLEncode(sValue) &"&"
End Sub
Function URLEncode(sText) Dim i,char,sOut,AscChar For i=1 To Len(sText) char=Mid(sText,i,1)
AscChar=Asc(char)
If AscChar=32 Then 'Converte espaço para + sOut=sOut &"+"
ElseIf (AscChar<48 OR AscChar>122) OR (AscChar>57 AND AscChar<65) OR (AscChar>90 AND AscChar<97) Then sOut=sOut &"%"& FormatZeros(Hex(AscChar),2)
Else sOut=sOut & char
End If Next URLEncode=sOut
End Function
Function FormatZeros(Num,nz)'Retorna string formatada com nz zeros à frente Dim sNum,iTrunc,LenNum sNum=Trim(Num)
LenNum=Len(sNum)
If LenNum>Int(nz) Then iTrunc=LenNum
Else iTrunc=nz
End If FormatZeros=Right(String(nz,"0")& sNum,iTrunc)
End Function
Sub ExecutaAPI Set oHTTP=CreateObject("WinHttp.WinHttpRequest.5.1") oHTTP.Open "POST","https://www.rumo.com.br/sistema/adm/APILogon.asp",False
oHTTP.Option(0)="FastCommerce API Interface" 'Alterar o UserAgent, para evitar filtragem do FC
oHTTP.SetRequestHeader "Content-type","application/x-www-form-urlencoded"
oHTTP.Send sParam
WScript.echo oHTTP.ResponseText
Set oHTTP=
Cleber Campos.
Curtidas 1
Respostas
André Duarte
27/05/2010
Fala, meu amigo... vi que esse post seu é de 2010 e aqui caí em 2016, com exatamente a mesma dúvida. Você encontrou alguma solução? Estou tentando montar um sistema de ERP para a loja da minha mãe, que usa a mesma plataforma (fast commerce) que você citou. Ainda está frequentando este site?
GOSTEI 0
Jonatas Alves
27/05/2010
Olá,
sei que é tarde demais, pois os post's são de 2010 e 2016, mas se alguém tiver esta dúvida, este passo a passo pode ajudar.
1º Criar um projeto em Delphi ;
2º Importar a biblioteca WinHTTP: Menu 'Component' > SubMenu 'Import Component' > Será apresentada a janela 'Import Component', nela clique na opção 'Import a Type Library' e então clique no botão 'Next' > No campo 'Search' digite 'winhttp' - Assumindo que este recurso está devidamente instalado em seu computador [Sistema Operacional >= Windows XP] - será exibido apenas um resultado 'Microsoft WinHTTP Services...', selecione esta opção e clique em 'Next' > Não se preocupe com estes campos, novamente clique em 'Next' > Clique na opção 'Create Unit' e então clique em 'Finish' > Se tudo ocorreu bem, ao fim será gerado pra você uma unit chamada 'WinHttp_TLB.pas', importante salientar que esta unit não é gerada no diretório do seu projeto, mas sim no diretório 'Imports' da instalação em 'Documents\\RAD Studio\\X.X' ou 'Documents\\Embarcadero\\X.X' ;
3º Agora é necessário instanciar o objeto "WinHTTP" para então poder usá-lo: No evento de algum componente [clique do botão por exemplo], digite o seguinte código
Boa sorte!
sei que é tarde demais, pois os post's são de 2010 e 2016, mas se alguém tiver esta dúvida, este passo a passo pode ajudar.
1º Criar um projeto em Delphi ;
2º Importar a biblioteca WinHTTP: Menu 'Component' > SubMenu 'Import Component' > Será apresentada a janela 'Import Component', nela clique na opção 'Import a Type Library' e então clique no botão 'Next' > No campo 'Search' digite 'winhttp' - Assumindo que este recurso está devidamente instalado em seu computador [Sistema Operacional >= Windows XP] - será exibido apenas um resultado 'Microsoft WinHTTP Services...', selecione esta opção e clique em 'Next' > Não se preocupe com estes campos, novamente clique em 'Next' > Clique na opção 'Create Unit' e então clique em 'Finish' > Se tudo ocorreu bem, ao fim será gerado pra você uma unit chamada 'WinHttp_TLB.pas', importante salientar que esta unit não é gerada no diretório do seu projeto, mas sim no diretório 'Imports' da instalação em 'Documents\\RAD Studio\\X.X' ou 'Documents\\Embarcadero\\X.X' ;
3º Agora é necessário instanciar o objeto "WinHTTP" para então poder usá-lo: No evento de algum componente [clique do botão por exemplo], digite o seguinte código
var
http: IWinHttpRequest;
begin
http := CoWinHttpRequest.Create; // <== Instancia do objeto "WinHttp"
http.open('POST', 'https://www.rumo.com.br/sistema/adm/APILogon.asp', False); // <== Utilizei os dados mencionados na questão inicial (2010)
http.SetRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
http.Option[WinHttpRequestOption_UserAgentString] := '<AQUI_COLOCAR_O_USER_AGENT>' ;
http.send( sParam ) ;
http.responseText ; // <== Este é o conteúdo resultado do processamento
http.Status ; // <== Este é o resultado HTTP: 200, 201, 404 e etc...
end ;
Boa sorte!
GOSTEI 0