Você está criando um aplicativo da Web de comércio eletrônico e precisa oferecer suporte a vários métodos de pagamento (Visa, MasterCard ... etc.) para que seus clientes possam pagar facilmente seus pedidos. Em vez de implementar isso você mesmo, você decide confiar em um provedor de terceiros confiáveis para fornecer esses serviços a você.
Uma empresa bem conhecida da Bélgica que fornece serviços de pagamento é Ogone. Eles fornecem mais de 40 métodos de pagamento internacionais e locais. Eles lidam com as transações de pagamento entre seus clientes, sua loja on -line e os fornecedores de métodos de pagamento (por exemplo, visto).
É claro que você deve pagar uma pequena quantia por cada transação tratada pela Ogone, mas que compra sua proteção de fraude, segurança, ferramentas para gerenciar seus pagamentos ... e muito mais. O custo de implementar tudo isso você mesmo é muito maior.
Então você se inscreve em uma conta Ogone e decide integrar o sistema no seu aplicativo da web.
Como podemos perceber isso? Vamos descobrir ...
Primeiro, vá para o site Ogone e se inscreva para uma conta de teste gratuita. No canto superior direito do site, você "encontrará um botão rotulado" Crie sua conta de teste gratuita ".
Figura 1 - Conta de teste

Clique nele e preencha o formulário resultante. Verifique se os dados inseridos neste formulário estão corretos. Depois de enviar sua solicitação de uma nova conta de teste, um funcionário da Ogone verificará seus detalhes e, dependendo do resultado, aprovará ou rejeitará sua solicitação. Esse processo pode levar algumas horas. Muito irritante, mas não há como contornar isso.
Depois que sua conta for aprovada, você receberá um e-mail que contém sua senha. Agora você está pronto para fazer logon no Ogone Merchant Administration.
Antes de começar a usar sua conta de teste, você precisa definir as seguintes configurações:
Para configurar suas opções de assinatura, clique na conta de opção exibida no menu no lado esquerdo da tela.
Figura 2 - Menu de Administração do Mercante

Na página da conta, você receberá algumas opções, selecione a opção "Sua assinatura". Agora você precisa escolher um tipo de assinatura. Escolha "Aventura" e clique no botão rotulado "Confirme e vá para suas opções".
Aqui você pode adicionar várias opções à sua assinatura, como detecção de fraude, hospedagem de imagens, aparência de fatura ... etc. Para esta demonstração, não precisamos de opções adicionais; portanto, clique em Confirmar para salvar suas configurações.
Depois de configurar seu tipo de assinatura, você pode proceder adicionando os métodos de pagamento que deseja oferecer aos seus clientes. Clique nos métodos de pagamento da opção no menu de administração do comerciante (Figura 2). Depois de adicionar o Visa à lista "Métodos de pagamento selecionados", você precisa editar esse método de pagamento e configurá -lo como ativado.
Figura 3 - Ative o método de pagamento do visto

Basta clicar na opção de edição mostrada na Figura 3, marcar o método de pagamento como ativado (ativação: sim) e clique em enviar. Você pode usar o número do cartão 4111 1111 1111 1111 para testar os pagamentos dos vistos. Basta inserir qualquer coisa para a data de validade e o código de segurança de 3 dígitos.
Por último, mas não menos importante, você precisa definir algumas configurações técnicas que determinam como os pagamentos on -line serão tratados. Prossiga clicando na opção Informações técnicas exibidas no menu (Figura 2).
A página resultante está dividida nas guias a seguir:
Basta clicar nesses links para ver as capturas de tela como configurei minha conta de teste ogone. Eu defini a assinatura SHA-1-in e SHA-1-Out como "MicrosoftSPNet4". Voltaremos a isso mais tarde.
Você já criou e configurou sua conta de teste Ogone. Você está pronto para efetuar seu primeiro pagamento online.
Criei um projeto de aplicativo da Web ASP.NET simples que demonstra como você pode integrar pagamentos Ogone em seu próprio site ativado pelo ASP.NET.
Figura 4 - a solução

Este aplicativo da Web contém apenas algumas páginas:
Observação : como você pode ver, o projeto também contém alguns arquivos de código. Vamos discutir isso nas seções a seguir. Esses arquivos contêm o código necessário para lidar com o processo de pagamento com Ogone. Sinta -se à vontade para melhorar o design, acabei de incluir o mínimo de código para fazer as coisas funcionarem.
Não clique no botão de pagamento inicial exibido abaixo, é apenas uma captura de tela. É assim que a página padrão.aspx se parece:
Figura 5 - Página Padrão.aspx

Uma referência (ou ID do pedido) é gerada para identificar exclusivamente o pedido que está sendo pago. Ogone acompanha essas referências. Você não pode processar a mesma referência duas vezes. É por isso que escolho usar um GUID gerado aleatoriamente para este exemplo. Eu tive que encurtar o GUID para 30 caracteres, porque Ogone não permite mais do que esse limite.
Obviamente, além dessa referência, você também precisa especificar o valor que deve ser pago. O código de exemplo também envia ao longo do endereço de e-mail do cliente em questão. Dessa forma, Ogone pode enviar um e-mail ao cliente de que seu pagamento foi processado com sucesso.
Vamos ver o código escondido por trás do evento de clique do botão:
Listagem 1 - Solicite o pagamento ogone
// Persist order to database
// ...
OgoneRequest ogoneRequest = new OgoneRequest ( ) ;
ogoneRequest . RequestPayment ( this . _reference , amount , customerEmail ) ;
// Clear shopping cart
// ...Você pode iniciar um pagamento criando uma nova instância da classe OgoneRequest e chamando o método RequestPayment (...). Este método requer 3 parâmetros, a saber, a referência do pedido, o valor que precisa ser pago e o endereço de e-mail do cliente.
Listagem 2 - Construtor Ogonerequest
public OgoneRequest ( )
{
OgoneUrl = ConfigurationManager . AppSettings [ "Ogone_Url" ] ;
Psid = ConfigurationManager . AppSettings [ "Ogone_PSID" ] ;
ShaKey = ConfigurationManager . AppSettings [ "Ogone_SHA1_IN" ] ;
Currency = ConfigurationManager . AppSettings [ "Ogone_Currency" ] ;
Language = ConfigurationManager . AppSettings [ "Ogone_Language" ] ;
AcceptUrl = ConfigurationManager . AppSettings [ "Ogone_AcceptUrl" ] ;
ExceptionUrl = ConfigurationManager . AppSettings [ "Ogone_ExceptionUrl" ] ;
CancellationUrl = ConfigurationManager . AppSettings [ "Ogone_CancellationUrl" ] ;
}O construtor da classe Ogonerequest inicializa algumas propriedades lendo alguns valores do arquivo de configuração do aplicativo (web.config). Você precisa especificar o URL para ligar para iniciar o processo de pagamento, seu Ogone PSID (nome de usuário), a tecla SHA1-in que você especificou na administração do comerciante, os URLs de redirecionamento ... etc.
Listagem 3 - Método RequestPayment (...)
public void RequestPayment ( string reference , double amount , string email )
{
// Multiply by one hundred and round to zero decimals
amount = Math . Round ( amount * 100 , 0 ) ;
RemotePost post = new RemotePost { Url = this . OgoneUrl } ;
post . Add ( "pspid" , this . Psid ) ;
post . Add ( "orderid" , reference ) ;
post . Add ( "amount" , amount . ToString ( ) ) ;
post . Add ( "currency" , this . Currency ) ;
post . Add ( "language" , this . Language ) ;
post . Add ( "email" , email ) ;
// Hash
post . Add ( "SHASign" , Ogone . GenerateHash (
reference + amount + this . Currency +
this . Psid + this . ShaKey ) ) ;
// Redirection URLs
post . Add ( "accepturl" , this . AcceptUrl ) ;
post . Add ( "exceptionurl" , this . ExceptionUrl ) ;
post . Add ( "cancelurl" , this . CancellationUrl ) ;
post . Post ( ) ;
}O método RequestPayment (...) inicia um novo processo de pagamento fazendo uma postagem HTTP usando a classe remotepost. Todas as informações necessárias estão incluídas no post, como o seu PSID, a quantidade que precisa ser paga, o idioma, o sinal de sha1 ... etc.
Você precisa calcular o hash sha1 usando a assinatura SHA1-in que você configurou na administração do comerciante. Ogone afirma que você também precisa incluir a referência, o valor, a moeda e o seu PSID neste hash. Voltaremos a calcular os hashes sha1 mais tarde.
Observação : A postagem HTTP envia ao longo de alguns URLs de redirecionamento que ogone usará quando o pagamento for feito, cancelado ... etc. Se você não os fornecer, os URLs padrão configurados na administração do comerciante serão usados (guia Feedback da transação em informações técnicas).
Figura 6 - Confirmação de pagamento

Depois de iniciar o processo de pagamento, você será redirecionado para uma nova página, como visto na figura acima. Você pode alterar o layout desta página especificando parâmetros adicionais na postagem HTTP. Dê uma olhada no código -fonte que acompanha este artigo e a documentação oficial do Ogone para obter mais informações sobre esse assunto.
Se o usuário clicar no botão Cancelar, o processo de pagamento será encerrado e ele será redirecionado para a página Payment Cancelled.aspx. Esta página mostra apenas uma mensagem de que o usuário cancelou o processo de pagamento.
Mas configuramos nossa conta Ogone de forma que todas as informações relevantes sobre o processo de pagamento sejam incluídas na sequência de consultas. Por exemplo:
http: // localhost: 3767/pageyCancelled.aspx? OrderId = 246cf6f0-8bad-4edb-806c-EED3fb & moeda = eur e valor = 19,99 e pm = Creditcard & Aceptance = & Status = 1 & Cardno = & ed = & cn = & trxdate = 04%2f08%2f10 & payId = 6806803 & ncerror = & brand = ... etc.
Você pode extrair informações como a referência original do pedido, o valor, o método de pagamento (por exemplo: visto), status de sucesso do pagamento ... etc. Você pode registrar ou descartar essas informações, se desejar. Depende de você. Ogone também inclui um hash sha1 composto com a ajuda da assinatura SHA1-Out configurada na administração do comerciante. Este hash permite verificar a identidade da pessoa que fez a solicitação e a validade dos dados presentes na sequência de consultas.
Se o processo de pagamento for concluído com êxito, o Ogone redirecionará o usuário para a página PaymentAcepted.aspx. A sequência de consulta também incluirá os mesmos dados. Durante o evento de carga da página, o status do pagamento e a validade do hash sha são verificados. Se ambos estiverem corretos, o pagamento é aceito.
Listagem 4 - PaymentAcepted.aspx Página Carregar Handler de eventos
OgonePaymentStatus status = OgoneResponse . Status ;
// Invalid Sha key returned from Ogone?
bool paymentSucceeded = OgoneResponse . IsShaSignValid && Ogone . IsPaymentStatusValid ( status ) ;Observação : Ogone inclui um parâmetro chamado status (número inteiro) na sequência de consulta. Esse status informa o status do pagamento. O código de amostra deste artigo envolveu alguns desses valores em um enum chamado OgonePaymentStatus. Confira a documentação oficial do Ogone para obter uma lista de todos os valores possíveis. O método ISPaymentStatusValid (...) verifica se o parâmetro de status de entrada for um dos valores que nos informa que o pagamento foi feito.
O tipo de classe OgoneResponse é apenas um pequeno invólucro que lida com os parâmetros da string de consulta que o Ogone inclui quando redireciona o usuário de volta ao seu site.
A Listagem 5 mostra um pequeno trecho desta classe. A propriedade IssShasignValid lê a assinatura SHA1-Out a partir do arquivo de configuração do aplicativo (web.config) e recalcula o sinal do SHA. Para fazer isso, você deve incluir outros dados, como valor, referência de pedido, moeda ... etc. (Consulte a documentação oficial do Ogone para obter mais informações).
Se o sinal SHA calculado corresponder ao incluído na sequência de consultas, estaremos lidando com uma solicitação originária de Ogone e os dados nos parâmetros da string de consulta serão válidos.
Listagem 5 - Classe OgoneResponse
public static class OgoneResponse
{
public static string OrderId { get { return HttpContext . Current . Request [ "orderid" ] ; } }
public static string Amount { get { return HttpContext . Current . Request [ "amount" ] ; } }
public static string ShaSign { get { return HttpContext . Current . Request [ "shasign" ] ; } }
public static bool IsShaSignValid
{
get
{
string key = OrderId + Currency + Amount + PaymentMethod + AcceptanceCode +
( int ) Status + CardNumber + PaymentId + NcError + Brand +
ConfigurationManager . AppSettings [ "Ogone_SHA1_OUT" ] ;
return ShaSign == Ogone . GenerateHash ( key ) ;
}
}
} A Listagem 6 mostra uma maneira possível de como você pode calcular um hash sha1 para uma string. A string é convertida em uma matriz de bytes e depois codificada usando um sha1cryptoServiceProvider. O hash resultante é então convertido em um formato hexadecimal.
Listagem 6 - Calculando Sha1 Hashes
public static string GenerateHash ( string input )
{
byte [ ] bytes = new ASCIIEncoding ( ) . GetBytes ( input ) ;
SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider ( ) ;
byte [ ] hash = sha . ComputeHash ( bytes ) ;
StringBuilder result = new StringBuilder ( ) ;
for ( int i = 0 ; i < 20 ; i ++ )
{
string temp = hash [ i ] . ToString ( "X2" ) ;
if ( temp . Length == 1 )
{
temp = "0" + temp ;
}
result . Append ( temp ) ;
}
return result . ToString ( ) ;
}E com isso, o artigo termina ...
Espero que você tenha gostado deste tutorial sobre como integrar os serviços de pagamento Ogone ao seu aplicativo da Web de comércio eletrônico. Para recapitular o que abordamos do ponto de vista de um desenvolvedor: