Endpoint must be present as decouple env var HOTZAPP_API_URL.
End points must be created as Celery tasks (check email_marketing.facade for exemploes)
IMPORTANT: contatc_info delayed in 30 minutes. Otherwise it will be accounted as abondaned chart and we will be charge for it. This is the funcion where contact_info is handled:
https://github.com/pythonprobr/pythonpro-website/blob/master/pythonpro/domain/checkout_domain.py#L23
Celery docs can relp: can help: https://docs.celeryproject.org/en/stable/userguide/calling.html#eta-and-countdown:
This is the function which handles payment notification:
https://github.com/pythonprobr/pythonpro-website/blob/master/pythonpro/domain/checkout_domain.py#L48
Maping from django_pagarme to hotzapp:
BOLETO -> billet
CREDIT_CARD -> Credit
Contact Info -> Issued, no transction_id 30 minutos
WAITING_PAYMENT -> issued (status only possible for billet)
PAID -> paid
REFUSED ->refused
Abandoned chart most be done only if user is not a bootcamper.
https://github.com/pythonprobr/pythonpro-website/blob/master/pythonpro/core/facade.py#L174
https://github.com/pythonprobr/pythonpro-website/blob/master/pythonpro/core/facade.py#L250
How to test apis with responses lib:
https://www.python.pro.br/turmas/aulas/31/
API documentation:
- Cadastre a loja no Hotzapp e seleciona plataforma de pedidos "Própria". Será criada uma URL para envio de dados.
- Envie uma POST request (JSON) na URL gerada pelo Hotzapp com o formato especificado no payload abaixo.
- Se for boleto, envie os dados do boleto impresso e quando o mesmo for pago, reenvie os dados com o status de pagamento (detalhado abaixo)
- Para enviar um abandono de carrinho, basta não enviar o campo transaction_id
- Identifique os dados da venda da seguinte forma:
Boleto Impresso: payment_method = 'billet', financial_status = 'issued'
Boleto Pago: payment_method = 'billet', financial_status = 'paid'
Cartão de Crédito Recusado: payment_method = 'credit', financial_status = 'refused'
Cartão de Crédito Pago: payment_method = 'credit', financial_status = 'paid'
Cartão de Débito Recusado: payment_method = 'debit', financial_status = 'refused'
Cartão de Débito Pago: payment_method = 'debit', financial_status = 'paid'
Transferência Bancária Recusada: payment_method = 'transfer', financial_status = 'refused'
Transferência Bancária Paga: payment_method = 'transfer', financial_status = 'paid'
PayPal Recusado: payment_method = 'paypal', financial_status = 'refused'
PayPal Pago: payment_method = 'paypal', financial_status = 'paid'
*/
// boleto impresso
let boleto_impresso = {
created_at: '2018-04-06T07:18:26+03:00', // data de criação do pedido em formato ISO
transaction_id: '76253789', // código da transação
name: 'Guilherme Rangel', // nome completo do cliente
phone: '21969137597', // celular ou whatsapp com DDD do cliente
email: 'gui@gmail.com', // email do cliente
address: 'Av. Vieira Souto', // endereço de entrega do cliente
address_number: '500', // número
address_complement: 'apto 1501', // complemento
address_district: 'Ipanema', // bairro
address_zip_code: '71510215', // CEP
address_city: 'Rio de Janeiro', // cidade
address_state: 'RJ', // estado
address_country: 'BR', // país
doc: '12345667815', // CPF ou CNPJ do cliente
currency_code_from: 'R$', // moeda da transação
total_price: 100.00, // valor total da venda
billet_url: 'http://xxxxx', // link do boleto, se aplicável
billet_barcode: '642754267135467253481543276541', // c;odigo de barras do boleto, se aplicável
line_items: [{ // items no carrinho
product_name: 'Tênis Adidas',
quantity: '1',
price: 299.97
}],
payment_method: 'billet',
financial_status: 'issued'
};
// boleto pago
let boleto_pago = {
created_at: '2018-04-06T07:18:26+03:00', // data de criação do pedido em formato ISO
transaction_id: '76253789', // código da transação
name: 'Guilherme Rangel', // nome completo do cliente
phone: '21969137597', // celular ou whatsapp com DDD do cliente
email: 'gui@gmail.com', // email do cliente
address: 'Av. Vieira Souto', // endereço de entrega do cliente
address_number: '500', // número
address_complement: 'apto 1501', // complemento
address_district: 'Ipanema', // bairro
address_zip_code: '71510215', // CEP
address_city: 'Rio de Janeiro', // cidade
address_state: 'RJ', // estado
address_country: 'BR', // país
doc: '12345667815', // CPF ou CNPJ do cliente
currency_code_from: 'R$', // moeda da transação
total_price: '100.00', // valor total da venda
billet_url: 'http://xxxxx', // link do boleto, se aplicável
billet_barcode: '642754267135467253481543276541', // c;odigo de barras do boleto, se aplicável
line_items: [{ // items no carrinho
product_name: 'Tênis Adidas',
quantity: '1',
price: '299.97'
}],
payment_method: 'billet',
financial_status: 'paid',
paid_at: '2018-04-07T07:18:26+03:00', // data do pagamento do boleto
};
// cartão recusado
let cartao_recusado = {
created_at: '2018-04-06T07:18:26+03:00', // data de criação do pedido em formato ISO
transaction_id: '76253789', // código da transação
name: 'Guilherme Rangel', // nome completo do cliente
phone: '21969137597', // celular ou whatsapp com DDD do cliente
email: 'gui@gmail.com', // email do cliente
address: 'Av. Vieira Souto', // endereço de entrega do cliente
address_number: '500', // número
address_complement: 'apto 1501', // complemento
address_district: 'Ipanema', // bairro
address_zip_code: '71510215', // CEP
address_city: 'Rio de Janeiro', // cidade
address_state: 'RJ', // estado
address_country: 'BR', // país
doc: '12345667815', // CPF ou CNPJ do cliente
currency_code_from: 'R$', // moeda da transação
total_price: '100.00', // valor total da venda
line_items: [{ // items no carrinho
product_name: 'Tênis Adidas',
quantity: '1',
price: '299.97'
}],
payment_method: 'credit',
financial_status: 'refused',
transaction_error_msg: 'Cartão sem saldo' // mensagem de erro de transação recusada em cartão
};
// cartão pago
let cartao_pago = {
created_at: '2018-04-06T07:18:26+03:00', // data de criação do pedido em formato ISO
transaction_id: '76253789', // código da transação
name: 'Guilherme Rangel', // nome completo do cliente
phone: '21969137597', // celular ou whatsapp com DDD do cliente
email: 'gui@gmail.com', // email do cliente
address: 'Av. Vieira Souto', // endereço de entrega do cliente
address_number: '500', // número
address_complement: 'apto 1501', // complemento
address_district: 'Ipanema', // bairro
address_zip_code: '71510215', // CEP
address_city: 'Rio de Janeiro', // cidade
address_state: 'RJ', // estado
address_country: 'BR', // país
doc: '12345667815', // CPF ou CNPJ do cliente
currency_code_from: 'R$', // moeda da transação
total_price: '100.00', // valor total da venda
line_items: [{ // items no carrinho
product_name: 'Tênis Adidas',
quantity: '1',
price: '299.97'
}],
payment_method: 'credit',
financial_status: 'paid',
paid_at: '2018-04-06T07:18:26+03:00', // data do pagamento no cartão
};
// abandono
let abandono = {
created_at: '2018-04-06T07:18:26+03:00', // data de criação do pedido em formato ISO
name: 'Guilherme Rangel', // nome completo do cliente
phone: '21969137597', // celular ou whatsapp com DDD do cliente
email: 'gui@gmail.com', // email do cliente
address: 'Av. Vieira Souto', // endereço de entrega do cliente
address_number: '500', // número
address_complement: 'apto 1501', // complemento
address_district: 'Ipanema', // bairro
address_zip_code: '71510215', // CEP
address_city: 'Rio de Janeiro', // cidade
address_state: 'RJ', // estado
address_country: 'BR', // país
doc: '12345667815', // CPF ou CNPJ do cliente
currency_code_from: 'R$', // moeda da transação
total_price: '100.00', // valor total da venda
line_items: [{ // items no carrinho
product_name: 'Tênis Adidas',
quantity: '1',
price: '299.97'
}],
// enviar os dados que foram coletados quando o cliente preencheu o checkout
// quando não envia o campo transaction_id consideramos como abandono de carrinho
};
Endpoint must be present as decouple env var HOTZAPP_API_URL.
End points must be created as Celery tasks (check email_marketing.facade for exemploes)
IMPORTANT: contatc_info delayed in 30 minutes. Otherwise it will be accounted as abondaned chart and we will be charge for it. This is the funcion where contact_info is handled:
https://github.com/pythonprobr/pythonpro-website/blob/master/pythonpro/domain/checkout_domain.py#L23
Celery docs can relp: can help: https://docs.celeryproject.org/en/stable/userguide/calling.html#eta-and-countdown:
This is the function which handles payment notification:
https://github.com/pythonprobr/pythonpro-website/blob/master/pythonpro/domain/checkout_domain.py#L48
Maping from django_pagarme to hotzapp:
BOLETO -> billet
CREDIT_CARD -> Credit
Contact Info -> Issued, no transction_id 30 minutos
WAITING_PAYMENT -> issued (status only possible for billet)
PAID -> paid
REFUSED ->refused
Abandoned chart most be done only if user is not a bootcamper.
https://github.com/pythonprobr/pythonpro-website/blob/master/pythonpro/core/facade.py#L174
https://github.com/pythonprobr/pythonpro-website/blob/master/pythonpro/core/facade.py#L250
How to test apis with responses lib:
https://www.python.pro.br/turmas/aulas/31/
API documentation:
Boleto Impresso: payment_method = 'billet', financial_status = 'issued'
Boleto Pago: payment_method = 'billet', financial_status = 'paid'
Cartão de Crédito Recusado: payment_method = 'credit', financial_status = 'refused'
Cartão de Crédito Pago: payment_method = 'credit', financial_status = 'paid'
Cartão de Débito Recusado: payment_method = 'debit', financial_status = 'refused'
Cartão de Débito Pago: payment_method = 'debit', financial_status = 'paid'
Transferência Bancária Recusada: payment_method = 'transfer', financial_status = 'refused'
Transferência Bancária Paga: payment_method = 'transfer', financial_status = 'paid'
PayPal Recusado: payment_method = 'paypal', financial_status = 'refused'
PayPal Pago: payment_method = 'paypal', financial_status = 'paid'
*/
// boleto impresso
let boleto_impresso = {
created_at: '2018-04-06T07:18:26+03:00', // data de criação do pedido em formato ISO
transaction_id: '76253789', // código da transação
name: 'Guilherme Rangel', // nome completo do cliente
phone: '21969137597', // celular ou whatsapp com DDD do cliente
email: 'gui@gmail.com', // email do cliente
};
// boleto pago
let boleto_pago = {
created_at: '2018-04-06T07:18:26+03:00', // data de criação do pedido em formato ISO
transaction_id: '76253789', // código da transação
name: 'Guilherme Rangel', // nome completo do cliente
phone: '21969137597', // celular ou whatsapp com DDD do cliente
email: 'gui@gmail.com', // email do cliente
address: 'Av. Vieira Souto', // endereço de entrega do cliente
address_number: '500', // número
address_complement: 'apto 1501', // complemento
address_district: 'Ipanema', // bairro
address_zip_code: '71510215', // CEP
address_city: 'Rio de Janeiro', // cidade
address_state: 'RJ', // estado
address_country: 'BR', // país
doc: '12345667815', // CPF ou CNPJ do cliente
currency_code_from: 'R$', // moeda da transação
total_price: '100.00', // valor total da venda
billet_url: 'http://xxxxx', // link do boleto, se aplicável
billet_barcode: '642754267135467253481543276541', // c;odigo de barras do boleto, se aplicável
line_items: [{ // items no carrinho
product_name: 'Tênis Adidas',
quantity: '1',
price: '299.97'
}],
};
// cartão recusado
let cartao_recusado = {
created_at: '2018-04-06T07:18:26+03:00', // data de criação do pedido em formato ISO
transaction_id: '76253789', // código da transação
name: 'Guilherme Rangel', // nome completo do cliente
phone: '21969137597', // celular ou whatsapp com DDD do cliente
email: 'gui@gmail.com', // email do cliente
address: 'Av. Vieira Souto', // endereço de entrega do cliente
address_number: '500', // número
address_complement: 'apto 1501', // complemento
address_district: 'Ipanema', // bairro
address_zip_code: '71510215', // CEP
address_city: 'Rio de Janeiro', // cidade
address_state: 'RJ', // estado
address_country: 'BR', // país
doc: '12345667815', // CPF ou CNPJ do cliente
currency_code_from: 'R$', // moeda da transação
total_price: '100.00', // valor total da venda
line_items: [{ // items no carrinho
product_name: 'Tênis Adidas',
quantity: '1',
price: '299.97'
}],
};
// cartão pago
let cartao_pago = {
created_at: '2018-04-06T07:18:26+03:00', // data de criação do pedido em formato ISO
transaction_id: '76253789', // código da transação
name: 'Guilherme Rangel', // nome completo do cliente
phone: '21969137597', // celular ou whatsapp com DDD do cliente
email: 'gui@gmail.com', // email do cliente
address: 'Av. Vieira Souto', // endereço de entrega do cliente
address_number: '500', // número
address_complement: 'apto 1501', // complemento
address_district: 'Ipanema', // bairro
address_zip_code: '71510215', // CEP
address_city: 'Rio de Janeiro', // cidade
address_state: 'RJ', // estado
address_country: 'BR', // país
doc: '12345667815', // CPF ou CNPJ do cliente
currency_code_from: 'R$', // moeda da transação
total_price: '100.00', // valor total da venda
line_items: [{ // items no carrinho
product_name: 'Tênis Adidas',
quantity: '1',
price: '299.97'
}],
};
// abandono
let abandono = {
created_at: '2018-04-06T07:18:26+03:00', // data de criação do pedido em formato ISO
name: 'Guilherme Rangel', // nome completo do cliente
phone: '21969137597', // celular ou whatsapp com DDD do cliente
email: 'gui@gmail.com', // email do cliente
address: 'Av. Vieira Souto', // endereço de entrega do cliente
address_number: '500', // número
address_complement: 'apto 1501', // complemento
address_district: 'Ipanema', // bairro
address_zip_code: '71510215', // CEP
address_city: 'Rio de Janeiro', // cidade
address_state: 'RJ', // estado
address_country: 'BR', // país
doc: '12345667815', // CPF ou CNPJ do cliente
currency_code_from: 'R$', // moeda da transação
total_price: '100.00', // valor total da venda
line_items: [{ // items no carrinho
product_name: 'Tênis Adidas',
quantity: '1',
price: '299.97'
}],
};