Alipay
#1 需求分析
在App中,用戶通過支付寶提現時,將我賬戶上的資金轉賬到他的賬戶
#2 沙箱模式
#2.1 獲取支付寶祕鑰
- 獲取Appid
https://openhome.alipay.com/platform/appDaily.htm?tab=info
- 生成應用公鑰和應用私鑰
- 下載一個電腦App
https://opendocs.alipay.com/open/291/105971
- 生成支付寶公鑰(注意:支付寶公鑰和應用公鑰不是一個東西)
#2.2 安裝插件
pip install python-alipay-sdk
#2.3 代碼
from datetime import datetime
from alipay import AliPay
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
class Payment():
def __init__(self, appid, url):
'''
支付接口初始化
:param appid: 商戶appid
:param url: 支付寶網關
'''
self.app_private_key_string = """-----BEGIN PUBLIC KEY-----
你的應用祕鑰
-----END PUBLIC KEY-----"""
self.alipay_public_key_string = """-----BEGIN RSA PRIVATE KEY-----
你的支付寶公鑰
-----END RSA PRIVATE KEY-----"""
self.alipay = AliPay(
appid=appid, # appid
app_notify_url=url, # 支付寶網關
app_private_key_string=self.app_private_key_string, # 應用私鑰
alipay_public_key_string=self.alipay_public_key_string, # 支付寶公鑰
sign_type="RSA2",
debug=True, # 本地調試, 上線設置爲False
)
def pay(self, payee_account, amount, payee_real_name=None, remark=None, payer_show_name=None,
payee_type="ALIPAY_LOGONID"):
'''
發起轉賬
:param payee_account: 收款方賬戶
:param amount: 轉賬金額
:param payee_real_name:
:param remark: 收款方姓名
:param payer_show_name: 轉賬備註
:param payee_type: 付款方姓名
:return:
'''
result = self.alipay.api_alipay_fund_trans_toaccount_transfer(
datetime.now().strftime("%Y%m%d%H%M%S"),
payee_type=payee_type, # 收款方賬戶類型
payee_account=payee_account, # 收款方賬戶
amount=amount, # 轉賬金額
payee_real_name=payee_real_name, # 收款方姓名(可選,若不匹配則轉賬失敗)
remark=remark, # 轉賬備註
payer_show_name=payer_show_name # 付款方姓名
)
if result['code'] == '10000':
if result['msg'] == "Success":
print("轉賬成功" + " 交易單號:" + result["order_id"])
else:
print(result)
print(result['sub_msg'])
obj_pay = Payment(
appid="2016102300746212",
url="https://openapi.alipaydev.com/gateway.do"
)
obj_pay.pay(
payee_account="[email protected]",
amount=500,
)
AliPay接口文檔 :
https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer
#2.4 遇到的問題
- url請求問題
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)>異常
錯誤原因:
這是一個SSL證書驗證錯誤,當請求一個https站點,但是證書驗證錯誤時,就會報這樣的錯誤。
解決方法:
只需在代碼中加入如下兩行將跳過證書的檢查,即可成功訪問網頁。
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
- 祕鑰格式
"""-----BEGIN PUBLIC KEY-----
你的應用祕鑰
-----END PUBLIC KEY-----"""
"""-----BEGIN RSA PRIVATE KEY-----
你的支付寶公鑰
-----END RSA PRIVATE KEY-----"""
-----BEGIN PUBLIC KEY----- + 回車 + 祕鑰 + 回車 + -----END PUBLIC KEY-----