แแแชแแแฃแแ Python package แฌแแ แแแแแแแแก แแแแแขแแ แก TBC-แแก แแแแแแ แแแแแฎแแแแแกแแแแก, แกแแแแช แแแชแแแฃแแแ แงแแแแ แกแแญแแ แ แแแฌแแแ, แ แแแแแแช แแแแฎแแแ แแแแแก แกแแจแฃแแแแแแก แแแกแชแแแก แกแแ แแแคแแแแขแแกแ แแ แแแ แแแแก แแ แกแแแแแแก แจแแแแฎแแแแแจแ แแแ แขแแแแ แแแแฎแแแแแก แแแแฃแแแแขแแชแแแจแ แแฆแฌแแ แแแ API แแแแแแแแแก แแแแแงแแแแแ.
package-แ แแแขแแกแขแแแแ แแ แแฃแจแแแแก python3-แแแแก (>3.4). แฌแแกแแ, python2-แแแช แแ แฃแแแ แฐแฅแแแแแก แแ แแแแแแ, แแแแ แแ แแแ แฌแแฃแแแแแ แแแ แแแขแงแแแ :).
package-แแก แแแงแแแแแแก 2 แแแ แแ แกแแแแแก:
- แฉแแแแขแแแ แแแ แแแ แแแแแ แแแขแฐแแแแแแ แแ แแแฃแจแแแ
python3 setup.py install - pip-แแก แแแแแงแแแแแแ
pip3 install tbc_adapter
happy coding!
TBC API-แกแแแ แกแแฃแ แแแแ แแแแแ แแแแแแแแแขแแ แแแฃแแแ แจแแแแแแ 7 แซแแ แแแแแ แแแแแแ, แ แแแแแแช แฅแแแแแ แแ แแก แแแชแแแฃแแ, แฎแแแ แกแแแแ แแแแแแแแแก แแฆแฌแแ แแแ แแแแแแแ, แกแแญแแ แแ แจแแแฅแแแแ แฉแแแแ แแแแกแ, แ แแแแแก แแจแแแแแแช แแฅแแแแ tbc_adapter.adapters.TBCAdapter แแ แแแแแแแแแขแแชแแ แแแแฃแแแแแ 2 property-แก. แฅแแแแแ แแ แแก แแแชแแแฃแแ แแแแแแแแ แ แแแแฃแ แ แแฃแจแ แแแ แแแแแแ, แ แแแแแแแช แจแแแแซแแแแ แแฎแแแแซแฆแแแแแแแ:
import os
from tbc_adapter.adapters import TBCAdapter
from tbc_adapter.p12_converter import generate_pems
# แชแแแแแจแ แแ แแก แแแกแแแแ แแ แกแแแแช แชแฎแแแ แแแก TBC-แแแ แแแฌแแแแแฃแแ .p12 แแแคแแ แแแแแแก แคแแแแ
# แแ แแชแฎแแแ แแแแ แแแแแแแ แแ แแแฃแแ .pem แแแคแแ แแแแแแก แคแแแแแแ
CERTIFICATE_DIR = "/abs/path/to/certificate/"
# แชแแแแแจแ แแ แแก .p12 แกแแ แแแคแแแแขแแก แแแ แแแ, แ แแแแแแช แแแฌแแแแแฃแแแ TBC แแแแแแก แแแแ
CERTIFICATE_PSWD = "secret"
class MyFancyAdapter(TBCAdapter):
@property
def pem_paths(self):
p12_path = os.path.join(CERTIFICATE_DIR, "certificate.p12")
cert_path = os.path.join(CERTIFICATE_DIR, "certificate.pem")
key_path = os.path.join(CERTIFICATE_DIR, "privatekey.pem")
if not (os.path.isfile(cert_path) or os.path.isfile(key_path)):
cert_path, key_path = generate_pems(p12_path,
CERTIFICATE_PSWD,
CERTIFICATE_DIR)
return (cert_path, key_path)
@property
def service_url(self):
return "https://securepay.ufc.ge:18443/ecomm2/MerchantHandler"แแแ แแแแ property - pem_paths แแแ แฃแแแแก .pem แคแแ แแแขแจแ แแแแแงแแแแแ แกแแ แแแคแแแแขแก แแ แแแก แแแกแแฆแแแก, แฎแแแ แแฃ แแก แแ แ แแแแแแแแแขแ แแแ แแฅแขแแ แแแจแ แแ แแ แแก, แแแจแแ แแแแแแ แแ แแแก, แแแแฎแแแก แแแ แแฅแขแแ แแแจแ แแ แแแ แฃแแแแก แแแกแแแแ แแแแก. แฎแแแ, property service_path แแแ แฃแแแแก แแแแแแก แกแแ แแแกแแก แแแกแแแแ แแก.
แแกแแแ, แฅแแแแแ, แกแแฉแแแแแแแ แแแแจแ, แแแแแงแแแแแฃแแแ แชแแแแแแแ:
client_ip # แแแแฎแแแ แแแแแก IP แแแกแแแแ แแ (แแฎ.แแแแฃแแแแขแแชแแ)
amount # แแแแแกแแฎแแแแ แแแแฎแ แแแแ แแแจแ (1 แแแ แ 100 แแแแ แ)
trans_id # TBC-แแแ แแแแ แฃแแแแฃแแ แขแ แแแแแฅแชแแแก ID (แแฎ.แแแแฃแแแแขแแชแแ)แแฎแแ แจแแแแแซแแแ แแแแแแแแแ แฉแแแแ MyFancyAdapter แแแแกแแก แแแแแงแแแแแแแ แแ แกแแแแแแแ แแแแแแ แแ แแแแแแแแแขแแ แแแฃแแ แแแแแแแแ:
1) แขแ แแแแแฅแชแแแก id-แแก แแแแแแแ แแ แแแ (แแแแฎแแก แฉแแแแญแ แแ)
แแฆแแแก: client_ip, amount
แแแ แฃแแแแก: TRANSACTION_ID
client_ip = "xxx.xxx.xxx.xxx"
amount = 3000
adapter = MyFanceAdapter(client_ip)
result = adapter.get_transaction_id(amount)
print(result) # >>> {"TRANSACTION_ID": "xyz"}แแฆแแแก: client_ip, trans_id
แแแ แฃแแแแก: RESULT, RESULT_CODE, CARD_NUMBER
client_ip = "xxx.xxx.xxx.xxx"
trans_id = "xyz"
adapter = MyFanceAdapter(client_ip, trans_id)
result = adapter.get_transaction_status()
print(result) # >>> {"RESULT": "x", "RESULT_CODE": "y", CARD_NUMBER: "z"}แแฆแแแก: client_ip (แกแแ แแแ แแก แแแกแแแแ แแ)
แแแ แฃแแแแก: RESULT, RESULT_CODE
client_ip = "xxx.xxx.xxx.xxx"
adapter = MyFanceAdapter(client_ip)
result = adapter.end_business_day()
print(result) # >>> {"RESULT": "x", "RESULT_CODE": "y"}แแฆแแแก: client_ip, amount (แ แ แ แแแแแแแแแช แแแแฎแแแ แแแแแก แแแแแแแแแแ)
แแแ แฃแแแแก: TRANSACTION_ID
client_ip = "xxx.xxx.xxx.xxx"
amount = 3000
adapter = MyFanceAdapter(client_ip)
result = adapter.get_preauthed_transaction_id(amount)
print(result) # >>> {"TRANSACTION_ID": "xyz"}5) แแ แ-แแแขแแ แแแแแฃแแ แขแ แแแแแฅแชแแแก แแแแแขแ (แแแแฎแแก แฉแแแแญแ แ)
แแฆแแแก: client_ip, amount, trans_id
แแแ แฃแแแแก: RESULT, RESULT_CODE, CARD_NUMBER
client_ip = "xxx.xxx.xxx.xxx"
trans_id = "xyz"
amount = 3000
adapter = MyFanceAdapter(client_ip, trans_id)
result = adapter.commit_preauthed(amount)
print(result) # >>> {"RESULT": "x", "RESULT_CODE": "y", CARD_NUMBER: "z"}แแฆแแแก: client_ip, trans_id
แแแ แฃแแแแก: RESULT, RESULT_CODE
client_ip = "xxx.xxx.xxx.xxx"
trans_id = "xyz"
adapter = MyFancyAdapter(client_ip, trans_id)
result = adapter.reverse_transaction()
print(result) # >>> {"RESULT_CODE": "x", "RESULT": "y"}แแฆแแแก: client_ip, trans_id, amount
แแแ แฃแแแแก: RESULT, RESULT_CODE
client_ip = "xxx.xxx.xxx.xxx"
trans_id = "xyz"
amount = 3000
adapter = MyFancyAdapter(client_ip, trans_id)
# แแฃ แแแฌแแแแแ แแแ refund-แก แแแแฎแแ แชแแแแแแ
result = adapter.refund_transaction(amount)
# แแฃ แกแ แฃแ refund-แก แแแแฎแแ แชแแแแแแ
result = adapter.refund_transaction()
print(result) # >>> {"RESULT": "x", "RESULT_CODE": "y"}API แแแแแแแแแแแ แแแแ แฃแแแแฃแแ แชแแแแแแแแก แแแแแคแแแแชแแ
แแแแแขแแ แแก แงแแแแ แแแแแแ แฃแแแ แแแ แฃแแแแก แแแฅแกแแแแแก (dict), แ แแแแแแช แจแแแชแแแก แแแแแแกแแแ แแแแ แฃแแแแฃแ แแแแจแแแแแแแแแก. แแแแแแแแแ, แแ แแแแขแแ แแแแชแแแก แแแแแขแ แฃแแแ แแแ แฃแแแแก แแ แแแแ แขแ RESULT_CODE, RESULT-แกแ แแ CARD_NUMBER-แก, แแ แแแแ, แแแแแขแแแแ RRN-แกแ แแ APPROVAL_CODE-แก, แ แแแแแแช แจแแแซแแแแ แกแแแ แแแ แแ แแแแแแแงแแแแ, แแแแ แแ แจแแกแแซแแแแแแแ แ แแฆแแช แแแแแแขแจแ แกแแญแแ แ แแแฎแแแก, แแแแขแแ แแฃ แแแกแฃแ แก แแแแแ แแฆแแแจแแฃแแ 2 แแแแจแแแแแแแแช แแแแแฆแแ แแแ แแแ แกแแแแแ แแ แแแ แฃแแ แแแแ แกแแญแแ แแ แจแแแแแแ, แแแ แขแแแ, แแแแแคแแแแชแแ:
# imports
class MyFancyAdapter(TBCAdapter):
# implementations & definitions
def commit_preauthed(self, amount):
super().commit_preauthed(amount)
commit_preauthed.api_out = ("RESULT", "RESULT_CODE", "CARD_NUMBER", "RRN", "APPROVAL_CODE")แแแแแแฃแ API แแแแแแก แแแแฉแแแ api_out (list/tuple แขแแแแก "แแแกแแ แแแขแแ แ"), แ แแแแแแช แแ แแแแแ แ แแแขแ แแแคแแ แแแชแแแ, แ แ แชแแแแแแแ แฃแแแ แแแแแ แฃแแแก แแแแแขแแ แแ แฃแแแ แแแแแ แแขแฃแแ แแแแแแแแแกแแแแก. แแฃ api_out แกแแแก แแกแแแแก แแแแแฅแขแจแ แแ แกแแแฃแแ แแแกแแฆแแแ แแแแแแแแ แแแแ แฃแแแแฃแ แแแกแฃแฎแจแ แแ แแฆแแแฉแแแ, แแแจแแ แแแกแ แแแแจแแแแแแแ แแฅแแแแ None.
แ แแช แจแแแฎแแแ แจแแชแแแแแแก:
- แแแแแขแแ แ "แแฌแแแก"
TBCAdapterExceptionแขแแแแก exception-แก, แ แแแแกแแช แจแแแแแแแ แแแแกแจแ แแ แแฅแแแแ แแแแแแแแแขแแ แแแฃแแpem_paths&service_urlproperty-แแแ (แจแแแแแแแแ แแแแกแแก แขแแแแก แแแแแฅแขแแก แจแแฅแแแแกแแแแแแ) requests.exceptions.HTTPError-แก แแฃ แแแแแแแแ แแแแ แฃแแแแฃแแ แแแกแฃแฎแแกstatus_codeแแ แแฅแแแแ 200
แฎแแแ TBC API แแแแแแแก แแแแแแแแแก แแ แแก แแแแแขแแ แ แแแแญแแ แก (แแ แกแแแแแแก แจแแแแฎแแแแแจแ) แจแแแแแ แจแแชแแแแแแก:
requests.exceptions.ConnectTimeoutrequests.exceptions.SSLErrorrequests.exceptions.HTTPError- แแ แแแแแก แงแแแแ แกแฎแแแก -
Exception
แจแแชแแแแแก แแแญแแ แแก แจแแแแฎแแแแแจแ แฉแฃแแ (silent) แแ แแแชแแแแ แฎแแแแ แแแแแแ แแแ แแ API แแแแแแแก แจแแแแแจแ, api_out-แจแ แแแแแแแแฃแแ แฌแแแ แแแแก แแแชแแแแ แแแแแก แแแฅแกแแแแแ แจแแแแแแ แฎแแแฌแแ แแ:
{"status": False, "desc": "exc. type"}
...แจแแแซแแแแ แจแแชแแแแแก desc แฃแคแ แ verbose แแงแแก, แแแแ แแ แแฎแแ แแ แแ แแก...