45 支付寶支付(二次封裝)
阿新 • • 發佈:2022-03-03
支付寶支付
一、入門
""" 1)支付寶API:六大介面 https://docs.open.alipay.com/270/105900/ 2)支付寶工作流程(見下圖): https://docs.open.alipay.com/270/105898/ 3)支付寶8次非同步通知機制(支付寶對我們伺服器傳送POST請求,索要 success 7個字元) https://docs.open.alipay.com/270/105902/ """
# 1、在沙箱環境下實名認證:https://openhome.alipay.com/platform/appDaily.htm?tab=info # 2、電腦網站支付API:https://docs.open.alipay.com/270/105900/# 3、完成RSA金鑰生成:https://docs.open.alipay.com/291/105971 #點線上生成(不需要下載) # 4、在開發中心的沙箱應用下設定應用公鑰:填入生成的公鑰檔案中的內容 # 5、Python支付寶開源框架:https://github.com/fzlee/alipay #由於電腦網站支付沒有 python sdk ,對著API列表裡的找又比較麻煩,我們用第三方的sdk(也是扣著API做的封裝,本身也是呼叫了API) # >: pip install python-alipay-sdk --upgrade # 7、公鑰私鑰設定 """ # alipay_public_key.pem-----BEGIN PUBLIC KEY----- 支付寶公鑰 -----END PUBLIC KEY----- # app_private_key.pem -----BEGIN RSA PRIVATE KEY----- 使用者私鑰 -----END RSA PRIVATE KEY----- """ # 8、支付寶連結 """ 開發:https://openapi.alipay.com/gateway.do 沙箱:https://openapi.alipaydev.com/gateway.do """
二、支付流程
三、支付寶支付測試
https://openhome.alipay.com/platform/appDaily.htm?tab=info
# 沙箱環境 -商戶號 -使用者號 # 非對稱加密 -公鑰,私鑰: -加密用公鑰加密,解密用私鑰解密 # 對稱加密:加密和解密的密碼一樣 # 第三方支付寶sdk
# 生成公鑰私鑰
-在本地使用命令生成
-支付網站,軟體生成:https://docs.open.alipay.com/291/105971 點連結,然後點web線上加密(如下圖)
-支付寶支付的話,僅有公鑰私鑰不行,還需要支付寶公鑰---》把咱們的公鑰填入---》生成支付寶公鑰
複製上面的公鑰,配置在下圖,把咱們的公鑰填入---》生成支付寶公鑰
pri
-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA1hB5TaKwYUAQXc/zrOe7SgS3eHnljHUrHehuINtAq0AQp3tq2SrFJp+yiCTx4XhOTpWpoRinTH0hpxE+oGVl4Cs0ukfO3cdfARAK+eHX70PlUvC1ZuPZphHOByzwrd2oNdfI0RL+8lgyRl+coooZCS2eB0H8kCWqyUSCUvW0c1wicVJhosl0hjMqwegWhm3tVKo7Rd4pPeskZZB7uYGE0sAEhavX0GmGYamruRNmVmgRHPdNXl8jgkMYZWBYnOhErULFZa7FuE4zeymIhe/mH5SzZYiod+pU/Gk2ANtaNXYC9LZEDyUdK7D8E2sXf1Apvm9O2GW4jyrSWvL8tZl8CwIDAQABAoIBADQt6dOxz3q1KggkE4rXJcEiKzLTy8+UFAGDUazypO3ZfPXGUMJE+a+zh8pF7yv9rmDbfHDHWKh9bAGUY4ankNC213B85oELAy54IaTNl1w8WZ8BC8bbzYb8mhMHslc/S6xsQAgusDSUqRScY8r/DKE/HGE6hX0BoYLUD0x3lhf0MBcQS45jRReFXSL9on830mrGMkdijLEIDB7VnQKKAoZCEtk7IPexWOx/m7rKiM93h3Au2teSEi8asYv08eJ+d5ycLFqmom690Op3gsgqLPWooldocliKIkz7YHa50+NNT10oVh5fE90BLa1V8vsnef0LOBATGwvv6da/94f7/BECgYEA+dZLkbo/Crq4Xn7+++Iq4SG02UDFW9DgXH+E9fEgzq2hAEawXuuJ0wl+igwwG/mHAjEOZoc01WtRsWzbE/z7vxmoT3c8Xt9A/xcs4bU8JBDhc7wW7sREtRx21/ccHdkJ6IGeXodhLZuIRk5WXsr3tcOyP2XtEDwOn7wjh5fFEjkCgYEA21hGsayYAsXxmNTSfCPto9m4pasWRO5uteeGCViJ6S4yoSiIFro9/390Ds62ZQti6SObrTlBg2LW6x5tjbU3LkVbRkaZzlTfgbkOmH56d2500Kv6xoWhowelXCEjjwg5OqsfJsn6Sfmef8oOAH636XNfJuMXtD8gqAJYUqW+8GMCgYARm7vpwnGtBOn3pwW7pP4WrfR8F2eRiBA4FLi/SMZiKrSdO1404m7tU876Vc+SOSz9x41XRpI/tHemhKCQMRVhK6LELwgvO5buI6kDI23gsNvi90+6dlTNWvs5T25I4EIlg/UwfmQn/b1GD0FhHvcEdY17kGh762+wbGcoqFa4aQKBgQDAgLgChRQgEvMXC2jzdGDClXkdRIrV0mAtm1UibKcUk+vxTm4pbCivTH9h439mLNkQ/aRKId7iXWN7lAfX/3u/SzVw9tNTp19FLVGm+hGnMbSp0tXTV0Jln3c75QWdKT14xOghFdBpDf9R7dXeD1h/NTcEHPgXw/N4IB694iMyOwKBgQCzeJ//qo0FZzcKhbpk1zeW+s2wHh984f2DEDUhCdBRNM7s5k9zLyrYhQGToA+d0WRFjak5DJKMah2V8nowu7j4XO3Xy1lfAxk1xCUcjIK/3ZAtW+zHA8gVq7ZBfHnNjSoHVA7b0VCs8wGJO17Nl6R158QTw/fMj+8RiJvFcllCmQ== -----END RSA PRIVATE KEY-----
pub
-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA1hB5TaKwYUAQXc/zrOe7SgS3eHnljHUrHehuINtAq0AQp3tq2SrFJp+yiCTx4XhOTpWpoRinTH0hpxE+oGVl4Cs0ukfO3cdfARAK+eHX70PlUvC1ZuPZphHOByzwrd2oNdfI0RL+8lgyRl+coooZCS2eB0H8kCWqyUSCUvW0c1wicVJhosl0hjMqwegWhm3tVKo7Rd4pPeskZZB7uYGE0sAEhavX0GmGYamruRNmVmgRHPdNXl8jgkMYZWBYnOhErULFZa7FuE4zeymIhe/mH5SzZYiod+pU/Gk2ANtaNXYC9LZEDyUdK7D8E2sXf1Apvm9O2GW4jyrSWvL8tZl8CwIDAQABAoIBADQt6dOxz3q1KggkE4rXJcEiKzLTy8+UFAGDUazypO3ZfPXGUMJE+a+zh8pF7yv9rmDbfHDHWKh9bAGUY4ankNC213B85oELAy54IaTNl1w8WZ8BC8bbzYb8mhMHslc/S6xsQAgusDSUqRScY8r/DKE/HGE6hX0BoYLUD0x3lhf0MBcQS45jRReFXSL9on830mrGMkdijLEIDB7VnQKKAoZCEtk7IPexWOx/m7rKiM93h3Au2teSEi8asYv08eJ+d5ycLFqmom690Op3gsgqLPWooldocliKIkz7YHa50+NNT10oVh5fE90BLa1V8vsnef0LOBATGwvv6da/94f7/BECgYEA+dZLkbo/Crq4Xn7+++Iq4SG02UDFW9DgXH+E9fEgzq2hAEawXuuJ0wl+igwwG/mHAjEOZoc01WtRsWzbE/z7vxmoT3c8Xt9A/xcs4bU8JBDhc7wW7sREtRx21/ccHdkJ6IGeXodhLZuIRk5WXsr3tcOyP2XtEDwOn7wjh5fFEjkCgYEA21hGsayYAsXxmNTSfCPto9m4pasWRO5uteeGCViJ6S4yoSiIFro9/390Ds62ZQti6SObrTlBg2LW6x5tjbU3LkVbRkaZzlTfgbkOmH56d2500Kv6xoWhowelXCEjjwg5OqsfJsn6Sfmef8oOAH636XNfJuMXtD8gqAJYUqW+8GMCgYARm7vpwnGtBOn3pwW7pP4WrfR8F2eRiBA4FLi/SMZiKrSdO1404m7tU876Vc+SOSz9x41XRpI/tHemhKCQMRVhK6LELwgvO5buI6kDI23gsNvi90+6dlTNWvs5T25I4EIlg/UwfmQn/b1GD0FhHvcEdY17kGh762+wbGcoqFa4aQKBgQDAgLgChRQgEvMXC2jzdGDClXkdRIrV0mAtm1UibKcUk+vxTm4pbCivTH9h439mLNkQ/aRKId7iXWN7lAfX/3u/SzVw9tNTp19FLVGm+hGnMbSp0tXTV0Jln3c75QWdKT14xOghFdBpDf9R7dXeD1h/NTcEHPgXw/N4IB694iMyOwKBgQCzeJ//qo0FZzcKhbpk1zeW+s2wHh984f2DEDUhCdBRNM7s5k9zLyrYhQGToA+d0WRFjak5DJKMah2V8nowu7j4XO3Xy1lfAxk1xCUcjIK/3ZAtW+zHA8gVq7ZBfHnNjSoHVA7b0VCs8wGJO17Nl6R158QTw/fMj+8RiJvFcllCmQ== -----END RSA PRIVATE KEY-----
alipay/main.py
import os # 應用私鑰 APP_PRIVATE_KEY_STRING = open('./pri').read() # 支付寶公鑰 ALIPAY_PUBLIC_KEY_STRING = open('./pub').read() from alipay import AliPay pay=AliPay( appid=2021000119627825, 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) res=pay.api_alipay_trade_page_pay( out_trade_no='123456', total_amount=float(99.99), # 只有生成支付寶連結時,不能用Decimal subject='精品內衣', return_url='http://127.0.0.1:8080/home', notify_url='http://127.0.0.1:8080/home', ) # print(res) pay_url='https://openapi.alipaydev.com/gateway.do?'+res print(pay_url)
aliapy二次封裝包
GitHub開源框架
https://github.com/fzlee/alipay
依賴
>: pip install python-alipay-sdk --upgrade
# 如果拋ssl相關錯誤,代表缺失該包
>: pip install pyopenssl
結構
alipay_public_key.pem
-----BEGIN PUBLIC KEY-----
拿應用公鑰跟支付寶換來的支付寶公鑰
-----END PUBLIC KEY-----
app_private_key.pem
-----BEGIN RSA PRIVATE KEY-----
通過支付寶公鑰私鑰簽發軟體簽發的應用私鑰
-----END RSA PRIVATE KEY-----
setting.py
import os # 應用私鑰 APP_PRIVATE_KEY_STRING = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'pem', 'app_private_key.pem')).read() # 支付寶公鑰 ALIPAY_PUBLIC_KEY_STRING = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'pem', 'alipay_public_key.pem')).read() # 應用ID APP_ID = '2016093000631831' # 加密方式 SIGN = 'RSA2' # 是否是支付寶測試環境(沙箱環境),如果採用真是支付寶環境,配置False DEBUG = True # 支付閘道器 GATEWAY = 'https://openapi.alipaydev.com/gateway.do' if DEBUG else 'https://openapi.alipay.com/gateway.do'
pay.py
from alipay import AliPay from . import settings # 支付物件 alipay = AliPay( appid=settings.APP_ID, app_notify_url=None, app_private_key_string=settings.APP_PRIVATE_KEY_STRING, alipay_public_key_string=settings.ALIPAY_PUBLIC_KEY_STRING, sign_type=settings.SIGN, debug=settings.DEBUG ) # 支付閘道器 gateway = settings.GATEWAY
_init_.py
# 包對外提供的變數 from .pay import gateway, alipay
補充:在自己專案的配置檔案中配置支付寶回撥介面:settings.py | dev.py
# 上線後必須換成公網地址 # 後臺基URL BASE_URL = 'http://127.0.0.1:8000' # 前臺基URL LUFFY_URL = 'http://127.0.0.1:8080' # 支付寶同步非同步回撥介面配置 # 後臺非同步回撥介面 NOTIFY_URL = BASE_URL + "/order/success/" # 前臺同步回撥介面,沒有 / 結尾 RETURN_URL = LUFFY_URL + "/pay/success"