Python對(duì)接支付寶支付之使用AliPay實(shí)現(xiàn)的詳細(xì)操作指南
一、引言
在當(dāng)今數(shù)字化的商業(yè)環(huán)境中,電子支付已經(jīng)成為交易的主流方式。支付寶作為國內(nèi)領(lǐng)先的第三方支付平臺(tái),被廣泛應(yīng)用于各類線上線下交易場景。對(duì)于 Python 開發(fā)者而言,如何方便快捷地在項(xiàng)目中對(duì)接支付寶支付是一個(gè)常見需求。本文將詳細(xì)介紹如何使用 alipay 庫中的 AliPay 類,完成支付寶支付的一系列操作,涵蓋支付、查詢、退款以及退款查詢等功能。
二、準(zhǔn)備工作
2.1 支付寶開放平臺(tái)入駐與應(yīng)用創(chuàng)建
- 訪問支付寶開放平臺(tái),注冊(cè)并登錄賬號(hào)。
- 入駐成為開發(fā)者后,創(chuàng)建一個(gè)新的應(yīng)用。在應(yīng)用管理界面,獲取應(yīng)用的
APPID,這是應(yīng)用在支付寶平臺(tái)的唯一標(biāo)識(shí)。
2.2 密鑰生成與配置
- 生成 RSA2 密鑰對(duì)(公鑰和私鑰),可以使用支付寶提供的密鑰生成工具。
- 將應(yīng)用私鑰保存好,同時(shí)將公鑰上傳至支付寶開放平臺(tái)。另外,需要獲取支付寶公鑰,用于驗(yàn)證支付寶返回的簽名。
2.3 安裝alipay庫
使用 pip 命令安裝 python-alipay-sdk 庫,它提供了 AliPay 類來方便我們與支付寶進(jìn)行交互:
pip install python-alipay-sdk --upgrade
三、導(dǎo)入AliPay并初始化
在 Python 代碼中,我們需要導(dǎo)入 AliPay 類并進(jìn)行初始化。以下是示例代碼:
from alipay import AliPay
# 初始化 AliPay 對(duì)象
app_private_key_string = open("path/to/your/app_private_key.pem").read()
alipay_public_key_string = open("path/to/alipay_public_key.pem").read()
alipay = AliPay(
appid="your_appid",
app_notify_url=None, # 支付結(jié)果異步通知 URL,可根據(jù)實(shí)際情況設(shè)置
app_private_key_string=app_private_key_string,
alipay_public_key_string=alipay_public_key_string,
sign_type="RSA2", # 簽名算法,推薦使用 RSA2
debug=False # 調(diào)試模式,True 表示使用沙箱環(huán)境,F(xiàn)alse 表示使用正式環(huán)境
)四、發(fā)起支付請(qǐng)求
使用 AliPay 對(duì)象發(fā)起支付請(qǐng)求,生成支付鏈接或二維碼。以下是電腦網(wǎng)站支付的示例代碼:
# 支付參數(shù)
subject = "商品名稱"
out_trade_no = "your_out_trade_no" # 商戶訂單號(hào),需保證唯一
total_amount = 9.9 # 訂單總金額
# 發(fā)起支付請(qǐng)求
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no=out_trade_no,
total_amount=total_amount,
subject=subject,
return_url="your_return_url", # 支付成功后跳轉(zhuǎn)的頁面 URL
notify_url="your_notify_url" # 支付結(jié)果異步通知 URL
)
# 生成支付鏈接
pay_url = "https://openapi.alipay.com/gateway.do?" + order_string
print(f"支付鏈接:{pay_url}")五、查詢訂單狀態(tài)
在支付過程中,我們可能需要查詢訂單的支付狀態(tài)。以下是查詢訂單的示例代碼:
# 要查詢的訂單號(hào)
out_trade_no = "your_out_trade_no"
# 查詢訂單
result = alipay.api_alipay_trade_query(out_trade_no=out_trade_no)
if result.get("trade_status") == "TRADE_SUCCESS":
print("訂單支付成功")
elif result.get("trade_status") == "TRADE_CLOSED":
print("訂單已關(guān)閉")
else:
print(f"訂單狀態(tài):{result.get('trade_status')}")六、發(fā)起退款請(qǐng)求
如果需要對(duì)已支付的訂單進(jìn)行退款操作,可以使用以下代碼:
# 要退款的訂單號(hào)
out_trade_no = "your_out_trade_no"
# 退款金額
refund_amount = 9.9
# 退款原因
refund_reason = "用戶申請(qǐng)退款"
# 發(fā)起退款請(qǐng)求
result = alipay.api_alipay_trade_refund(
out_trade_no=out_trade_no,
refund_amount=refund_amount,
refund_reason=refund_reason
)
if result.get("code") == "10000":
print("退款申請(qǐng)成功")
else:
print(f"退款申請(qǐng)失敗,錯(cuò)誤信息:{result.get('msg')}")七、查詢退款狀態(tài)
發(fā)起退款請(qǐng)求后,我們可以查詢退款的處理狀態(tài)。以下是查詢退款狀態(tài)的示例代碼:
# 要查詢的訂單號(hào)
out_trade_no = "your_out_trade_no"
# 退款單號(hào)(如果退款時(shí)未指定,可使用訂單號(hào)代替)
out_request_no = "your_out_request_no"
# 查詢退款狀態(tài)
result = alipay.api_alipay_trade_fastpay_refund_query(
out_trade_no=out_trade_no,
out_request_no=out_request_no
)
if result.get("code") == "10000":
refund_status = result.get("refund_status")
print(f"退款狀態(tài):{refund_status}")
else:
print(f"退款查詢失敗,錯(cuò)誤信息:{result.get('msg')}")八、完整示例代碼
from alipay import AliPay
# 初始化 AliPay 對(duì)象
app_private_key_string = open("path/to/your/app_private_key.pem").read()
alipay_public_key_string = open("path/to/alipay_public_key.pem").read()
alipay = AliPay(
appid="your_appid",
app_notify_url=None,
app_private_key_string=app_private_key_string,
alipay_public_key_string=alipay_public_key_string,
sign_type="RSA2",
debug=False
)
# 支付參數(shù)
subject = "商品名稱"
out_trade_no = "your_out_trade_no"
total_amount = 9.9
# 發(fā)起支付請(qǐng)求
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no=out_trade_no,
total_amount=total_amount,
subject=subject,
return_url="your_return_url",
notify_url="your_notify_url"
)
# 生成支付鏈接
pay_url = "https://openapi.alipay.com/gateway.do?" + order_string
print(f"支付鏈接:{pay_url}")
# 查詢訂單
result = alipay.api_alipay_trade_query(out_trade_no=out_trade_no)
if result.get("trade_status") == "TRADE_SUCCESS":
print("訂單支付成功")
# 發(fā)起退款請(qǐng)求
refund_amount = 9.9
refund_reason = "用戶申請(qǐng)退款"
refund_result = alipay.api_alipay_trade_refund(
out_trade_no=out_trade_no,
refund_amount=refund_amount,
refund_reason=refund_reason
)
if refund_result.get("code") == "10000":
print("退款申請(qǐng)成功")
# 查詢退款狀態(tài)
out_request_no = "your_out_request_no"
refund_query_result = alipay.api_alipay_trade_fastpay_refund_query(
out_trade_no=out_trade_no,
out_request_no=out_request_no
)
if refund_query_result.get("code") == "10000":
refund_status = refund_query_result.get("refund_status")
print(f"退款狀態(tài):{refund_status}")
else:
print(f"退款查詢失敗,錯(cuò)誤信息:{refund_query_result.get('msg')}")
else:
print(f"退款申請(qǐng)失敗,錯(cuò)誤信息:{refund_result.get('msg')}")
else:
print(f"訂單狀態(tài):{result.get('trade_status')}")九、注意事項(xiàng)
- 密鑰安全:應(yīng)用私鑰和支付寶公鑰是非常重要的安全信息,務(wù)必妥善保管,避免泄露。
- 簽名驗(yàn)證:在接收支付寶的異步通知時(shí),需要對(duì)簽名進(jìn)行驗(yàn)證,確保數(shù)據(jù)的真實(shí)性和完整性。
- 訂單號(hào)唯一性:商戶訂單號(hào)和退款單號(hào)在系統(tǒng)中必須保證唯一,避免出現(xiàn)重復(fù)訂單或退款問題。
- 環(huán)境切換:在開發(fā)和測試階段,可以將
debug參數(shù)設(shè)置為True,使用支付寶沙箱環(huán)境進(jìn)行測試,確保正式上線前功能正常。
通過以上步驟,你可以使用 AliPay 類輕松實(shí)現(xiàn)支付寶支付的全流程操作,包括支付、查詢、退款和退款查詢。
總結(jié)
到此這篇關(guān)于Python對(duì)接支付寶支付之使用AliPay實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python AliPay對(duì)接支付寶支付內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+Tkinter繪制一個(gè)數(shù)字時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了Python使用Tkinter繪制一個(gè)數(shù)字時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
利用python在excel里面直接使用sql函數(shù)的方法
今天小編就為大家分享一篇利用python在excel里面直接使用sql函數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
Python Opencv中基礎(chǔ)的知識(shí)點(diǎn)
這篇文章主要介紹了Python Opencv中基礎(chǔ)的知識(shí)點(diǎn),主要包括創(chuàng)建窗口、保存圖片、采集視頻、鼠標(biāo)控制的代碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
Python使用openpyxl實(shí)現(xiàn)Excel超鏈接批量化設(shè)置
在Excel中,超鏈接是一種非常有用的功能,本文我們將介紹如何使用Python來處理Excel中的超鏈接,以及如何將超鏈接與對(duì)應(yīng)的工作表鏈接起來,需要的可以參考一下2023-07-07
python3.6實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python3.6實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
Python開發(fā)之射擊闖關(guān)游戲的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)射擊闖關(guān)游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的小伙伴可以了解一下2023-01-01
Windows環(huán)境下python環(huán)境安裝使用圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows環(huán)境下python安裝使用圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
python深度學(xué)習(xí)借助多標(biāo)簽分類器進(jìn)行對(duì)抗訓(xùn)練
這篇文章主要為大家介紹了python深度學(xué)習(xí)中如何借助多標(biāo)簽分類器進(jìn)行對(duì)抗訓(xùn)練,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-01-01

