支付宝支付

支付宝支付

使用支付宝的沙箱环境

'''
	https://openhome.alipay.com/platform/appDaily.htm?tab=info
'''

SDK

由于原来支付宝没有提供python的SDK,但是第三方有人基于api接口封装了一个SDK

现在支付宝提供了python的SDK

目前还是用第三方的sdk:https://github.com/fzlee/alipay

'''
  pip install python-alipay-sdk --upgrade
'''

接口加签---自定义密钥---->公钥模式

根据步骤点击,然后我们去下载支付宝密钥生成器,下载后安装即可。

生成密钥

然后我们复制公钥

简单使用

在项目中创建任意一个文件夹,存放刚刚生成的公钥和密钥

在支付宝上下载的公钥是一个字符串,你需要在文本的首尾添加标记位:

-----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY-----

才能正常使用
'''

    -----BEGIN PUBLIC KEY-----
    支付宝公钥(放在这)ps:不是应用公钥
    -----END PUBLIC KEY-----
    
    -----BEGIN RSA PRIVATE KEY-----
    应用私钥
    -----END RSA PRIVATE KEY-----

必须严格格式
'''

'''
	在需要修改的后面加了 ******
'''
from alipay import AliPay

app_private_key_string = open("./pri").read() //对应的私钥地址        ******
alipay_public_key_string = open("./pub").read() //对应的公钥地址        ******
alipay = AliPay(
    appid="2021000121628487", // 在沙河应用中可以找到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=True,  # 默认 False
)
# 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
order_string=alipay.api_alipay_trade_page_pay(
    out_trade_no='2088621987702062',//订单编号(不能重复)     ******
    total_amount=float(999),  # 只有生成支付宝链接时,不能用Decimal,商品的总价要使用float转换
    subject='充气球', //商品描述        ******
    return_url='http://127.0.0.1:8000',
    notify_url='http://127.0.0.1:8000',
)

gataway = 'https://openapi.alipaydev.com/gateway.do?'//支付宝网关地址(一定要加 ?)
print(gataway+order_string) //生成的支付跳转链接,访问即可付款

二次封装

包结构

ipay
|__ __init__.py
|__ key(存放公钥和私钥)(文件夹)
	|___ 支付宝公钥(文件)
	|___ 应用私钥(文件)
|__ pay.py #生成支付对象
|__ settings.py #配置文件

** init.py**

from .pay import alipay
from .settings import GATEWAY

settings.py

import os

# 应用私钥
APP_PRIVATE_KEY_STRING = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'key', '公钥文件名')).read()

# 支付宝公钥
ALIPAY_PUBLIC_KEY_STRING = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'key', '私钥文件名')).read()

# 应用ID APPID 在沙河应用中可以找到APPID
APP_ID = '2016092000554611'

# 加密方式
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,  # 默认回调 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
)

封装成函数

导入ipay包中的alipay对象和支付宝网关地址
from  ipay import alipay,GATEWAY
'''
	out_trade_no: 商户PID
	total_amount:总价
	subject:描述
'''
def get_pay_url(out_trade_no,total_amount,subject):
    order_string =alipay.api_alipay_trade_page_pay(
        out_trade_no=out_trade_no, # 订单号(不能重复)
        total_amount=float(total_amount),  # 只有生成支付宝链接时,不能用Decimal
        subject=subject,
        return_url=settings.RETURN_URL, # post 回调地址
        notify_url=settings.NOTIFY_URL, # get 回调地址
    )
    pay_url = GATEWAY + order_string
    return pay_url


'''
	可以将函数封装到包中,使用时只需要导出该方法即可,返回一个支付链接
'''

再次调整包结构

ipay
|__ __init__.py
|__ key(存放公钥和私钥)(文件夹)
	|___ 支付宝公钥(文件)
	|___ 应用私钥(文件)
|__ pay.py #生成支付对象
	|__ get_pay_url() # 获取支付地址函数
|__ settings.py #配置文件

'''

	如有报错,自行修改导入的模块路径

'''

使用

'''

	使用时只需要先修改配置文件,然后导入get_pay_url函数即可

'''

from ipay import get_pay_url

url = get_pay_url('20882','4000000','RS8') # url为生成的支付地址
print(url)
posted @ 2022-07-19 21:13  春游去动物园  阅读(75)  评论(0编辑  收藏  举报