mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
Initial commit of Forte Payment integration and parts of hr_payroll_payment to support it.
This commit is contained in:
81
payment_forte/models/forte_request.py
Normal file
81
payment_forte/models/forte_request.py
Normal file
@@ -0,0 +1,81 @@
|
||||
from base64 import b64encode
|
||||
from json import dumps
|
||||
import requests
|
||||
|
||||
|
||||
class ForteAPI:
|
||||
|
||||
url_prod = 'https://api.forte.net/v3'
|
||||
url_test = 'https://sandbox.forte.net/api/v3'
|
||||
|
||||
def __init__(self, organization_id, access_id, secure_key, environment):
|
||||
self.organization_id = organization_id
|
||||
self.access_id = access_id
|
||||
self.secure_key = secure_key
|
||||
self.basic_key = b64encode(bytes(access_id + ':' + secure_key, 'UTF-8')).decode()
|
||||
self.environment = environment
|
||||
self.headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Forte-Auth-Organization-Id': 'org_' + self.organization_id,
|
||||
'Authorization': 'Basic ' + self.basic_key,
|
||||
}
|
||||
|
||||
def _build_request(self, location, method, data=None):
|
||||
url = self.url_prod
|
||||
if self.environment == 'test':
|
||||
url = self.url_test
|
||||
url += location
|
||||
return requests.request(method, url, headers=self.headers, data=data)
|
||||
|
||||
def test_authenticate(self, location=None):
|
||||
if location:
|
||||
url = '/organizations/org_%s/locations/loc_%s/transactions/' % (self.organization_id, location)
|
||||
else:
|
||||
url = '/organizations/org_%s/transactions/' % (self.organization_id, )
|
||||
return self._build_request(url, 'GET')
|
||||
|
||||
def _echeck_values(self, location, amount, account_type, routing_number, account_number, account_holder):
|
||||
#{
|
||||
# "action": "sale",
|
||||
# "authorization_amount": 200.0,
|
||||
# "billing_address": {
|
||||
# "first_name": "Jared",
|
||||
# "last_name": "Kipe"},
|
||||
# "echeck": {
|
||||
# "sec_code": "WEB",
|
||||
# "account_type": "Checking",
|
||||
# "routing_number": "021000021",
|
||||
# "account_number": "000111222",
|
||||
# "account_holder": "Jared Kipe"}
|
||||
#}
|
||||
holder_array = account_holder.strip().split()
|
||||
first_name = ''
|
||||
last_name = holder_array[-1]
|
||||
if len(holder_array) >= 2:
|
||||
first_name = ' '.join(holder_array[:-1])
|
||||
data = {
|
||||
'action': 'sale',
|
||||
'authorization_amount': amount,
|
||||
'billing_address': {
|
||||
'first_name': first_name,
|
||||
'last_name': last_name,
|
||||
},
|
||||
'echeck': {
|
||||
'sec_code': 'WEB',
|
||||
'account_type': account_type,
|
||||
'routing_number': routing_number,
|
||||
'account_number': account_number,
|
||||
'account_holder': account_holder,
|
||||
},
|
||||
}
|
||||
url = '/organizations/org_%s/locations/loc_%s/transactions/' % (self.organization_id, location)
|
||||
return url, data
|
||||
|
||||
def echeck_sale(self, location, amount, account_type, routing_number, account_number, account_holder):
|
||||
url, data = self._echeck_values(location, amount, account_type, routing_number, account_number, account_holder)
|
||||
return self._build_request(url, 'POST', data=dumps(data))
|
||||
|
||||
def echeck_credit(self, location, amount, account_type, routing_number, account_number, account_holder):
|
||||
url, data = self._echeck_values(location, amount, account_type, routing_number, account_number, account_holder)
|
||||
data['action'] = 'credit'
|
||||
return self._build_request(url, 'POST', data=dumps(data))
|
||||
Reference in New Issue
Block a user