使用支付寶沙箱環境支付
前言:正常情況下,我們使用支付寶支付,收錢的賬戶需要開通商戶號,開通商戶號需要公司的營業執照、對公賬戶等資訊。對開發來講,只需要商戶號、公鑰和私鑰,只要配對好了,就可以把錢付到這個商戶裡去。所以在開發測試階段,我們使用支付寶為我們提供的沙箱環境,它可以無限充值和花錢,模擬支付,當然錢都是假的。
1. 支付寶提供的沙箱環境
- 沙箱環境是支付寶開放平臺為開發者提供的與生產環境完全隔離的聯調測試環境,開發者在沙箱環境中完成的呼叫不會對生產環境中的資料造成任何影響。
- 支付寶掃一掃登入實名認證:https://openhome.alipay.com/platform/appDaily.htm?tab=info
- 實名認證完成後才可以看到沙箱環境,之前認證過的就可以直接看到。
- 掃碼下載一個沙箱客戶端,一會就可以用它付錢了。
可以直接點選充值,充很多錢
再用手機掃這個下面這個碼,下載一個支付寶沙箱客戶端
下載安裝好後輸入買家資訊中的使用者名稱和密碼登入
2. 支付寶交易的流程
在網站點選立即購買==》跳轉到支付寶支付頁面==》手機掃碼(手動輸入使用者名稱密碼)==》把錢付給了支付寶(沙箱商戶中了)==》跳轉回網站支付成功頁面==》支付寶會回撥我們的地址,攜帶訂單號,我們的專案通過訂單號,修改訂單狀態即可(從待支付修改為已支付)
3. 支付寶支付的開發流程
- 需要先登入,前端點選立即購買
- 提交訂單到後臺,調咱們專案的下單介面==》生成訂單,訂單狀態是未支付==》返回支付連結
- 前端拿到支付連結==》跳轉到請求支付連結,即支付寶地址
- 使用者登入支付寶,付款完成後,支付寶會回撥到前端(get回撥)==》我們在前端顯示支付成功
- 支付寶還有一個post回撥到後端==》我們還需要配合一個介面==》修改訂單狀態為已支付
- 支付寶官方流程:https://opendocs.alipay.com/open/270/105898/
4. 後端要寫的介面(本篇部落格裡沒寫)
- 下單介面
- post的回撥介面
5. 支付寶官方提供了API和SDK方案
- API使用說明:https://opendocs.alipay.com/open/028r8t?scene=22(比較麻煩,所以不用)
- SDK使用說明:https://opendocs.alipay.com/open/02no41
- 也可以用第三方封裝的SDK
6. Python第三方封裝的SDK使用
GitHub開源框架:https://github.com/fzlee/alipay
① 安裝第三方包
>: pip install python-alipay-sdk --upgrade # 如果拋ssl相關錯誤,代表缺失該包 >: pip install pyopenssl
② 生成應用公鑰和私鑰
官方使用說明:https://opendocs.alipay.com/common/02kipl
以前是可以線上生成應用公鑰和私鑰的,現在網站已經打開不了,需要下載並安裝 支付寶開放平臺金鑰工具
下載安裝成功後,點選立即使用
點選生成金鑰
生成應用公鑰和私鑰(儲存好)。
③ 用應用公鑰去配置生成支付寶公鑰
回到沙箱環境,點選自定義金鑰-->設定並檢視
https://openhome.alipay.com/develop/sandbox/app
將應用公鑰填寫進去
生成支付寶公鑰
④ 使用支付寶公鑰和自己應用私鑰
儲存需要嚴格按照這個格式:
alipay_public_key.pem
-----BEGIN PUBLIC KEY-----
用應用公鑰跟支付寶換來的支付寶公鑰
-----END PUBLIC KEY-----
app_private_key.pem
-----BEGIN RSA PRIVATE KEY-----
簽發軟體簽發的應用私鑰
-----END RSA PRIVATE KEY-----
⑤ 寫一個支付demo
├─iPay_test
│ aplipay_public_key.pem
│ app_private_key.pem
│ app_public_key.pem
│ pay.py
pay.py
from alipay import AliPay from alipay.utils import AliPayConfig # 應用私鑰 app_private_key_string = open("./app_private_key.pem").read() # 支付寶公鑰 alipay_public_key_string = open("aplipay_public_key.pem").read() # 拿到類例項化得到一個物件alipay alipay = AliPay( appid="2021000121697113", # 商戶號 app_notify_url=None, app_private_key_string=app_private_key_string, alipay_public_key_string=alipay_public_key_string, sign_type="RSA2", # 加密方式 debug=True, # 是否是支付寶測試環境(沙箱環境) verbose=False, # useful for debugging config=AliPayConfig(timeout=15) # optional, request timeout ) # 物件調方法, 生成加密串 res = alipay.api_alipay_trade_page_pay( # subject='寶馬7系', # 商品標題 out_trade_no='BMW308889888', # 訂單號 total_amount=float(2600000), # 訂單金額 return_url='', # get回撥地址 notify_url='', # post回撥地址 ) # 支付寶閘道器 + 加密串,才是真正的支付連結地址 print('https://openapi.alipaydev.com/gateway.do?'+res)
⑥ 執行成功後跳轉到支付連結地址,用沙箱支付寶app掃一掃,支付成功
因為這個demo沒有寫回調地址,所以看不到支付成功顯示,和跳轉已支付的訂單狀態