Pergunta

Não sei se isso é possível, não consigo encontrar nenhum outro guia de ajuda, então talvez não seja possível...

Eu tenho uma página de checkout que envia um carregamento de variáveis ​​para um processador de pagamentos de terceiros (WorldPay).

Quero saber se é possível colocar algum tipo de script PHP entre as duas páginas para fins de validação.

Por exemplo, se um item da cesta se esgotar durante o preenchimento do formulário, o cliente poderá pegar o dinheiro antes que o dinheiro seja retirado.Ou útil se eles adulterarem os dados do formulário.

Se eu fizer isso em meu próprio site, posso usar sessões para transmitir os dados do POST, mas como é um site externo, não sei como enviar os dados sem criar outra página HTML com um formulário oculto e atualização, por exemplo.

É possível fazer isso de forma 'invisível' - sem mostrar uma página HTML no meio?

Foi útil?

Solução

Sim, você pode fazer isso conectando-se ao gancho onsubmit do formulário e enviando uma chamada Ajax como esta (usando jQuery):


$('#myform')[0].onsubmit = function() {
  if (form_check_elements(this.elements)) { /* ««« eg JS validator here */
    data = $('#myform').serialize();
    $.post('/ajax_validator.php', data, function(data, textStatus) {
      $('#myform')[0].submit();  /* ««« check the textStatus before here and
                                        eventually do not submit (wrap it in
                                        an if-clause) */
    });
    return false; /* make the form not post directly */
  } else {
    return false; /* do not post if JS validation fails */
  }
};

Usamos esse snippet para armazenar dados de formulário em uma sessão antes de postar para terceiros, para que os tenhamos disponíveis quando o terceiro retornar à nossa página.

Editar: Tenha em mente que isso só funcionará com JS habilitado, mas é seguro para fallback:O formulário ainda é enviado sem suporte JS.

Outras dicas

EDITAR:

Ashley disse:

Ok, dei uma olhada no manual do CLL e escrevi este script muito simples para encaminhar os valores da postagem para o check -out de terceiros.Isso apenas exibe o conteúdo da página de checkout.O endereço da URL mostra que o script atualmente em execução, em vez de encaminhar para o site da terceira parte.Além disso, todos os seus gráficos relativamente vinculados não funcionarão.O encaminhamento 'verdadeiro' pode ser alcançado usando o CURL?

A resposta curta - não.

Da maneira como você descreveu seu processo de pagamento, se quiser entrar no meio do processo externo para fazer coisas (personalizar html/mensagens, validar dados, etc.), então você precisa lidar com todo o processo que cURL permitiria que você faça .

Com cURL, você não "encaminha" a solicitação - você meio que "procura" a solicitação.Portanto, o fato de a URL do navegador nunca mudar e de os gráficos relativos não funcionarem é esperado.Com o uso de cURL ou algo semelhante, você nunca deixaria o usuário final saber que está tocando em uma página externa.você lidaria com todas as solicitações para esse servidor externo em seu servidor e simplesmente exibiria a resposta do servidor externo para seu usuário OU analisaria essa resposta para que pudesse usar os dados dele de maneira personalizada.

Essencialmente, isso significa que se secure.wp3.rbsworldpay.com/wcc/purchase está retornando um formulário que requer interação adicional do usuário. Você deve imitar esse formulário em seu servidor e exibi-lo.Então, quando o usuário enviar seu formulário, você usará cURL novamente para fazer uma solicitação ao servidor externo - desta vez para postar a próxima rodada de dados enviados pelo usuário.Então, por exemplo, digamos:

  • secure.wp3.rbsworldpay.com/wcc/purchase mostra o carrinho
  • secure.wp3.rbsworldpay.com/wcc/confirm mostra uma confirmação final do pagamento a ser feito
  • secure.wp3.rbsworldpay.com/wcc/success e secure.wp3.rbsworldpay.com/wcc/error mostram se a transação foi bem-sucedida ou falhou, respectivamente.

Então você precisará fazer 2 solicitações externamente como parte do seu processo de transação, que pode ser resumido assim:

  1. O usuário compra em seu site e adiciona itens ao carrinho
  2. O usuário clica na finalização da compra e você valida os dados do carrinho/usuário
  3. Se os dados do nº 2 forem válidos, você empacota os dados e publica em secure.wp3.rbsworldpay.com/wcc/purchase via cURL
  4. Se a resposta cURL do nº 3 foi bem-sucedida, você cria sua própria página de confirmação usando dados da resposta cURL e exibe-a ao usuário.
  5. O usuário envia a confirmação da compra para o seu servidor.
  6. Você empacota os dados enviados ao seu servidor no item 5 e os publica em secure.wp3.rbsworldpay.com/wcc/confirm via cURL.
  7. Se a resposta cURL do nº 6 foi bem-sucedida, você a analisa em busca da mensagem de "erro" ou "sucesso" esperada retornada do servidor externo e exibe-as ou suas próprias mensagens de erro personalizadas.
  8. Enxágue e repita em caso de erro ;-)

De modo geral, a maioria dos processadores de pagamento tem uma opção de processamento que suporta esse processo básico, muitas vezes retornando dados fáceis de analisar como XML, JSON ou texto simples em vez de HTML.Você pode querer dar uma olhada nisso.Muitas vezes eles terão bibliotecas construídas para várias linguagens de programação para ajudar a facilitar o processo de integração.


Sim, com certeza é...eu normalmente uso o curl extensão para fazer coisas assim, ou uma classe de cliente http que utiliza curl.Você pode querer tornar isso um pouco mais fácil para você e usar uma dessas bibliotecas de classes - por exemplo Zend_Http_Client.Suporta não só curl mas também soquetes e proxies.

Sim você pode.O que você está procurando é a função CURL:

http://php.net/manual/en/book.curl.php

Veja também:

http://php.dzone.com/news/execute-http-post-using-php-cu

Eu gosto bastante do HTTP_Request2 pacote do PEAR, que basicamente envolve cURL e/ou soquetes em alguns objetos simples.POST funciona muito bem.Você pode usar isso para devolver a solicitação POST ao seu verificador de validação e, em seguida, ao processador de pagamento.

Eu sugiro que você faça assim:

Antes de direcionar um usuário para o formulário, você verifica (por meio de consultas SQL) se o item da cesta está esgotado.Caso tenha sido vendido, redirecione o usuário para alguma outra página dizendo que este item está esgotado, caso contrário deixe-o ir para o formulário para nova compra.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top