O NASP (Notificação de Alteração de Status de Pagamento) é uma forma automatizada de notificação de pagamentos, onde a MoIP envia dados de um pagamento realizado para uma das páginas de sua aplicação.
Nota: Após criar esta página, cadastre a URL no site do MoIP/Sandbox.
Meus Dados > Preferências > Notificação das Transações. Marque a opção Receber notificação instantânea de venda e digite a URL da pagina no campo URL de notificação.
Após processar qualquer transação. O MoIP envia um POST para sua URL com os parâmetros abaixo.
Parâmetro enviado |
Descrição |
Tipo |
Tamanho Maxímo |
Exemplo |
id_transacao |
Identificador da transação informado por você para
controle em seu site (IdProprio) |
Alfanumérico |
32 |
abcd1234 |
valor |
Valor total do pagamento, sem vírgulas, com casas decimais
(veja exemplo para R$21,90) |
Numérico inteiro |
9 |
2490 |
status_pagamento |
Codigo informando o status atual da transação |
Numérico inteiro |
2 |
3 |
cod_moip |
Código da transação no ambiente MoIP. Valor único
gerado pelo MoIP para cada pagamento. |
Alfanumérico |
32 |
Daw4es-1wq2.341234 |
forma_pagamento |
Codigo informando a forma de pagamento escolhida pelo pagador |
Numérico inteiro |
2 |
1 |
tipo_pagamento |
Tipo de pagamento utilizado, descritivo, em formato de texto |
Alfanumérico |
32 |
CartaoDeCredito |
email_consumidor |
E-mail informado pelo pagador, no MoIP |
Alfanumérico |
45 |
[email protected] |
Abaixo segue mais duas listas detalhadas com status das transações e tipos de pagamento.
Status das transações MoIP (Atenção, o MoIP constuma criar Status novos sem notificar os desenvolvedores)
Status |
Código |
Descrição |
autorizado |
1 |
Pagamento já foi realizado porém ainda não foi creditado na Carteira MoIP recebedora (devido ao floating da forma de pagamento) |
iniciado |
2 |
Pagamento está sendo realizado ou janela do navegador foi fechada (pagamento abandonado) |
boleto impresso |
3 |
Boleto foi impresso e ainda não foi pago |
concluido |
4 |
Pagamento já foi realizado e dinheiro já foi creditado na Carteira MoIP recebedora |
cancelado |
5 |
Pagamento foi cancelado pelo pagador, instituição de pagamento, MoIP ou recebedor antes de ser concluído |
em análise |
6 |
Pagamento foi realizado com cartão de crédito e autorizado, porém está em análise pela Equipe MoIP. Não existe garantia de que será concluído |
estornado |
7 |
Pagamento foi estornado pelo pagador, recebedor, instituição de pagamento ou MoIP |
em revisão |
8 |
Pagamento está em revisão pela equipe de Disputa ou por Chargeback |
reeembolsado |
9 |
Pagamento foi reembolsado diretamente para a carteira MoIP do pagador pelo recebedor do pagamento ou pelo MoIP |
Este artigo foi editado para adiconar os Status 7, 8 e 9, criados recentemente pelo MoIP.
Tipo de Pagamento
Status |
Descrição |
DebitoBancario |
Débito em conta no domicílio bancário do pagador |
FinanciamentoBancario |
Financiamento obtido junto ao domicílio bancário do pagador e o montante total debitado diretamente da conta e creditado na Conta MoIP do recebedor |
BoletoBancario |
Boleto bancário impresso |
CartaoDeCredito |
Cartão de crédito |
CartaoDeDebito |
Cartão de débito Visa Electron (apenas para correntistas do Bradesco) |
CarteiraMoIP |
Diretamente da Conta MoIP do pagador |
Bom, agora vamos criar a página para receber e processar as notificações enviadas pelo MoIP.
Uma dica para aumentar a segurança é adicionar uma chave na URL da página, ex:
http://www.site.com.br/moip/retorno/default.aspx?key=35B58690-F9FA-4C30-B9DF-1C32494E5D1B
Então mesmo que alguém descubra onde fica sua página que trata o retorno do MoIP, ainda vai ter que descobrir a chave que o MoIP manda com a URL. Diminuindo assim a possibilidade de alguém conseguir mandar dados, tentando se passar pelo MoIP.
Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data.SqlClient;
using System.Net.Mail;
using System.Globalization;
using System.Data;
public partial class retorno : System.Web.UI.Page
{
const string KEY = "35B58690-F9FA-4C30-B9DF-1C32494E5D1B";
string sConnectionString = "sua conectionstring";
#region Page_Load
protected void Page_Load(object sender, EventArgs e)
{
//Caso o processamento e atualização tenham ocorrido perfeitamente,
//envie o código HTTP 200 como resposta.
Response.StatusCode = 200;
//Caso ocorra algum erro, sera chamada a função setError500(),
//que sobrescrevera o código HTTP 200 adicionado acima.
//Verifica se os dados vem por POST
if (Request.HttpMethod == "POST")
{
try
{
//Verifica se possui chave de segurança.
if (Request.QueryString["key"] == KEY)
{
#region Salva os dados do post no Log
string sFormData = string.Empty;
//Pega todos os dados do post
foreach (string name in Request.Form)
sFormData += name + "=" + Request.Form[name] + "&";
sFormData = sFormData.Trim('&');
//Aqui salvo os dados como uma forma de historico
SaveLog(sFormData);
#endregion
const int APROVADO = 3;
const int CANCELADO = 5;
//Pegar ID de status baseado no ID de retorno do MoIP.
int idPedidoStatus = Convert.ToInt32(Request.Form["status_pagamento"]);
if (idPedidoStatus != 0)
{
//Salve o mudanca de status do seu pedido
}
if (idPedidoStatus == APROVADO)
{
//Liberar os produtos
}
else if (idPedidoStatus == CANCELADO)
{
//pedido cancelado
}
}
else
SaveLog("Falso");
}
catch (Exception ex)
{
//No caso de erro define o StatusCode = 500
SetError500();
SaveLog("Ocorreu o seguinte erro:" + ex.Message);
}
}
}
#endregion
#region SetError500
public void SetError500()
{
Response.StatusCode = 500;
}
#endregion
#region SaveLog
public void SaveLog(string sValue)
{
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
string sql = "INSERT INTO logMoIP (logText, dataLog) VALUES (@valor, GETDATE())";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@valor", sValue);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
#endregion
}
Mais detalhes:
NASP - Notificação de Alteração de Status de Pagamento.pdf
Conteúdo direto do site MoIP:
Integração via API – Exemplo de integração em Java
Integração via API – Exemplo de integração em ASP
Integração via API – Exemplo de integração em PHP
http://labs.moip.com.br/2010/08/15/exemplos/