Python對接支付寶支付之使用AliPay實現(xiàn)的詳細操作指南
一、引言
在當(dāng)今數(shù)字化的商業(yè)環(huán)境中,電子支付已經(jīng)成為交易的主流方式。支付寶作為國內(nèi)領(lǐng)先的第三方支付平臺,被廣泛應(yīng)用于各類線上線下交易場景。對于 Python 開發(fā)者而言,如何方便快捷地在項目中對接支付寶支付是一個常見需求。本文將詳細介紹如何使用 alipay 庫中的 AliPay 類,完成支付寶支付的一系列操作,涵蓋支付、查詢、退款以及退款查詢等功能。
二、準備工作
2.1 支付寶開放平臺入駐與應(yīng)用創(chuàng)建
- 訪問支付寶開放平臺,注冊并登錄賬號。
- 入駐成為開發(fā)者后,創(chuàng)建一個新的應(yīng)用。在應(yīng)用管理界面,獲取應(yīng)用的
APPID,這是應(yīng)用在支付寶平臺的唯一標識。
2.2 密鑰生成與配置
- 生成 RSA2 密鑰對(公鑰和私鑰),可以使用支付寶提供的密鑰生成工具。
- 將應(yīng)用私鑰保存好,同時將公鑰上傳至支付寶開放平臺。另外,需要獲取支付寶公鑰,用于驗證支付寶返回的簽名。
2.3 安裝alipay庫
使用 pip 命令安裝 python-alipay-sdk 庫,它提供了 AliPay 類來方便我們與支付寶進行交互:
pip install python-alipay-sdk --upgrade
三、導(dǎo)入AliPay并初始化
在 Python 代碼中,我們需要導(dǎo)入 AliPay 類并進行初始化。以下是示例代碼:
from alipay import AliPay
# 初始化 AliPay 對象
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è)置
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ā)起支付請求
使用 AliPay 對象發(fā)起支付請求,生成支付鏈接或二維碼。以下是電腦網(wǎng)站支付的示例代碼:
# 支付參數(shù)
subject = "商品名稱"
out_trade_no = "your_out_trade_no" # 商戶訂單號,需保證唯一
total_amount = 9.9 # 訂單總金額
# 發(fā)起支付請求
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)。以下是查詢訂單的示例代碼:
# 要查詢的訂單號
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ā)起退款請求
如果需要對已支付的訂單進行退款操作,可以使用以下代碼:
# 要退款的訂單號
out_trade_no = "your_out_trade_no"
# 退款金額
refund_amount = 9.9
# 退款原因
refund_reason = "用戶申請退款"
# 發(fā)起退款請求
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("退款申請成功")
else:
print(f"退款申請失敗,錯誤信息:{result.get('msg')}")七、查詢退款狀態(tài)
發(fā)起退款請求后,我們可以查詢退款的處理狀態(tài)。以下是查詢退款狀態(tài)的示例代碼:
# 要查詢的訂單號
out_trade_no = "your_out_trade_no"
# 退款單號(如果退款時未指定,可使用訂單號代替)
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"退款查詢失敗,錯誤信息:{result.get('msg')}")八、完整示例代碼
from alipay import AliPay
# 初始化 AliPay 對象
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ā)起支付請求
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ā)起退款請求
refund_amount = 9.9
refund_reason = "用戶申請退款"
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("退款申請成功")
# 查詢退款狀態(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"退款查詢失敗,錯誤信息:{refund_query_result.get('msg')}")
else:
print(f"退款申請失敗,錯誤信息:{refund_result.get('msg')}")
else:
print(f"訂單狀態(tài):{result.get('trade_status')}")九、注意事項
- 密鑰安全:應(yīng)用私鑰和支付寶公鑰是非常重要的安全信息,務(wù)必妥善保管,避免泄露。
- 簽名驗證:在接收支付寶的異步通知時,需要對簽名進行驗證,確保數(shù)據(jù)的真實性和完整性。
- 訂單號唯一性:商戶訂單號和退款單號在系統(tǒng)中必須保證唯一,避免出現(xiàn)重復(fù)訂單或退款問題。
- 環(huán)境切換:在開發(fā)和測試階段,可以將
debug參數(shù)設(shè)置為True,使用支付寶沙箱環(huán)境進行測試,確保正式上線前功能正常。
通過以上步驟,你可以使用 AliPay 類輕松實現(xiàn)支付寶支付的全流程操作,包括支付、查詢、退款和退款查詢。
總結(jié)
到此這篇關(guān)于Python對接支付寶支付之使用AliPay實現(xiàn)的文章就介紹到這了,更多相關(guān)Python AliPay對接支付寶支付內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python存儲或讀取json時如何引入額外的雙引號和轉(zhuǎn)義引號
這篇文章主要介紹了Python存儲或讀取json時如何引入額外的雙引號和轉(zhuǎn)義引號問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
Python+Kepler.gl輕松制作酷炫路徑動畫的實現(xiàn)示例
這篇文章主要介紹了Python+Kepler.gl輕松制作酷炫路徑動畫的實,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧現(xiàn)示例2020-06-06
Python實現(xiàn)按目錄層級輸出文件名并保存為excel
當(dāng)我們發(fā)現(xiàn)電腦的內(nèi)存很滿,或平時工作中文件夾管理不清晰,導(dǎo)致里面的文件數(shù)據(jù)很雜亂,查找很不方便,一個一個文件夾去看去找然后刪除又很浪費時間。本文將介紹如何利用Python實現(xiàn)按目錄層級輸出文件名并保存為excel,需要的可以參考一下2022-02-02
Python 聊聊socket中的listen()參數(shù)(數(shù)字)到底代表什么
本篇文章對Python 聊聊socket中的listen()參數(shù)(數(shù)字)到底代表什么,進行了很好的講解,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Python subprocess模塊功能與常見用法實例詳解
這篇文章主要介紹了Python subprocess模塊功能與常見用法,結(jié)合實例形式詳細分析了subprocess模塊功能、常用函數(shù)相關(guān)使用技巧,需要的朋友可以參考下2018-06-06
Python reduce()函數(shù)的用法小結(jié)
reduce()函數(shù)即為化簡函數(shù),它的執(zhí)行過程為:每一次迭代,都將上一次的迭代結(jié)果,需要的朋友可以參考下2017-11-11

