首页 > 编程语言 >Python中使用支付宝支付

Python中使用支付宝支付

时间:2023-07-04 22:22:43浏览次数:30  
标签:alipay 支付宝 string Python app ----- key 支付

准备

# 支付宝文档
    https://opendocs.alipay.com/open/270/105898?pathHash=b3b2b667

# 在沙箱环境下实名认证
    https://openhome.alipay.com/platform/appDaily.htm?tab=info

# 完成RSA密钥生成
# 1 下载密钥工具
# 2 生成密钥
    https://opendocs.alipay.com/common/02kipk?pathHash=0d20b438

# 在沙箱应用中的开发信息中自定义密钥

# Python支付宝开源框架:https://github.com/fzlee/alipay
    pip install python-alipay-sdk --upgrade
# 如果抛ssl相关错误,代表缺失该包
    pip install pyopenssl

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

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

image

初始化

from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig

# 支付宝网页下载的证书不能直接被使用,需要加上头尾
# 你可以在此处找到例子: tests/certs/ali/ali_private_key.pem
app_private_key_string = open("私钥文件的路径").read()
alipay_public_key_string = open("公钥文件的路径").read()

alipay = AliPay(
    appid="",  # 支付宝页面上复制,沙箱环境
    app_notify_url=None,  # 默认回调 url
    app_private_key_string=app_private_key_string,
    # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    alipay_public_key_string=alipay_public_key_string,
    sign_type="RSA2",  # RSA 或者 RSA2
    debug=False,  # 默认 False
    verbose=False,  # 输出调试数据
    config=AliPayConfig(timeout=15)  # 可选,请求超时时间
)

# 如果你是 Python2 用户(考虑考虑升级到 Python3 吧),请确保非 ascii 的字符串为 utf8 编码:
# subject = u"测试订单".encode("utf8")
# 如果你是 Python3 的用户,使用默认的字符串即可
subject = "旺仔牛奶"

# 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
order_string = alipay.api_alipay_trade_page_pay(
    out_trade_no="20230704171400",
    total_amount=888,
    subject=subject,
    return_url="https://example.com",
    notify_url="https://example.com/notify" # 可选,不填则使用默认 notify url
)

print('https//openapi.alipay.com/gateway.do?' + order_string)

app_private_key_string = open("yourPrivateKey.key").read()
app_public_key_cert_string = open("yourPrivateCert.crt").read()
alipay_public_key_cert_string = open("alipayPublicCert.crt").read()
alipay_root_cert_string = open("alipayRootCert.crt").read()
dc_alipay = DCAliPay(
    appid="appid",
    app_notify_url="http://example.com/app_notify_url",
    app_private_key_string=app_private_key_string,
    app_public_key_cert_string=app_public_key_cert_string,
    alipay_public_key_cert_string=alipay_public_key_cert_string,
    alipay_root_cert_string=alipay_root_cert_string
)

# 如果您没有听说过 ISV, 那么以下部分不用看了
# app_auth_code 或 app_auth_token 二者需要填入一个
isv_alipay = ISVAliPay(
    appid="",
    app_notify_url=None,  # 默认回调 url
    app_private_key_srting="",
    # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    alipay_public_key_string="",
    sign_type="RSA",  # RSA or RSA2
    debug=False,  # False by default
    app_auth_code=None,
    app_auth_token=None
)

alipay二次封装

# 新建一个包
alipay_common
    pem                      # 公钥私钥文件夹
    alipay_public_key.pem    # 支付宝公钥文件
    app_private_key.pem      # 应用私钥文件
    __init__.py
    pay.py                   # 支付文件
    settings.py              # 应用配置

# alipay_public_key.pem
    -----BEGIN PUBLIC KEY-----
    支付宝公钥
    -----END PUBLIC KEY-----

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

# __init__.py
    from .pay import gateway, alipay

# settings.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 = '9021000122699958'

    # 加密方式
    SIGN = 'RSA2'

    # 是否是支付宝测试环境(沙箱环境),如果采用真是支付宝环境,配置False
    DEBUG = True

    # 支付网关
    GATEWAY = 'https://openapi-sandbox.dl.alipaydev.com/gateway.do?' if DEBUG else 'https://openapi.alipay.com/gateway.do?'

# pay.py
    from alipay import AliPay
    from alipay.utils import AliPayConfig
    from . import settings


    alipay = AliPay(
        appid=settings.APP_ID,   # 支付宝页面上复制,沙箱环境---》公司有人会给你
        app_notify_url=None,  # 默认回调 url
        app_private_key_string=settings.APP_PRIVATE_KEY_STRING,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=settings.ALIPAY_PUBLIC_KEY_STRING,
        sign_type=settings.SIGN,  # RSA 或者 RSA2
        debug=settings.DEBUG,  # 默认 False
        verbose=False,  # 输出调试数据
        config=AliPayConfig(timeout=15)  # 可选,请求超时时间
    )

    # 支付网关
    gateway = settings.GATEWAY

标签:alipay,支付宝,string,Python,app,-----,key,支付
From: https://www.cnblogs.com/XxMa/p/17527188.html

相关文章

  • 一文读懂:完整的支付系统整体架构!
    支付产品模块是按照支付场景来为业务方提供支付服务。这个模块一般位于支付网关之后,支付渠道之前。它根据支付能力将不同的支付渠道封装成统一的接口,通过支付网关来对外提供服务。所以,从微服务的角度,支付产品本身也是一个代理模式的微服务,它透过支付网关响应业务方请求,进行一......
  • Python基础37 基于tcp、udp套字编程、粘包现象、struct模块
    基于tcp协议的套接字编程(sochet编程)什么是socket?通常翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把tcp/ip层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中。套接字分类:AF_UNIX:用在局域网中AF_INET:用在互联网中客户端和服务端启动顺序......
  • python给多页excel工作表写跳转目录及回转链接
    1fromopenpyxlimportload_workbook2#fromopenpyxl.drawing.textimportParagraph,RegularTextRun3fromopenpyxl.worksheet.hyperlinkimportHyperlink4#fromopenpyxl.utilsimportget_column_letter56#打开现有的工作簿7workbook=load_workbo......
  • python之pip
    #####################   查看当前环境已经安装了哪些包:piplist   查看安装包详情  安装pip_search    使用pip_search           ########################......
  • python索引
    变量名[]正向数时是从零开始,反向是从-1开始切片变量[头下标:尾下标](不包括尾下标所代表的字符)变量名[:]:不指定头下标和尾下标时代表获取整个字符串变量名[1:]:不指定尾下标时代表从指定的头下标到末尾变量名[:5]:不指定头下标时代表从头开始到尾下标指定的字符但不包含尾下标所......
  • python网络编程 socket
    基于TCP协议的套接字编程(socket编程)什么是Socket呢?我们经常把Socket翻译为套接字,Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。套接字的分类:AF_UNIX:用在局域网中AF_INET:用在互联网中"""客户端和......
  • 为组态王编写的 时间段 选择 控件 python
    日历控件使用说明这是一个专门为组态软件(如组态王,力控等)设计的时间选择控件,用于选择一个时间段,来进行数据报表的查询.控件实际由2部分组成,1个UI程序,和1个modbusTCP从机服务器.从机服务器用于UI程序和组态软件的通信.  日期部分,时间间隔部分,支持滚轮改变日期......
  • luffy之支付
    支付宝支付介绍流程公钥私钥设置#alipay_public_key.pem-----BEGINPUBLICKEY-----支付宝公钥-----ENDPUBLICKEY-----#app_private_key.pem-----BEGINRSAPRIVATEKEY-----用户私钥-----ENDRSAPRIVATEKEY-----支付宝链接开发:https://openapi.alipay.com/g......
  • Python | yield关键字详解
    yield关键字的说明yield是Python中的一个关键字,它通常与生成器函数一起使用。yield就是保存当前程序执行状态。你用for循环的时候,每次取一个元素的时候就会计算一次。用yield的函数叫generator,和iterator一样,它的好处是不用一次计算所有元素,而是用一次算一次,可以节省......
  • python函数外变量传到函数内处理后不改变函数外的变量,copy模块使用
    线上代码a=[1,2,3]defabc(a):a.remove(1)abc(a)print(a)这段代码先指定了一个a变量是个list,又写了一个abc函数,功能是把外面传进来的list里面的1这个值去掉按理说在函数内的执行只应该属于函数内的变化,但是实际打印结果是[2,3],函数把外面变量的1删掉了这不是我想要......