Skip to content

Commit 3d225d1

Browse files
committed
feat(pix): suportar PIX_COPIA (copia-e-cola oficial do banco) com prioridade sobre chave
1 parent 9516aee commit 3d225d1

2 files changed

Lines changed: 26 additions & 6 deletions

File tree

‎pix.py‎

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
"""Geração de QR Code Pix (BR Code) — 100% local, sem serviços externos.
22
33
Configuração (via variáveis de ambiente / Streamlit secrets — nunca no repo):
4-
PIX_KEY chave Pix (CPF, e-mail, celular ou chave aleatória)
5-
PIX_NOME nome do recebedor (máx. 25 caracteres)
6-
PIX_CIDADE cidade do recebedor (máx. 15 caracteres)
7-
PIX_TXID identificador opcional da transação (padrão: ***)
4+
PIX_COPIA copia-e-cola Pix oficial (EMV completo, ex.: emitido pelo banco)
5+
PIX_KEY chave Pix (CPF, e-mail, celular ou chave aleatória) — usado
6+
somente quando PIX_COPIA não está presente
7+
PIX_NOME nome do recebedor (máx. 25 caracteres — p/ payload montado por chave)
8+
PIX_CIDADE cidade do recebedor (máx. 15 caracteres — p/ payload montado por chave)
9+
PIX_TXID identificador opcional da transação (padrão: ***)
810
"""
911

1012
import base64
@@ -68,11 +70,22 @@ def montar_payload(chave: str, nome: str, cidade: str, txid: str = "***") -> str
6870

6971

7072
def configurado() -> bool:
71-
return bool(os.environ.get("PIX_KEY", "").strip())
73+
return bool(_copia() or os.environ.get("PIX_KEY", "").strip())
74+
75+
76+
def _copia() -> str:
77+
return os.environ.get("PIX_COPIA", "").strip()
7278

7379

7480
def payload_configurado() -> str:
75-
"""Retorna o copia-e-cola Pix se configurado; string vazia caso contrário."""
81+
"""Retorna o copia-e-cola Pix se configurado; string vazia caso contrário.
82+
83+
Prioriza PIX_COPIA (payload oficial emitido pelo banco); se ausente, monta
84+
o BR Code a partir de PIX_KEY.
85+
"""
86+
copia = _copia()
87+
if copia:
88+
return copia
7689
chave = os.environ.get("PIX_KEY", "").strip()
7790
if not chave:
7891
return ""

‎test_pix.py‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ def test_configurado_com_chave(monkeypatch):
3030
assert payload[-4:] == pix.crc16_ccitt(payload[:-4])
3131

3232

33+
def test_copia_e_cola_tem_prioridade(monkeypatch):
34+
monkeypatch.setenv("PIX_COPIA", "000201269A10014br.gov.bcb.pix0104+551123456789")
35+
monkeypatch.setenv("PIX_KEY", "outra-chave")
36+
assert pix.configurado()
37+
assert pix.payload_configurado().startswith("00020126")
38+
39+
3340
def test_qrcode_png_base64_gera_data_uri(monkeypatch):
3441
monkeypatch.setenv("PIX_KEY", "11999999999")
3542
payload = pix.payload_configurado()

0 commit comments

Comments
 (0)