andreroggeri/pynubank

Erro com o get_pix_identifier

Closed this issue · 6 comments

Estou tentando checar o status de pagamento via pix criado com o create_pix_payment_qrcode, mas sempre retorna None quando vou checar ele com o método do get_pix_identifier.

  • Código abaixo:
from pynubank import Nubank
import ujson
import pickle
import os
import random
import string

class Payment:
    def __init__(self):
        pickle_path = os.path.abspath("../database/nubank.pkl")

        if os.path.exists(pickle_path):
            with open(pickle_path, "rb") as f:
                self.nubank = pickle.load(f)
        else:
            self.nubank = Nubank()
            self.authenticate_nubank()

            with open(pickle_path, 'wb+') as arquivo:
                pickle.dump(self.nubank, arquivo)

    def authenticate_nubank(self):
        with open("../config.json") as file:
            credentials = ujson.load(file).get("api_nubank_payment")

        self.nubank.authenticate_with_cert(
            credentials["cpf"],
            credentials["password"],
            credentials["certificate_path"]
        )

    async def code_generator(self):
        sections = [
            ''.join(random.choices(string.ascii_lowercase + string.digits, k=6)),
            ''.join(random.choices(string.ascii_lowercase + string.digits, k=4)),
            ''.join(random.choices(string.ascii_lowercase + string.digits, k=4)),
            ''.join(random.choices(string.ascii_lowercase + string.digits, k=4)),
            ''.join(random.choices(string.ascii_lowercase + string.digits, k=12))
        ]

        return '-'.join(sections)

    async def create_payment(self, value):
        data = self.nubank.get_available_pix_keys()
        code = await self.code_generator()
        money_request = self.nubank.create_pix_payment_qrcode(
            data['account_id'],
            value,
            data['keys'][0],
            code
        )

        return code, money_request

    async def check_payment(self, payment_id):
        return self.nubank.get_pix_identifier(payment_id)

if __name__ == "__main__":
  import asyncio

  async def main():
    nu = Payment()
    code, money_request = await nu.create_payment(0.010)
    check = await nu.check_payment(code)
    print(code, money_request, check)

  asyncio.run(main())

get_pix_identifier não aceita o identificador único e sim o id de uma transação.

Documentação

get_pix_identifier não aceita o identificador único e sim o id de uma transação.

Documentação

E como eu poderia fazer a checagem do pagamento? Pois achei que o identificador único pudesse ser usado para isso.

Infelizmente a API do app não foi feita pra isso (Pelo menos não pela parte descoberta 😛).

Pra funcionar o que você quer, teria que fazer exatamente como está no exemplo. Pegar transação por transação e verificar se ela tem o identificador único que vc quer.

Obrigado. Existe algum formato específico em que eu devo usar como código identificador ou posso usar o mesmo que estou usado?

  • Formato que estou usando: 656j3j-u52t-s0mv-ibn7-g1ol305jgzlx

É o mesmo do app, acredito que sejam 25 caracteres sem restrição Em qua., 5 de jul. de 2023 17:32, Bruno Parziovanni < @.> escreveu:

Obrigado. Existe algum formato específico em que eu devo usar como código identificador ou posso usar o mesmo que estou usado? - Formato que estou usando: 656j3j-u52t-s0mv-ibn7-g1ol305jgzlx — Reply to this email directly, view it on GitHub <#415 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABPRUYP7GVL4KX4IDISKAI3XOXFOXANCNFSM6AAAAAAZ7LWRXE . You are receiving this because you commented.Message ID: @.
>

Muito obrigado!