Source code for inter._client

import requests


class URL:
    BASE = 'https://cdpj.partners.bancointer.com.br/'
    AUTH = BASE + 'oauth/v2/token'
    STATEMENTS = BASE + 'banking/v2/extrato'
    BALANCE = BASE + 'banking/v2/saldo'
    PAYMENTS = BASE + 'banking/v2/pagamento'


[docs]class Scopes: READ_STATEMENTS = 'extrato.read' "Consulta de saldo e extrato" WRITE_PAYMENT = 'pagamento-boleto.write' "Pagamento de títulos com código de barra" all = (READ_STATEMENTS, WRITE_PAYMENT)
[docs]class Client: """ Inicializa utilizando as credenciais. :param client_id: Client ID :type client_id: :class:`str` :param client_secret: Client Secret :type client_secret: :class:`str` :param cert_path: Caminho do arquivo de certificado :type cert_path: :class:`str` :param key_path: Caminho do arquivo de chave :type key_path: :class:`str` :param scopes: Iterável contendo os :class:`Scopes` necessários, defaults to :class:`Scopes.all` :type scopes: :class:`Iterable`, optional """ def __init__(self, client_id, client_secret, cert_path, key_path, scopes=None): self.client_id = client_id self.client_secret = client_secret self.cert_path = cert_path self.key_path = key_path self.scopes = scopes or Scopes.all self._token = None def _get_token(self): response = requests.post( URL.AUTH, data={ 'client_id': self.client_id, 'client_secret': self.client_secret, 'scope': ' '.join(self.scopes), 'grant_type': 'client_credentials', }, cert=(self.cert_path, self.key_path), ) return response.json()['access_token'] @property def token(self): if not self._token: self._token = self._get_token() return self._token @property def headers(self): return {"Authorization": f"Bearer {self.token}"}
[docs] def get_balance(self, date=None): params = {} if date: params['dataSaldo'] = date.strftime('%Y-%m-%d') response = requests.get( URL.BALANCE, params=params, headers=self.headers, cert=(self.cert_path, self.key_path), ) return response.json()
[docs] def get_statements(self, start_date, end_date): response = requests.get( URL.STATEMENTS, params={ 'dataInicio': start_date.strftime('%Y-%m-%d'), 'dataFim': end_date.strftime('%Y-%m-%d'), }, headers=self.headers, cert=(self.cert_path, self.key_path), ) return response.json()
[docs] def pay_barcode(self, barcode, value, due_date, payment_date=None): """ Pagamento imediato ou agendado de títulos com código de barras. Necessita do :class:`Scopes.WRITE_PAYMENT`. Referência: https://developers.bancointer.com.br/reference/pagarboleto :param barcode: código de barras (somente números) :type barcode: :class:`str` :param value: valor do título :type value: :class:`str` :param due_date: data de vencimento :type due_date: :class:`datetime.date` :param payment_date: data de pagamento, se não informado, será o mesmo dia. :type payment_date: :class:`datetime.date`, opcional :return: resposta da API :rtype: :class:`dict` """ response = requests.post( URL.PAYMENTS, json={ 'codBarraLinhaDigitavel': barcode, 'valorPagar': str(value), 'dataVencimento': due_date.strftime('%Y-%m-%d'), 'dataPagamento': payment_date.strftime('%Y-%m-%d') if payment_date else None, }, headers=self.headers, cert=(self.cert_path, self.key_path), ) return response.json()