ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Executar um código javascript com o delphi

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Mobile com Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
katumblo
Novato
Novato


Registrado: Sábado, 1 de Junho de 2019
Mensagens: 3

MensagemEnviada: Sáb Jun 01, 2019 1:54 pm    Assunto: Executar um código javascript com o delphi Responder com Citação

Galera, boa tarde.

Eu to querendo usar um intermediador de pagamento, e pra usar cartão de crédito eu tenho que criptografar os dados do cartão através de um script (em JS) que o site disponibiliza ( https://sandbox.boletobancario.com/boletofacil/wro/direct-checkout.min.js )

Alguém pode me ajudar sobre como eu posso enviar os dados do cartão para essa função em JS e obter o resultado ? Eu entendo nada de JS, mas o código de exemplo (se eu tivesse desenvolvendo na linguagem deles) é esse:

Código:
  <script>
var checkout = new DirectCheckout(' TOKEN ');
var cardData = {
    cardNumber: '0000000000000000',
    holderName: 'Name',
    securityCode: '000',
    expirationMonth: '12',
    expirationYear: '2045'
};

checkout.getCardHash(cardData, function(cardHash) {
    /* Sucess */
}, function(error) {
    /* Error */
});
</script>


(Obs: Estou fazendo a aplicação para Android)
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
katumblo
Novato
Novato


Registrado: Sábado, 1 de Junho de 2019
Mensagens: 3

MensagemEnviada: Seg Jun 03, 2019 11:00 am    Assunto: Responder com Citação

Alguém aí pode me ajudar? Até agora não achei a solução
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Seg Jun 03, 2019 3:40 pm    Assunto: Responder com Citação

vai precisar de um ambiente que carregue sandbox.boletobancario.com/boletofacil/wro/direct-checkout.min.js e a deixe disponivel para todas as demais possiveis rotinas criada posteriomente.


voce em delphi só vai conseguir algo funcional usando o Twebbrowser, claramente que o intermediador de pagamento não estar a disponibilizar esta soluções em delphi e sim para uma linguagem voltada para web com o foco em javascript.

mais vamos ve como poderia ser feito no delphi com o uso do twebbroswer.


codigo:
Código:
unit Unit2;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.WebBrowser, FMX.Edit;

type
  TForm2 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    edit_TOKEN: TEdit;
    edit_cardNumber: TEdit;
    edit_holderName: TEdit;
    edit_securityCode: TEdit;
    edit_expirationMonth: TEdit;
    edit_expirationYear: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
sourcerHtml=
'<html>'+
'<head>'+
'</head>'+
'<body>'+
'<div id="resultado">Aguarde...</div>'+
'<script type="text/javascript" src="https://sandbox.boletobancario.com/boletofacil/wro/direct-checkout.min.js"></script>'+
'<script>'+
'var checkout = new DirectCheckout("%TOKEN%");'+
'var cardData = {'+
'    cardNumber: "%cardNumber%",'+
'    holderName: "%holderName%",'+
'    securityCode: %securityCode%,'+
'    expirationMonth: "%expirationMonth%",'+
'    expirationYear: "%expirationYear%"'+
'};'+
'checkout.getCardHash(cardData, function(cardHash) {'+
'    document.getElementById(resultado).innerHTML=cardHash.toString();'+
'}, function(error) {'+
'    document.getElementById(resultado).innerHTML=error.toString();'+
'});'+
'</script>'+
'</body>'+
'</html>';

var
  Form2: TForm2;

implementation

{$R *.fmx}

procedure TForm2.Button1Click(Sender: TObject);
var
 txthtml:string;
begin
 txthtml:=sourcerHtml;
 txthtml:=StringReplace(txthtml,'%TOKEN%',edit_TOKEN.text,[]);
 txthtml:=StringReplace(txthtml,'%cardNumber%',edit_cardNumber.text,[]);
 txthtml:=StringReplace(txthtml,'%holderName%',edit_holderName.text,[]);
 txthtml:=StringReplace(txthtml,'%securityCode%',edit_securityCode.text,[]);
 txthtml:=StringReplace(txthtml,'%expirationMonth%',edit_expirationMonth.text,[]);
 txthtml:=StringReplace(txthtml,'%expirationYear%',edit_expirationYear.text,[]);
 WebBrowser1.LoadFromStrings(txthtml,'');
end;

end.




a ideia é preparar na mão um codigo string de um html que carregue a sandbox.boletobancario.com/boletofacil/wro/direct-checkout.min.js e em seguida rode um outro script

voce pode rodar um script no corpo do body de um html e tiver voce editado o mesmo na mão com o uso da função LoadFromStrings do twebbroswer, mais caso o conteudo forsse online então precisaria rodar o script por meio da função EvaluateJavaScript do twebbroswer, no seu caso será o primeiro metodo, a introdução do script será no body com o uso da função LoadFromStrings do twebbroswer.



se os edits estiverem correto, se o token estiver correto a div de id resultado deverar receber a informação do intermediador de pagamento.
é tb provavel que este meio tb não funcione se caso o intermediador de pagamento requerir que as solicitações feita seja de alguma pagina hospedada e não local no client, bom vale apenas testar os dois meio.

se o intermediador de pagamento requerir que a solicitação seja feita por uma pagina hospedada então vai precisar ter um site em algum local com o codio html e chama-lo no delphi no twebbroswer.

pode add meu skype: strak2005, caso queira o codigo fonte e o executavel do codigo acima.

abraço e boa sorte!.
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
katumblo
Novato
Novato


Registrado: Sábado, 1 de Junho de 2019
Mensagens: 3

MensagemEnviada: Ter Jun 04, 2019 1:55 pm    Assunto: Responder com Citação

strak2012 escreveu:
vai precisar de um ambiente que carregue sandbox.boletobancario.com/boletofacil/wro/direct-checkout.min.js e a deixe disponivel para todas as demais possiveis rotinas criada posteriomente.


voce em delphi só vai conseguir algo funcional usando o Twebbrowser, claramente que o intermediador de pagamento não estar a disponibilizar esta soluções em delphi e sim para uma linguagem voltada para web com o foco em javascript.

mais vamos ve como poderia ser feito no delphi com o uso do twebbroswer.


codigo:
Código:
unit Unit2;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.WebBrowser, FMX.Edit;

type
  TForm2 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    edit_TOKEN: TEdit;
    edit_cardNumber: TEdit;
    edit_holderName: TEdit;
    edit_securityCode: TEdit;
    edit_expirationMonth: TEdit;
    edit_expirationYear: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
sourcerHtml=
'<html>'+
'<head>'+
'</head>'+
'<body>'+
'<div>Aguarde...</div>'+
'<script></script>'+
'<script>'+
'var checkout = new DirectCheckout("%TOKEN%");'+
'var cardData = {'+
'    cardNumber: "%cardNumber%",'+
'    holderName: "%holderName%",'+
'    securityCode: %securityCode%,'+
'    expirationMonth: "%expirationMonth%",'+
'    expirationYear: "%expirationYear%"'+
'};'+
'checkout.getCardHash(cardData, function(cardHash) {'+
'    document.getElementById(resultado).innerHTML=cardHash.toString();'+
'}, function(error) {'+
'    document.getElementById(resultado).innerHTML=error.toString();'+
'});'+
'</script>'+
'</body>'+
'</html>';

var
  Form2: TForm2;

implementation

{$R *.fmx}

procedure TForm2.Button1Click(Sender: TObject);
var
 txthtml:string;
begin
 txthtml:=sourcerHtml;
 txthtml:=StringReplace(txthtml,'%TOKEN%',edit_TOKEN.text,[]);
 txthtml:=StringReplace(txthtml,'%cardNumber%',edit_cardNumber.text,[]);
 txthtml:=StringReplace(txthtml,'%holderName%',edit_holderName.text,[]);
 txthtml:=StringReplace(txthtml,'%securityCode%',edit_securityCode.text,[]);
 txthtml:=StringReplace(txthtml,'%expirationMonth%',edit_expirationMonth.text,[]);
 txthtml:=StringReplace(txthtml,'%expirationYear%',edit_expirationYear.text,[]);
 WebBrowser1.LoadFromStrings(txthtml,'');
end;

end.




a ideia é preparar na mão um codigo string de um html que carregue a sandbox.boletobancario.com/boletofacil/wro/direct-checkout.min.js e em seguida rode um outro script

voce pode rodar um script no corpo do body de um html e tiver voce editado o mesmo na mão com o uso da função LoadFromStrings do twebbroswer, mais caso o conteudo forsse online então precisaria rodar o script por meio da função EvaluateJavaScript do twebbroswer, no seu caso será o primeiro metodo, a introdução do script será no body com o uso da função LoadFromStrings do twebbroswer.



se os edits estiverem correto, se o token estiver correto a div de id resultado deverar receber a informação do intermediador de pagamento.
é tb provavel que este meio tb não funcione se caso o intermediador de pagamento requerir que as solicitações feita seja de alguma pagina hospedada e não local no client, bom vale apenas testar os dois meio.

se o intermediador de pagamento requerir que a solicitação seja feita por uma pagina hospedada então vai precisar ter um site em algum local com o codio html e chama-lo no delphi no twebbroswer.

pode add meu skype: strak2005, caso queira o codigo fonte e o executavel do codigo acima.

abraço e boa sorte!.


Cara, MUITISSIMO obrigado pela ajuda, sério ! Eu não tenho palavras para descrever o quanto você ajudou.

Só fiquei com dúvida em uma coisa: Como faço para pegar o resultado (ou seja, o hash) ? No html ele está aramazenado na variável cardHash na função:
Código:
'checkout.getCardHash(cardData, function(cardHash) {'+
'    document.getElementById(resultado).innerHTML=cardHash.toString();'+
'}, function(error) {'+
'    document.getElementById(resultado).innerHTML=error.toString();'+
'});'+


Mas como eu posso retirar o valor dessa variável daí ?

Obrigado pela atenção
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Mobile com Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB