結帳成功的回調
在結帳成功後,Payfect API 將觸發一個回調到指定的 URL。這個回調將使用帶有 JSON 數據的 POST 請求。
回調 URL
回調 URL 的確定方式如下:
- 如果在
Create a Checkout
請求期間提供了一個callback_url
,那麼將使用該 URL。 - 如果在創建結帳時沒有提供
callback_url
,將使用在儀表板網站 webhook 頁面設置的默認回調 URL。
請求標頭
回調請求將包含一個名為 X-Payfect-Signature
的標頭。這個標頭包含回調數據的加密值。該值出於安全目的進行加密,並應在客戶端解密。
解密簽名
可以使用以下函數解密 X-Payfect-Signature
標頭中的簽名:
from cryptography.fernet import Fernet
import json
def decrypt_signature(signature, secret_key):
fernet = Fernet(secret_key.encode('utf-8'))
return json.loads(fernet.decrypt(signature.encode('utf-8')).decode('utf-8'))
驗證解密後的數據
在解密簽名後,驗證解密後的數據與原始 POST 請求體中的數據是否匹配至關重要。如果存在差異,可能表明 API 數據已被篡改。在這種情況下,應採取適當措施處理潛在的安全漏洞。
回調 Payload
以下為回調 payload 的格式:
{
"id": "ed8d24aa-a860-426b-8e56-87cb9f55a081",
"amount": "20.00",
"status": "succeeded",
"currency": "usdt",
"merchant": "bf065cc8-343d-4419-be7d-ed2190f1df4d",
"is_livemode": false,
"payment_intent": "b7c30e83-5439-47b2-ac4d-81c64c1d0174",
"payment_method": {
"id": "74fa9095-b553-4607-b282-70ef7597a2e8",
"payment_method_detail": {
"network": "tron",
"currency": "usdt"
}
},
"client_reference_id": "5ae50223-e455-4a72-a48d-fe7d85800e64"
}