Compare commits
1 Commits
main
...
4da1d1233c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4da1d1233c |
16
.env.example
16
.env.example
@@ -1,16 +0,0 @@
|
||||
PRIVATE_KEY=0x....
|
||||
CLIENT_ID=
|
||||
CLIENT_SECRET=
|
||||
DEV_APP_KEY=
|
||||
DEBUG=false
|
||||
ITP_TOKEN_URL = https://oauth.hm.bb.com.br/oauth/token
|
||||
# Url de produção com autenticação mTLS.
|
||||
#ITP_API_URL="https://api-bbpay.bb.com.br/checkout/v2"
|
||||
# Url de homologação com autenticação mTLS.
|
||||
ITP_API_URL = "https://api-bbpay.hm.bb.com.br/checkout/v2"
|
||||
# Url de homologação sem autenticação mTLS.
|
||||
#ITP_API_URL = "https://api.extranet.hm.bb.com.br/checkout/v2"
|
||||
|
||||
# 05/08/2025
|
||||
#ITP_API_URL=https://checkout.mtls.api.bb.com.br
|
||||
#ITP_API_URL=https://checkout.mtls.api.hm.bb.com.br
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +0,0 @@
|
||||
.env
|
||||
*.pem
|
||||
venv
|
||||
54
bbpay.py
54
bbpay.py
@@ -15,12 +15,9 @@ from eth_utils import to_wei
|
||||
|
||||
# Load environment variables from .env file
|
||||
load_dotenv()
|
||||
ENVIRONMENT = getenv('ENVIRONMENT', 'dev')
|
||||
dotenv_path = f'.env.{ENVIRONMENT}'
|
||||
load_dotenv(dotenv_path)
|
||||
|
||||
app = Flask(__name__)
|
||||
CORS(app, origins=['https://p2pix.co'])
|
||||
CORS(app)
|
||||
api = Api(app)
|
||||
|
||||
class BBPay(Resource):
|
||||
@@ -30,11 +27,18 @@ class BBPay(Resource):
|
||||
|
||||
self.cert = 'key.pem'
|
||||
self.verify_ssl = 'bb.pem'
|
||||
self.baseUrl = getenv("ITP_API_URL")
|
||||
self.token_url = getenv("ITP_TOKEN_URL")
|
||||
|
||||
# Url de homologação com autenticação mTLS.
|
||||
self.baseUrl = "https://api-bbpay.hm.bb.com.br/checkout/v2"
|
||||
|
||||
# Url de homologação sem autenticação mTLS.
|
||||
#self.baseUrl = "https://api.extranet.hm.bb.com.br/checkout/v2"
|
||||
|
||||
# Url de produção com autenticação mTLS.
|
||||
#self.baseUrl = "https://api-bbpay.bb.com.br/checkout/v2"
|
||||
|
||||
self.params = {
|
||||
'numeroConvenio': getenv("BBPAY_CONVENIO"),
|
||||
'numeroConvenio': 701,
|
||||
'gw-dev-app-key': getenv("DEV_APP_KEY")
|
||||
}
|
||||
|
||||
@@ -44,7 +48,7 @@ class BBPay(Resource):
|
||||
'checkout.participantes-info']
|
||||
|
||||
self.oauth.fetch_token(
|
||||
token_url=self.token_url,
|
||||
token_url='https://oauth.hm.bb.com.br/oauth/token',
|
||||
client_id=getenv("CLIENT_ID"),
|
||||
client_secret=getenv("CLIENT_SECRET"), scope=self.scope)
|
||||
|
||||
@@ -55,9 +59,8 @@ class BBPay(Resource):
|
||||
class Register(BBPay):
|
||||
def post(self):
|
||||
data = request.get_json()
|
||||
app.logger.debug(data)
|
||||
body = {
|
||||
'numeroConvenio': getenv("BBPAY_CONVENIO"),
|
||||
'numeroConvenio': 701,
|
||||
'nomeParticipante': data['chainID'],
|
||||
'tipoDocumento': data['tipoDocumento'],
|
||||
'numeroDocumento': data['numeroDocumento'],
|
||||
@@ -66,29 +69,23 @@ class Register(BBPay):
|
||||
'tipoConta': data['tipoConta'],
|
||||
'codigoIspb': data['codigoIspb'] # Código identificador do Sistema de Pagamentos Brasileiro. Atualmente aceitamos apenas Banco do Brasil, codigoIspb igual a 0
|
||||
}
|
||||
app.logger.debug(body)
|
||||
response = self.oauth.post(
|
||||
self.baseUrl+"/participantes",
|
||||
params=self.params,
|
||||
json=body,
|
||||
verify=self.verify_ssl,
|
||||
cert=self.cert)
|
||||
if response.status_code != 201:
|
||||
app.logger.debug(response._content)
|
||||
return response.reason, response.status_code
|
||||
return response.json()
|
||||
|
||||
class Request(BBPay):
|
||||
def post(self):
|
||||
data = request.get_json()
|
||||
app.logger.debug(data)
|
||||
body = {
|
||||
"geral": {
|
||||
"numeroConvenio": getenv("BBPAY_CONVENIO"),
|
||||
"numeroConvenio": 701,
|
||||
"pagamentoUnico": True,
|
||||
"descricaoSolicitacao": "P2Pix",
|
||||
"valorSolicitacao": data['amount'],
|
||||
#"codigoConciliacaoSolicitacao": data['lockid']
|
||||
"valorSolicitacao": data['amount']
|
||||
},
|
||||
# "devedor": {
|
||||
# "tipoDocumento": 1,
|
||||
@@ -103,29 +100,23 @@ class Request(BBPay):
|
||||
"valorRepasse": 100 }]
|
||||
}
|
||||
}
|
||||
app.logger.debug(body)
|
||||
response = self.oauth.post(
|
||||
self.baseUrl+"/solicitacoes",
|
||||
params=self.params,
|
||||
json=body,
|
||||
verify=self.verify_ssl,
|
||||
cert=self.cert)
|
||||
app.logger.debug(response._content)
|
||||
if response.status_code != 201:
|
||||
return response.reason, response.status_code
|
||||
return response.json()
|
||||
|
||||
class Release(BBPay):
|
||||
def get(self, numeroSolicitacao):
|
||||
app.logger.debug(request.get_json())
|
||||
response = self.oauth.get(
|
||||
self.baseUrl+f"/solicitacoes/{numeroSolicitacao}",
|
||||
params=self.params,
|
||||
verify=self.verify_ssl,
|
||||
cert=self.cert)
|
||||
app.logger.debug(response._content)
|
||||
if response.status_code != 200:
|
||||
return response.reason, response.status_code
|
||||
return 'Upstream error', response.status_code
|
||||
data = response.json()
|
||||
numeroParticipante = data['repasse']['recebedores'][0]['identificadorRecebedor']
|
||||
pixTimestamp = encode_packed(['bytes32'],[b85decode(data['informacoesPix']['txId'])])
|
||||
@@ -148,9 +139,9 @@ class Release(BBPay):
|
||||
return {
|
||||
'pixTarget': f"{chainID}-{numeroParticipante}",
|
||||
'amount': str(valorSolicitacao),
|
||||
'pixTimestamp': f"0x{pixTimestamp.hex()}",
|
||||
'signature': f"0x{signature}"
|
||||
}
|
||||
'pixTimestamp': pixTimestamp.hex(),
|
||||
'signature': signature }
|
||||
|
||||
|
||||
# (CPF, nome, conta) -> participantID
|
||||
# should be called before deposit
|
||||
@@ -164,10 +155,13 @@ api.add_resource(Request, '/request')
|
||||
# should be called before release
|
||||
api.add_resource(Release, '/release/<int:numeroSolicitacao>')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if getenv("DEBUG"):
|
||||
disable_warnings()
|
||||
app.run(host='::1', debug=True, port=getenv("PORT",5000))
|
||||
app.run(debug=True)
|
||||
else:
|
||||
from waitress import serve
|
||||
serve(app, host=getenv("HOST","::1"), port=getenv("PORT",5000))
|
||||
serve(app, host=getenv("HOST","0.0.0.0"), port=getenv("PORT",5000))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user