目录
1 支付宝支付介绍
# 线上支付
-支付宝支付
-微信支付:网页版
-云闪付的支付
# 用户把钱打到第三方平台(支付宝,微信)商家账户中----》提现提出来---》手续费
# 必须是商户:企业,有营业执照才能申请支付宝,微信的支付接入
# 用的支付宝的沙箱环境:https://openhome.alipay.com/platform/appDaily.htm?tab=info
"""
原来支付宝没有提供python的sdk,第三方有人基于api接口封装了一个sdk
现在支付宝提供了python的sdk了
目前还是用第三方的sdk:https://github.com/fzlee/alipay
"""
# 对称加密和非堆成
# 使用支付宝支付:加密是非对称加密---》支付宝官方提供了工具(https://opendocs.alipay.com/common/02kipl)--》下载用
-公钥:配置在支付宝官方网站上----》生成支付宝公钥---》拿着用
-私钥:拿着用
2 python-alipay-sdk基本使用流程
# 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
# >: 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
"""
3 单页面使用
# 下载python-alipay-sdk
pip install python-alipay-sdk
# 代码使用
from alipay import AliPay
app_private_key_string = 生成的私钥
alipay_public_key_string = 生成的公钥
alipay = AliPay(
appid="2016092000554611",
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,不写默认是RSA2
debug=True, # 默认 False
)
# 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
res=alipay.api_alipay_trade_page_pay(
out_trade_no='1000101',
total_amount=float(999), # 只有生成支付宝链接时,不能用Decimal
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+res) # 即支付链接地址
4 沙箱的申请及公钥私钥配置
# 网址
https://auth.alipay.com/login/ant_sso_index.htm?redirectType=self&bizFrom=openhome&goto=https%3A%2F%2Fopen.alipay.com%2Fdev%2Fworkspace
4.1 沙箱注册
入驻
注册
进入沙箱
查看沙箱信息(包含appid,密钥)
4.2 下载支付宝开放平台开发助手
# 下载地址
https://opendocs.alipay.com/common/02khjm
--> 生成密钥-->获取工具-->windows-->下载即可
下载后打开,并依次点击下方箭头,然后复制公钥
4.3 沙箱中配置密钥
回到网页打开沙箱,点击自定义密钥
粘贴并保存
5 支付宝支付二次封装
5.1 github开源框架
https://github.com/fzlee/alipay
5.2 依赖文件
pip install python-alipay-sdk --upgrade
5.3 封装及使用
包结构
libs
├── iPay # aliapy二次封装包
│ ├── __init__.py # 包文件
│ ├── pem # 公钥私钥文件夹
│ │ ├── alipay_public_key.pem # 支付宝公钥文件
│ │ ├── app_private_key.pem # 应用私钥文件
│ ├── pay.py # 支付文件
└── └── settings.py # 应用配置
_init_.py
from .pay import alipay
from .settings import GATEWAY
alipay_public_key.pem
-----BEGIN PUBLIC KEY-----
拿应用公钥跟支付宝换来的支付宝公钥
-----END PUBLIC KEY-----
app_private_key.pem
-----BEGIN RSA PRIVATE KEY-----
通过支付宝公钥私钥签发软件签发的应用私钥
-----END RSA PRIVATE KEY-----
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
)
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 = '2016092000554611'
# 加密方式
SIGN = 'RSA2'
# 是否是支付宝测试环境(沙箱环境),如果采用真是支付宝环境,配置False
DEBUG = True
# 支付网关
GATEWAY = 'https://openapi.alipaydev.com/gateway.do?' if DEBUG else 'https://openapi.alipay.com/gateway.do?'
补充:在自己项目的配置文件中配置支付宝回调接口: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"
其他文件中使用
from导入alipay和GATEWAY
class TestView(APIView):
def get(self,request):
# 1 从前端先获取total_amount(价格),subject(商品名)
total_amount = request.data.get('total_amount')
subject = request.data.get('subject')
res = alipay.api_alipay_trade_page_pay(
# 2 生成唯一订单号
out_trade_no=uuid.uuid4(),
total_amount=float(total_amount), # 只有生成支付宝链接时,不能用Decimal
subject=subject,
# 3 上线后必须换成公网地址
return_url='http://127.0.0.1:8000',
notify_url='http://127.0.0.1:8000',
)
# 4 直接定向到支付接口
return redirect(hh)
原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/275476.html