支付寶開發平臺登錄
https://open.alipay.com/platform/home.htm
沙箱環境
- 是支付寶提供給開發者的模擬支付的環境
- 跟真實環境是分開的
- 沙箱應用:https://docs.open.alipay.com/200/105311
- 沙箱賬號:https://openhome.alipay.com/platform/appDaily.htm?tab=account
支付寶開發者文檔
- 文檔主頁:https://openhome.alipay.com/developmentDocument.htm
- 產品介紹:https://docs.open.alipay.com/270
- 快速接入:https://docs.open.alipay.com/270/105899/
- SDK:https://docs.open.alipay.com/270/106291/
- API列表:https://docs.open.alipay.com/270/105900/
- python對接支付寶SDK:https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
- python對接支付寶SDK安裝:
pip install python-alipay-sdk --upgrade
接入步驟
- 創建應用
- 配置密鑰
- 搭建和配置開發環境
- 接口調用
配置祕鑰
1. 生成應用的私鑰和公鑰
openssl
OpenSSL> genrsa -out app_private_key.pem 2048 # 私鑰RSA2
OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 導出公鑰
OpenSSL> exit
2. 保存應用私鑰文件
在應用中新建keys目錄,用來保存祕鑰文件。
將應用私鑰文件app_private_key.pem複製到keys目錄下。
3. 查看公鑰
cat app_publict_key.pem
將公鑰內容複製給支付寶
4. 保存支付寶公鑰
在keys目錄下新建alipay_public_key.pem文件,用於保存支付寶的公鑰文件。
將支付寶的公鑰內容複製到alipay_public_key.pem文件中
注意,還需要在公鑰文件中補充開始與結束標誌
-----BEGIN PUBLIC KEY-----
此處是公鑰內容
-----END PUBLIC KEY-----
配置
# 支付寶
ALIPAY_APPID = "2016081600258081"
ALIPAY_URL = "https://openapi.alipaydev.com/gateway.do"
ALIPAY_DEBUG = True
接口調用
電腦網站支付
# 構造支付寶支付鏈接
alipay = AliPay(
appid=settings.ALIPAY_APPID, # 配置中的APPID
app_notify_url=None, # 默認回調url
app_private_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/app_private_key.pem"), # 應用私鑰
alipay_public_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/alipay_public_key.pem"), # 支付寶公鑰
sign_type="RSA2", # RSA 或者 RSA2
debug=settings.ALIPAY_DEBUG # 默認是False
)
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no='20161112', # 訂單號
total_amount='0.01', # 商品總金額
subject='測試訂單'
return_url="https://example.com",
notify_url="https://example.com/notify" # 可選, 不填則使用默認notify url
)
驗證回調通知
# 驗證alipay的異步通知,data來自支付寶回調POST 給你的data,字典格式.
data = {
"subject": "測試訂單",
"gmt_payment": "2016-11-16 11:42:19",
"charset": "utf-8",
"seller_id": "xxxx",
"trade_status": "TRADE_SUCCESS",
"buyer_id": "xxxx",
"auth_app_id": "xxxx",
"buyer_pay_amount": "0.01",
"version": "1.0",
"gmt_create": "2016-11-16 11:42:18",
"trade_no": "xxxx",
"fund_bill_list": "[{\"amount\":\"0.01\",\"fundChannel\":\"ALIPAYACCOUNT\"}]",
"app_id": "xxxx",
"notify_time": "2016-11-16 11:42:19",
"point_amount": "0.00",
"total_amount": "0.01",
"notify_type": "trade_status_sync",
"out_trade_no": "xxxx",
"buyer_logon_id": "xxxx",
"notify_id": "xxxx",
"seller_email": "xxxx",
"receipt_amount": "0.01",
"invoice_amount": "0.01",
"sign": "xxx"
}
signature = data.pop("sign")
alipay = AliPay(
appid=settings.ALIPAY_APPID, # 配置中的APPID
app_notify_url=None, # 默認回調url
app_private_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/app_private_key.pem"), # 應用私鑰
alipay_public_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/alipay_public_key.pem"), # 支付寶公鑰
sign_type="RSA2", # RSA 或者 RSA2
debug=settings.ALIPAY_DEBUG # 默認是False
)
success = alipay.verify(data, signature)
if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED" ):
print("trade succeed")
其他接口調用
python對接支付寶SDK:https://github.com/fzlee/alipay/blob/master/README.zh-hans.md