支付宝支付
1 支付宝支付介绍
# 项目中需要有在线支付功能
-支付宝支付
-微信支付:备案过域名
-云闪付
# 咱们项目以支付宝支付为例
-支付流程
-API,sdk
-sdk:第三方sdk,基于API封装的
-官方sdk:https://opendocs.alipay.com/open/02no41
# 支付宝支付介绍
-申请条件很严苛
-沙箱环境:Sandbox:程序的虚拟执行环境,不需要申请各种认证,直接写程序,后期只需要换成只是的秘钥即可
1.1 使用支付宝支付
# 使用沙箱环境
# 第三方的sdk:https://github.com/fzlee/alipay
-基于支付宝的API接口封装的,开源软件,
-pip3 install python-alipay-sdk
# 官方sdk
# 生成公钥私钥:支付宝提供咱们一个生成的工具
-https://opendocs.alipay.com/open/02np9g
-生成公钥私钥,在本地(私钥好好保管)
-非对称加密:
-公钥,私钥
-加密使用公钥,解密使用私钥
-对称加密:加密和解密使用同一个秘钥 :AES,DES
-我能保证秘钥不丢失
-解密也要同样的秘钥,解密的人万一把秘钥丢失了
# 把公钥填在支付宝网站上(沙箱环境,正式环境)
-把咱么的公钥填进网站,会生成一个支付宝公钥,以后项目中咱们使用支付宝公钥来做
2 支付宝支付二次封装
alipay_common # 包名
pem # 放公钥私钥
alipay_public_key.pem
app_private_key.pem
__init__.py
pay.py # 核心文件
settings.py #配置文件
# 保证公钥私钥的安全:
1 环境变量
2 专门写一个公钥私钥管理的服务(项目),发送请求去获取,接口中带很多认证
#init from .pay import alipay from .settings import GATEWAY
#pay.py from alipay import AliPay from alipay.utils import AliPayConfig from . import settings # 初始化得到对象,传入一堆参数 alipay = AliPay( appid=settings.APPID, # 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) # 可选,请求超时时间 )
#settings.py import os APPID = '2016092000554611' # 应用私钥 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() # 加密方式 SIGN = 'RSA2' # 是否是支付宝测试环境(沙箱环境),如果采用真是支付宝环境,配置False DEBUG = True # 支付网关 GATEWAY = 'https://openapi.alipaydev.com/gateway.do?' if DEBUG else 'https://openapi.alipay.com/gateway.do?'
然后在pem下创建alipay_public_key.pem和app_private_key.pem把支付宝公钥和你的私钥放在里面具体格式如下
alipay_public_key.pem
-----BEGIN PUBLIC KEY-----
拿应用公钥跟支付宝换来的支付宝公钥
-----END PUBLIC KEY-----
app_private_key.pem
-----BEGIN RSA PRIVATE KEY-----
通过支付宝公钥私钥签发软件签发的应用私钥
-----END RSA PRIVATE KEY-----
之后在后端调用就好了