iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
WordPress

透過WordPress架設電商網站,並串接管理後台系列 第 28

«D28»(金流篇)Backend to TapPay w/Python

  • 分享至 

  • xImage
  •  

拍謝因為我是抱著每天在 iT 邦幫忙更新當日學的東東的心態,幾乎沒有排程,到現在才發現漏掉了 TapPay Backend...不過相信我,絕對比你看過任何的 API 都還要簡單。

複習一下,整個付款流程會是:

  1. 使用者透過你提供給他的 TapPay 東東付款(輸入信用卡號、Apple Pay、Google Pay...)
  2. TapPay 回覆你一串包含 Prime 的資料
  3. 把這個包含 Prime 的資料傳送到你的後端
  4. 後端透過任何可以使用的 REST POST 到 TapPay 後台
  5. 取得 Response 並確認付款狀態

先取得 Prime

TapPay 後端有兩種取得付款結果的方法,一種是 Prime,一種是 Card Token,後者是給有綁定資訊,或是定期扣款使用的。

可以到這裡(iFrame),或是到官方 Github 找到其他你想串接的方式的 DEMO(其實取得的資訊都一樣)。

輸入測試卡號 4242 4242 4242 4242 04/42(大於今天的日期)
https://ithelp.ithome.com.tw/upload/images/20231006/201629371XGWOgXdNH.png

在下面會出現這串

Use following command to send to server 


curl -X POST https://sandbox.tappaysdk.com/tpc/payment/pay-by-prime \
-H 'content-type: application/json' \
-H 'x-api-key: partner_6ID1DoDlaPrfHw6HBZsULfTYtDmWs0q0ZZGKMBpp4YICWBxgK97eK3RM' \
-d '{
    "partner_key": "partner_6ID1DoDlaPrfHw6HBZsULfTYtDmWs0q0ZZGKMBpp4YICWBxgK97eK3RM",
    "prime": "ceb908f0765cb4173c88f48766773832c21e3a31a05aea08400d0bc2c4410914",
    "amount": "1",
    "merchant_id": "GlobalTesting_CTBC",
    "details": "Some item",
    "cardholder": {
        "phone_number": "+886923456789",
        "name": "王小明",
        "email": "LittleMing@Wang.com",
        "zip_code": "100",
        "address": "台北市天龍區芝麻街1號1樓",
        "national_id": "A123456789"
    }
}'

透過 Python API 取得結果

拿剛剛的那串到 Python,TapPay 有個 Python 的模組:
Github 說明:https://github.com/shihweilo/tappay-python
PyPI:https://pypi.org/project/tappay/

記得使用前要在終端機 pip install tappay

import tappay

# 初始化 tappay 客戶端
client = tappay.Client(True, 'partner_6ID1DoDlaPrfHw6HBZsULfTYtDmWs0q0ZZGKMBpp4YICWBxgK97eK3RM', 'GlobalTesting_CTBC')

# 卡片持有者的資訊(都可以帶空字串給伺服器)
phone = "+886923456789"
name = "王小明"
email = "LittleMing@Wang.com"
card_holder_data = tappay.Models.CardHolderData(phone, name, email)

# 支付資訊
prime_token = "ceb908f0765cb4173c88f48766773832c21e3a31a05aea08400d0bc2c4410914"  # 放上剛剛取得那串資料中的 "prime"
amount = 1
payment_details = "Some item"

# 執行支付操作
response_data_dict = client.pay_by_prime(prime_token, amount, payment_details, card_holder_data)

# 輸出結果
print(response_data_dict)

如果成功的話會顯示下面的資訊

>>> # 執行支付操作
>>> 
>>> response_data_dict = client.pay_by_prime(prime_token, amount, payment_details, card_holder_data)
>>> # 輸出結果
>>> 
>>> print(response_data_dict)
{'status': 0, 'msg': 'Success', 'amount': 1, 'acquirer': 'TW_CTBC', 'currency': 'TWD', 'rec_trade_id': 'D20231006wsnpIu', 'bank_transaction_id': 'TP20231006wsnpIu', 'order_number': '', 'auth_code': '195191', 'card_info': {'issuer': '', 'funding': 0, 'type': 1, 'level': '', 'country': 'UNITED KINGDOM', 'last_four': '4242', 'bin_code': '424242', 'issuer_zh_tw': '', 'bank_id': '', 'country_code': 'GB'}, 'transaction_time_millis': 1696604484430, 'bank_transaction_time': {'start_time_millis': '1696604484475', 'end_time_millis': '1696604484475'}, 'bank_result_code': '', 'bank_result_msg': '', 'card_identifier': 'f4b1d627cbf4472aadba5ef94927eb14', 'merchant_id': 'GlobalTesting_CTBC', 'is_rba_verified': False, 'transaction_method_details': {'transaction_method_reference': 'REQUEST', 'transaction_method': 'FRICTIONLESS'}}

Prime 放太久會臭掉變這樣

>>> # 輸出結果
>>> 
>>> print(response_data_dict)
{'status': 91, 'msg': 'Expired prime'}

用兩次會是這樣

>>> print(response_data_dict)
{'status': 121, 'msg': 'Invalid arguments : prime'}

切記保留 rec_trade_id,退款時會用到

FIN


上一篇
«D27»Summary
下一篇
«D29»(金流篇)Backend to TapPay w/PHP
系列文
透過WordPress架設電商網站,並串接管理後台30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言