Skip to content

m3ck0/tbc-adapter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

17 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Payment Gateway adapter for TBC Bank

แƒจแƒ”แƒกแƒแƒ•แƒแƒšแƒ˜ (แƒ›แƒแƒ™แƒšแƒ” แƒแƒฆแƒฌแƒ”แƒ แƒ)

แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ Python package แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒแƒ“แƒแƒžแƒขแƒ”แƒ แƒก TBC-แƒ˜แƒก แƒแƒœแƒšแƒแƒ˜แƒœ แƒ’แƒแƒ“แƒแƒฎแƒ“แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒกแƒแƒ“แƒแƒช แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒœแƒแƒฌแƒ˜แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒ˜แƒกแƒชแƒ”แƒ›แƒก แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒกแƒ แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“ แƒ›แƒแƒแƒฎแƒ“แƒ˜แƒœแƒแƒก แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒจแƒ˜ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ API แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ.

แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ / แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ & python-แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ

package-แƒ˜ แƒ“แƒแƒขแƒ”แƒกแƒขแƒ˜แƒšแƒ˜แƒ แƒ“แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก python3-แƒ—แƒ•แƒ˜แƒก (>3.4). แƒฌแƒ”แƒกแƒ˜แƒ—, python2-แƒ–แƒ”แƒช แƒแƒ  แƒฃแƒœแƒ“แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ•แƒ”แƒ  แƒ’แƒ”แƒขแƒงแƒ•แƒ˜แƒ— :).

package-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก 2 แƒ’แƒ–แƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก:

  1. แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ— แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒ’แƒ˜แƒขแƒฐแƒแƒ‘แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— python3 setup.py install
  2. pip-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— pip3 install tbc_adapter

happy coding!

API-แƒก แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜

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"}

2) แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜แƒก แƒ’แƒแƒ’แƒ”แƒ‘แƒ

แƒ˜แƒฆแƒ”แƒ‘แƒก: 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"}
3) แƒ“แƒฆแƒ˜แƒก แƒ“แƒแƒฎแƒฃแƒ แƒ•แƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ

แƒ˜แƒฆแƒ”แƒ‘แƒก: 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"}
4) แƒžแƒ แƒ”-แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ (แƒ—แƒแƒœแƒฎแƒ˜แƒก แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ)

แƒ˜แƒฆแƒ”แƒ‘แƒก: 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"}
6) แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ แƒ”แƒ•แƒ”แƒ แƒกแƒแƒšแƒ˜

แƒ˜แƒฆแƒ”แƒ‘แƒก: 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"}
7) แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ แƒ”แƒคแƒแƒœแƒ“แƒ˜

แƒ˜แƒฆแƒ”แƒ‘แƒก: 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.

Exception-แƒ”แƒ‘แƒ˜

แƒ แƒแƒช แƒจแƒ”แƒ”แƒฎแƒ”แƒ‘แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒก:

  1. แƒแƒ“แƒแƒžแƒขแƒ”แƒ แƒ˜ "แƒแƒฌแƒ”แƒ•แƒก" TBCAdapterException แƒขแƒ˜แƒžแƒ˜แƒก exception-แƒก, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒจแƒ•แƒ˜แƒšแƒแƒ‘แƒ˜แƒš แƒ™แƒšแƒแƒกแƒจแƒ˜ แƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ pem_paths & service_url property-แƒ”แƒ‘แƒ˜ (แƒจแƒ•แƒ˜แƒšแƒแƒ‘แƒ˜แƒšแƒ˜ แƒ™แƒšแƒแƒกแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒ—แƒแƒœแƒแƒ•แƒ”)
  2. requests.exceptions.HTTPError-แƒก แƒ—แƒฃ แƒ‘แƒแƒœแƒ™แƒ˜แƒ“แƒแƒœ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก status_code แƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ 200

แƒฎแƒแƒšแƒ TBC API แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒ“แƒ แƒแƒก แƒแƒ“แƒแƒžแƒขแƒ”แƒ แƒ˜ แƒ“แƒแƒ˜แƒญแƒ”แƒ แƒก (แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜) แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒก:

  1. requests.exceptions.ConnectTimeout
  2. requests.exceptions.SSLError
  3. requests.exceptions.HTTPError
  4. แƒ“แƒ แƒ‘แƒแƒšแƒแƒก แƒงแƒ•แƒ”แƒšแƒ แƒกแƒฎแƒ•แƒแƒก - Exception

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒฉแƒฃแƒ›แƒ˜ (silent) แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜แƒ— แƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒ’แƒ•แƒแƒ แƒ”แƒ‘แƒ แƒ“แƒ API แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒจแƒ˜, api_out-แƒจแƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฌแƒ”แƒ•แƒ แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒ›แƒแƒ“แƒ˜แƒก แƒšแƒ”แƒฅแƒกแƒ˜แƒ™แƒแƒœแƒ˜ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒฎแƒ”แƒšแƒฌแƒ”แƒ แƒ˜แƒ—:

{"status": False, "desc": "exc. type"}

...แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก desc แƒฃแƒคแƒ แƒ verbose แƒ˜แƒงแƒแƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฎแƒšแƒ แƒแƒ  แƒแƒ แƒ˜แƒก...

Packages

 
 
 

Contributors

Languages