支付寶即時到帳介面的python實現,示例採用django框架

發表於2016-09-16

因工作需要研究了支付寶即時到帳介面,併成功應用到網站上,把過程拿出來分享。

即時到帳只是支付寶眾多商家服務中的一個,表示客戶付款,客戶用支付寶付款,支付寶收到款項後,馬上通知你,並且此筆款項與交易脫離關係,商家可以馬上使用。

即時到帳只對企業客戶服務,註冊成功企業賬號以後,申請簽約即時到帳產品,大約3-5個工作日後,簽約成功,可以馬上進入整合產品階段。

這個是支付寶提供的介面,有asp,c#,java,php四種語言的,每種語言提供GBK和UTF-8兩種方案。另帶一份支付寶的文件,這份文件我感覺本來簡單的事情越說越麻煩了。

http://download.alipay.com/public/api/base/alipaydirect.zip

網上搜了一下,發現python介面有幾個現成的方案。

https://github.com/fengli/alipay_python

這兩個是一個,程式碼我還沒看,寫文件的時候發現的。
https://github.com/lxneng/alipay

https://pypi.python.org/pypi/alipay/0.2.2

支付寶即時到帳交易過程。

商家:是指支付寶的企業客戶。也就是你整合服務單位。

終端消費者:是指在網上購物的消費者,你整合服務單位的客戶。

1、終端消費者在商家網站選擇商品,下訂單。

2、商家把支付資訊,get到支付寶指定的連結。

3、終端消費者在支付寶的網站上操作付款。

4、付款成功後,支付寶post付款成功的資訊到商家預先提供的地址。

5、支付寶在終端消費者付款成功後三秒後,通過get跳回商家指定的連結。

第4步跟終端消費者操作付款的跳轉無關,所以被稱為非同步通知。這一步,支付寶期待你返回’success’,如果你不返回’success’,支付寶會於4分鐘後再次post付款成功的資訊,此後每10分鐘post一次,至少30分鐘內如此。如果終端消費者付款失敗,非同步通知不會發生。

通過整合,我知道為什麼終端消費者付款成功後要等3秒後跳轉回商家頁面了,因為它要等非同步通知的資訊先到達,先處理訂單,再帶終端消費者回到客戶的介面,這樣就可以看到支付成功的頁面了。當然付款失敗,非同步通知不發生,訂單狀態沒有改變,終端消費者就只能看到付款失敗的資訊。

瞭解了支付過程,開始設計程式。

1、生成商品訂單。終端消費者選擇商品生成商品訂單。ID號要唯一,這個唯一不是要你採用UUID,而是跟支付寶往來過程唯一即可,從1遞增也可以,只是終端消費者能看到這個id,所以最好採用固定長度的字串,終端消費者如果知道自己是第一個客戶,會不會心裡發怵?後面會談到,為了安全不僅不能用遞增,而且至少要6位隨機碼以上。

2、選擇支付方式。因為我們僅僅整合了即時到帳,所以只有支付寶付款一個選項。把支付方式加入訂單資訊,同時把訂單id post到下一步地址,這一步post,最好採用新開頁面,本頁面彈出對話方塊,讓客戶自己選擇支付成功或者支付失敗。

3、傳送支付資訊。根據post過來的訂單號組合資訊,get方式傳送資料給支付寶,同時帶動終端消費者頁面跳轉到支付寶支付頁面。

4、接受非同步通知。

5、支付成功後支付寶跳轉回來的程式。因為回來時get方式,為避免終端消費者看到更多敏感資訊,這一步並沒有渲染頁面,而是處理資訊,跳轉到另外一個頁面。

6、顯示支付結果。這個頁面和第2步讓客戶點選支付成功跳轉的是同一個。支付失敗,就跳轉到一個說明吧。

alipay.py

hashcompact.py

config.py

view.py

view.py中的程式碼僅供參考!

相關文章