Skip to content

Integrate with Hotzap #2730

@renzon

Description

@renzon

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:

  1. Cadastre a loja no Hotzapp e seleciona plataforma de pedidos "Própria". Será criada uma URL para envio de dados.
  2. Envie uma POST request (JSON) na URL gerada pelo Hotzapp com o formato especificado no payload abaixo.
  3. 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)
  4. Para enviar um abandono de carrinho, basta não enviar o campo transaction_id
  5. 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

};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions