1. 程式人生 > 其它 >45 支付寶支付(二次封裝)

45 支付寶支付(二次封裝)

支付寶支付

一、入門

"""
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"