支付宝支付

入门

复制代码
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/
# 如果用户支付成功的时候服务端宕机了,我们只需要将服务端重新启动即可,
# 支付宝有8次异步回调,不会导致订单消失
复制代码

支付宝工作流程

复制代码
# 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

# 6、公钥私钥设置
"""
# alipay_public_key.pem
-----BEGIN PUBLIC KEY-----
支付宝公钥
-----END PUBLIC KEY-----

# app_private_key.pem
-----BEGIN RSA PRIVATE KEY-----
用户私钥
-----END RSA PRIVATE KEY-----
"""

# 7、支付宝链接
"""
开发:https://openapi.alipay.com/gateway.do
沙箱:https://openapi.alipaydev.com/gateway.do
"""
复制代码

 

三、支付宝支付测试
https://openhome.alipay.com/platform/appDaily.htm?tab=info
复制代码
# 沙箱环境
    -商户号
    -用户号
# 非对称加密 -公钥,私钥: -加密用公钥加密,解密用私钥解密
# 对称加密:加密和解密的密码一样
#
第三方支付宝sdk
复制代码

生成公钥私钥的两种方式

复制代码
生成公钥私钥的两种方式:
    -1.在本地使用命令生成:
        打开 openssl ,然后输入如下:
        genrsa -out app_private_key.pem  # 私钥
        rsa -in app_privete_key.pem puout -out app_public_key.pem  # 公钥
        退出 openssl ,在当前位置查看这两个文件
-2.支付网站,软件生成:https://docs.open.alipay.com/291/105971 点链接,然后点web在线加密(如下图) -支付宝支付的话,仅有公钥私钥不行, - 还需要支付宝公钥---》把咱们的公钥填入---》生成支付宝公钥
复制代码

方式二如下图:

复制上面的公钥,配置在下图,把咱们的公钥填入---》生成支付宝公钥

这样,我们就配置好了沙箱环境。

apliapy测试

pri

-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAjjuwX8A2OubG3wBF7UYHoZSYmeOH9mMSXETYDBo6JJG47A70S0fS2E1AvJB+btB8WKgNeyRvT9fkAYuZBZrS8A8ovUsuiX7x+wCVQmth4qeabTTEQjATsml0CLC5dqrRSAG2w6oGpXtQZKP+/wZSD87Gk0iG/q4Z/1yA0z9DzGEQdXv+06fMk2i1mRXOyRIx7sokCmevu7Kc1OJTyA1o2YDv8v6mWjpWRQ3YOgQYZk166vkrfjv/bI46ZdIsZ3IvOCC6/s0BEoIhLxFUawOKnr8JAwULwACSdABbhZbzDzUJRfT0yMhGoREo9c4iqaIikgjJRHooTyalLaNsKkazaQIDAQABAoIBAQCHn+sCoqoTaFNh+US0h/5m2ObadtgC3V14ljzc7XVbwYhvr6LK1eX7U07Tf4TP7gVkFHsmXQu3Osmzn4V+jq9tMUdLmRD7Ew1ypo+tEe/4zJC4aYRrCKT/jwaR8tImkaOV4eyAjvRff0KddLOGQmSlpio77wCqgSFRGsfMp5rimo9Imd7pTbKV5SWF7f+Utg2aqy3zBwjPq1awCgZKGGYudYIzvbDsvpmITLZA0nlixl6N52VTnNER3/OtTpdoFf99xXVStR+NEVS8ycZfW4SZ8leqLAIu/BS1KYr8K+VM7/QFKCx8/0LTK0SCnpG8rgVPBKdYmz0XwPdIYyQLQdvBAoGBAMklm0YVNoB9b/+NrdYibKMwJZdou21W6v/RMHJLBizoDWuGUOQ40aYGC7AUM/JUipEBHg69rcRkeGSJhO5nxyfmpnswcyAEvDKUgWOrJ22xCDGl+x04ykSwLIsHVEw40mvVWlSSlrhXgX3eJJ050B9/MzhmXos+J9zM2uvwrMlNAoGBALUFN9DVuYcPoZavcwaVnWd7DAI1iXjqX/6QPEjeJ26D7YaETtS3/8Z8j9IQtG5HHZKTETCIxL6NQDx7RTXHPrfc74ttXj61L7JosGecDGcrAKdulvL03//cP/ZJ9eSopX/GxxdI3+/4p4tP4vxew2/GUcusEg2xMZVlNsLbgSSNAoGAQdpeC4PGZCqtEC2CTCjZCFQq+nb/ZbyfE0GZatHFI86VFi7TLOStPn2cNflnSF8FPpPvE0RmL3X1NHURYDv5p8aLmqkyB7mFI8oa0lamgfMDi72biOWe0v4alym/H3U67rLa7/VOAuwjKOIhepgC20z5p+1b5ppi0pb+1V/mMcECgYEAr5Q7Gk1jYbRwqGbPLBDMlwWLlUz2ZZj3uUOPpaINHy3JotMMX1mFNrG1EizvxZMnBPevEaNnKeh56PAsJkh29gHPOy6+3hYCCItwp159zUexn7UtpsSLzHGGfM4qOjq2JCTbESO3SdymLgMziFQmPnFe/y2MaUl4bY65ufEM5zUCgYEAgryn1FMXEtJ1EVg0ATMB/Ps87zbgRQpGYtDiBV1/Ax5P+WNJSx94o4GuxmduEuXPXthccTe5MPxcmOLbPcToymSJGdy3eywAyNkII1Nk5JrQphj4Peerc8I7pk6uhRnS9BEiw9AuC2bnG4w0XbfYmS6fmAkc2wfHAH/2VaXDH3E=
-----END RSA PRIVATE KEY-----

pub

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgzibcJkubn2xvjcFd2dZlO3Ig0SgDMIKVSX/G0LOuZx81fCb2PMFfvjKIpQ6WLKfIhFcipcYJn+8AfCcjezvtqRNCCpLGDV2iO14bwVC8k0QSyDos2euYqa5bD5Hay8hD/kc4GEZkENYvU6VcvkQEcuFBGi+qyf5Kd1WzEBoNDVIQhucAUgLFNOJrsrp05uARGfdJsCuM93f4TCdGR5X+Tz2W2DrpIlOxy1g4rHzr5JTV3/wBtsrREPxxinXQv84Pvqq/WBBMKuvazqOUD6FfPFDsa7rqGnzvfoW28pAgdowc2Hl61pmPAxWk0Nd62KKsLxTed42XFER613QJ64q6QIDAQAB
-----END PUBLIC KEY-----

alipay_t.py

复制代码
# alipay_t.py

import os
# 应用私钥
APP_PRIVATE_KEY_STRING = open('./pri').read()

# 支付宝公钥
ALIPAY_PUBLIC_KEY_STRING = open('./pub').read()

from alipay import AliPay
pay=AliPay(
    appid=2021000120697524,
    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)



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相关错误,代表缺失该包 python版本:3.8.10
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-----

settings.py

复制代码
import os


# 应用私钥
APP_PRIVATE_KEY_STRING = open(os.path.join(os.path.dirname(__file__),'pem','app_private_key.pem')).read()
# 支付宝公钥
ALIPAY_PUBLIC_KEY_STRING = open(os.path.join(os.path.dirname(__file__),'pem','alipay_public_key.pem')).read()

# 应用id
APPID="2021000120697524",
# 加密方式
SIGN_TYPE = "RSA2",  # RSA or RSA2
# 是否是支付宝测试环境(沙箱环境),如果采用True是支付宝沙箱环境,默认配置False
DEBUG = True,  # False by default

VERBOSE = False,  # useful for debugging
# 支付网关 用三元表达式
GATEWAY = 'https://openapi.alipaydev.com/gateway.do' if DEBUG else 'https://openapi.alipayd.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


# alipay_url='https://openapi.alipaydev.com/gateway.do?'
# order_string = alipay.api_alipay_trade_page_pay    (
#     out_trade_no="20161112www4334",
#     total_amount=9999,
#     subject='电动小马达',
#     return_url="https://www.luffycity.com/free-course",
#     notify_url="https://www.luffycity.com/free-course"
# )
# print(alipay_url+'?'+order_string)
# 注意,拼接路径的时候要注意alipay_url后面是否带?号,没有要自己加上,否则地址会出错

复制代码

__init__.py

# 包对外提供的变量
from .pay import gateway, alipay

补充

复制代码
# 上线后必须换成公网地址
# 后台基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"
复制代码

 

 

posted @   _yessir  阅读(604)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示