支付宝支付
支付宝支付
使用支付宝的沙箱环境
'''
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)