支付宝支付
文章目录
- 支付宝介绍
- 接入条件
- 支付宝开发
- 支付流程
- 关于回调
- 支付测试
- 第三方库的sdk
- 接口加密的两种方式
- 第三方支付宝sdk
- 支付宝支付封装
支付宝介绍
-https://open.alipay.com/develop/manage 扫码登录
-网站支付:https://opendocs.alipay.com/open/270/105899
扫码登录自己的支付宝之后
这个是电脑网端的支付宝支付
网端的两种支付方式
第一种是自己在网端输入自己的用户名和密码、
第二种是自己用手机扫码支付
“”"
接入条件
-1 支付宝账号:个人和商户(需要用营业执照申请)
-2 网站:备案过ICP ICP证浙B2-20160559 ---》没有-国内:所有网站--》通过工信部审核--》上线运营-域名:购买,按年付费-云服务器:有公网ip--》所有人都能根据ip访问这个机器-阿里云买的服务器-->协助你备案--》两周
-3 营业执照,且支付宝账号名称需与营业执照主体一致
# 公司里:公司专门有财务-1 商户号-2 私钥-3 公钥-4 支付宝公钥
费率
0.6%
“”"
支付宝开发
https://opendocs.alipay.com/open/270/01didh?ref=api 开发流程介绍
“”"
支付流程
用户在我们网站前端---》点下单,立即购买---》向我们后端发起请求---》我们后端要请求支付宝--》支付宝返回给我们一个支付链接---》我们把链接返回给前端---》前端打开链接----》进入支付宝页面---》登录--》付款---》付款成功---》支付宝会两个回调:get post --->咱们后端接收到post回调后-->修改订单状态
关于回调
-用户付款成功,支付宝会有个回调-get:调用前端---》给用户看-post:调用后端--》修改订单状态的--》异步通知说明-对于 PC 网站支付的交易,在用户支付完成之后,支付宝会根据 API 中商家传入的 notify_url,通过 POST 请求的形式将支付结果作为参数通知到商家系统。-在进行异步通知交互时,如果支付宝收到的应答不是 success ,支付宝会认为通知失败,会通过一定的策略定期重新发起通知。通知的间隔频率为:4m、10m、10m、1h、2h、6h、15h。
我们现在申请不了商户—》开发测试只能用沙箱环境–》后期公司里申请了商户号后
-只需要修改:商户号,公钥,私钥即可
支付宝测试环境:
沙箱环境地址:测试环境—》数据都假的–》流程跟正常一样
-https://open.alipay.com/develop/sandbox/app?is_switch_sandbox=true
“”"
支付测试
支付宝提供了 API 也有SDK
官方的:https://opendocs.alipay.com/common/02n6z6 --》官方文档
# 创建一个文件
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.domain.AlipayTradePagePayModel import AlipayTradePagePayModel
from alipay.aop.api.request.AlipayTradePagePayRequest import AlipayTradePagePayRequestif __name__ == '__main__':"""设置配置,包括支付宝网关地址、app_id、应用私钥、支付宝公钥等,其他配置值可以查看AlipayClientConfig的定义。"""alipay_client_config = AlipayClientConfig()# alipay_client_config.server_url = 'https://openapi.alipay.com/gateway.do' # 真实环境 支付地址alipay_client_config.server_url = '' # 沙箱环境alipay_client_config.app_id = '' # 商户appid# 注意 应用私钥alipay_client_config.app_private_key = ''# 阿里公钥alipay_client_config.alipay_public_key = ''"""得到客户端对象。注意,一个alipay_client_config对象对应一个DefaultAlipayClient,定义DefaultAlipayClient对象后,alipay_client_config不得修改,如果想使用不同的配置,请定义不同的DefaultAlipayClient。logger参数用于打印日志,不传则不打印,建议传递。"""client = DefaultAlipayClient(alipay_client_config=alipay_client_config)"""页面接口示例:alipay.trade.page.pay"""# 对照接口文档,构造请求对象model = AlipayTradePagePayModel()model.out_trade_no = "000010200554"model.total_amount = 8888model.subject = "重启娃娃-保密发货" # 商品注释model.body = "重启娃娃" # 商品名字model.product_code = "FAST_INSTANT_TRADE_PAY"request = AlipayTradePagePayRequest(biz_model=model)# 两个回调地址:get回调 post 回调request.return_url = 'http://www.baidu.com' # get回调 支付完成之后跳转回的地址request.notify_url = 'http://www.baidu.com/post' # post 回调 我们看不到# 得到构造的请求,如果http_method是GET,则是一个带完成请求参数的url,如果http_method是POST,则是一段HTML表单片段response = client.page_execute(request, http_method="GET")print("alipay.trade.page.pay response:" + response)
第三方库的sdk
接口加密的两种方式
第一种 :系统默认密钥 只需要配置 # 注意 应用私钥alipay_client_config.app_private_key = ''# 阿里公钥alipay_client_config.alipay_public_key = ''第二种 :自定义的密钥"""如果使用的是自定义密钥的方式alipay_client_config.app_private_key 这里填写应用公钥alipay_client_config.alipay_public_key 这里填写支付宝公钥"""
支付宝软件:生成公钥私钥---》验证签名
下载安装地址:https://opendocs.alipay.com/common/02kipk?pathHash=0d20b438
-使用下载工具 生成应用公钥,应用私钥-在沙箱环境自定义的密钥中填入应用公钥---》自动生成一个支付宝公钥-如何有了三个 应用公钥,应用私钥(不要给别人),支付宝公钥-咱们自己生成的跟支付宝提供给咱们的没有区别,只能用一个
第三方支付宝sdk
from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig# 支付宝网页下载的证书不能直接被使用,需要加上头尾
# 你可以在此处找到例子: tests/certs/ali/ali_private_key.pem# 自己的私钥
app_private_key_string = open("./private_key.pem").read()
# 支付宝的公钥
alipay_public_key_string = open("./public_key_alipay").read()alipay = AliPay(appid="9021000134604",app_notify_url=None, # 默认回调 urlapp_private_key_string=app_private_key_string,# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,alipay_public_key_string=alipay_public_key_string,sign_type="RSA2", # RSA 或者 RSA2 生成密钥的加密方式debug=False, # 默认 Falseverbose=False, # 输出调试数据config=AliPayConfig(timeout=15) # 可选,请求超时时间
)# 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
import uuid
order_string = alipay.api_alipay_trade_page_pay(out_trade_no=uuid.uuid4(), # 订单号total_amount=8, # 价格subject='充气娃娃', # 标题return_url="https://www.baidu.com", # 支付完成回调地址notify_url="https://www.baidu.com/post" # 可选,不填则使用默认 notify url
)
#
print('https://openapi-sandbox.dl.alipaydev.com/gateway.do' + order_string)# 在同级目录创建两个文件存放 私钥和公钥private_key.pem 私钥文件
-----BEGIN RSA PRIVATE KEY-----
# 支付宝的私钥
-----END RSA PRIVATE KEY-----public_key_alipay 公钥文件
-----BEGIN PUBLIC KEY-----
# 支付宝的公钥
-----END PUBLIC KEY-----
支付宝支付封装
libs├── iPay # aliapy二次封装包│ ├── __init__.py # 包文件│ ├── pem # 公钥私钥文件夹│ │ ├── alipay_public_key.pem # 支付宝公钥文件│ │ ├── app_private_key.pem # 应用私钥文件│ ├── pay.py # 支付文件└── └── settings.py pay.py
from alipay import AliPay
from alipay.utils import AliPayConfig
from . import settingsalipay = AliPay(appid=settings.APP_ID,app_notify_url=None, # 默认回调 urlapp_private_key_string=settings.APP_PRIVATE_KEY_STRING,# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,alipay_public_key_string=settings.ALIPAY_PUBLIC_KEY_STRING,sign_type=settings.SIGN, # RSA 或者 RSA2debug=settings.DEBUG, # 默认 Falseverbose=False, # 输出调试数据config=AliPayConfig(timeout=15) # 可选,请求超时时间
)settings.pyimport os#### 替换应用私钥 支付宝公钥 和 应用ID即可# 应用私钥
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 = '9021000129694319'
# 加密方式
SIGN = 'RSA2'
# 是否是支付宝测试环境(沙箱环境),如果采用真是支付宝环境,配置False
DEBUG = True
# 支付网关
GATEWAY = 'https://openapi-sandbox.dl.alipaydev.com/gateway.do' if DEBUG else 'https://openapi.alipay.com/gateway.do'ini.py
from .pay import alipay
from .settings import GATEWAY
相关文章:

支付宝支付
文章目录 支付宝介绍接入条件支付宝开发支付流程关于回调 支付测试第三方库的sdk接口加密的两种方式第三方支付宝sdk支付宝支付封装 支付宝介绍 -https://open.alipay.com/develop/manage 扫码登录 -网站支付:https://opendocs.alipay.com/open/270/105899 扫码登录…...

qt中读写锁与互斥锁的区别
在Qt中,读写锁(QReadWriteLock)和互斥锁(QMutex)都是用于多线程编程时控制共享资源访问的工具,但它们在实现上有一些重要的区别。 QMutex(互斥锁): QMutex是最基本的锁…...

Why Not Http?
游戏服务器开发主要是基于socket,或者websocket,很少采用http(可能有部分非常轻量级的服务器选择http)。这是什么原因呢?我们先来看看socket与http之间的区别。 socket与http之间的区别 socket与http对比 sockethttpT…...

基于JAVA的停车场收费系统 开源项目
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…...

在PyTorch中,如何查看深度学习模型的每一层结构?
这里写目录标题 1. 使用print(model)2. 使用torchsummary库3.其余方法(可以参考) 在PyTorch中,如果想查看深度学习模型的每一层结构,可以使用print(model)或者model.summary()(如果你使用的是torchsummary库࿰…...

洛谷-P1478-陶陶摘苹果(升级版)(贪心)
陶陶摘苹果(升级版) 题目描述 又是一年秋季时,陶陶家的苹果树结了 n n n 个果子。陶陶又跑去摘苹果,这次他有一个 a a a 公分的椅子。当他手够不着时,他会站到椅子上再试试。 这次与 NOIp2005 普及组第一题不同的…...

【大数据面试题】007 谈一谈 Flink 背压
一步一个脚印,一天一道面试题(有些难点的面试题不一定每天都能发,但每天都会写) 什么是背压 Backpressure 在流式处理框架中,如果下游的处理速度,比上游的输入数据小,就会导致程序处理慢&…...

爬虫知识--01
爬虫介绍 # 爬虫的概念: 通过编程技术(python:request,selenium),获取互联网中的数据(app,小程序,网站),数据清洗(xpaht,lxml)后存到库中(mysql,redis,文件,excel&#x…...

【Azure 架构师学习笔记】- Azure Databricks (7) --Unity Catalog(UC) 基本概念和组件
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog 前言 在以前的Databricks中,主要由Workspace和集群、SQL Warehouse组成, 这两年Databricks公…...

react【六】 React-Router 路由
文章目录 1、Router1.1 路由1.2 认识React-Router1.3 Link和NavLink1.4 Navigate1.5 Not Found页面配置1.6 路由的嵌套1.7 手动路由的跳转1.7.1 在函数式组件中使用hook1.7.2 在类组件中封装高阶组件 1.8 动态路由传递参数1.9 路由的配置文件以及懒加载 1、Router 1.1 路由 1.…...

AUTOSAR CP--chapter7从CAN网络学习Autosar通信
从CAN网络学习Autosar通信 前言缩写词CAN通信在AUTOSAR架构中的传输上位机配置 第六章总结:学习了如何使用工具的自动配置功能,位我们生成系统描述中部分ecu的BSW模块配置,但是自动配置的功能虽然为我们提供了极大的便利,我们仍然…...

NX/UG二次开发—CAM—平面铣边界准确设置方法
大家在对平面铣设置边界时,经常遇到边界方向与自己期望的不一致,有些人喜欢用检查刀路是否过切来判断,但是对于倒角、负余量等一些情况,刀路本来就是过切的。对于多边界,可以根据选择的曲线来起点和面的方向来确定&…...

网络安全综合实验
1.实验拓扑 在这里注意因为第四个要求配置双击热备,我们可以第一时间配置,避免二次重复配置消耗时间 4、FW1和FW3组成主备模式的双机热备 具体配置位置在系统-->高可靠性-->双机热备-->配置 这里上行链路有两组,分别为电信和移动&…...

QT-地形3D
QT-地形3D 一、 演示效果二、关键程序三、下载链接 一、 演示效果 二、关键程序 #include "ShaderProgram.h"namespace t3d::core {void ShaderProgram::init() {initializeOpenGLFunctions();loadShaders(); }void ShaderProgram::addShader(const QString &fil…...

C++拷贝构造函数与赋值运算符重载
顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、拷贝构造函数 1.概念 在现实生活中,可能存在一个与你一样的自己,我们称其为双胞胎。 那在创…...

全球各国海外媒体发稿新闻营销推广,英美德意法俄日韩多语言
【本篇由言同数字科技有限公司原创】随着全球市场化程度的加深,品牌出海成为越来越多企业的战略选择。而全球各国媒体的发稿,为品牌出海提供了重要的支持与推动。 第一部分:品牌出海的意义 品牌出海是指企业将自己的品牌、产品和服务推向全…...

将phantomjs制成docker镜像
几个前的一篇文章中介绍了phantomjsecharts生成图表图片的一种方式,但其部署复杂,制作为docker镜像运行就方便多了。文章参见:https://blog.csdn.net/u011943534/article/details/121524397 1、准备echarts 将上次文章中提到过下载的Echart…...

【LeetCode+JavaGuide打卡】Day20|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
学习目标: 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先 学习内容: 530.二叉搜索树的最小绝对差 题目链接&&文章讲解 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值…...

【工具类】开源照片管理工具pthtoprism
1. pthtoprism 1. pthtoprism 1.1. 安装1.2. 管理照片方式 1.2.1. 直接管理原始照片目录1.2.2. 导入照片 1.3. 界面功能1.4. 参考资料 1.1. 安装 wget https://dl.photoprism.app/docker/docker-compose.yml # 修改 docker-compose.yml 文件,具体参考下面内容 d…...

[ linux网络 ] 网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录
实验准备工作: 网关服务器安装:dhcp bind (yum install -y dhcp bind bind-utlis) server1安装:httpd (yum install -y httpd) 没有网络就搭建本地yum仓库或者配置网卡使其能够上网。 ( 1)网关服务器…...

MySQL全量备份
一、实验素材 1.创建student和score表 (1) student表 create database school; use schoolCREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) );(…...

【Linux系统化学习】动静态库 | 软硬链接
目录 硬链接和软链接 硬链接 软链接 动态库和静态库 静态库 静态库的生成 静态库的使用 将库打包和使用 动态库 动态库的生成 动态库的使用 库搜索路径 硬链接和软链接 硬链接 上篇文章我们说到真正找到磁盘上的文件并不是文件名,而是inode。其实在…...

linux-firewalld防火墙端口转发
目的:通过统一地址实现对外同一地址暴露 1.系统配置文件开启 ipv4 端口转发 echo "net.ipv4.ip_forward 1" >> /etc/sysctl.confsysctl -p 2.查看防火墙配置端口转发之前的状态 firewall-cmd --statefirewall-cmd --list-all 3.开启 IP 伪装 firewall-cm…...

adobe软件提示This non-genuine Adobe app will be disabled soon【软件版本】
因为电脑上级路由器装了小飞机,导致本机电脑ps等adobe的系列软件出现了 This non-genuine Adobe app will be disabled soon,烦人的狠,之前有写过一篇通过更改host的教程,现在已经失效了,今天为大家分享一个用软件来屏…...

python coding with ChatGPT 打卡第20天| 二叉搜索树:搜索、验证、最小绝对差、众数
相关推荐 python coding with ChatGPT 打卡第12天| 二叉树:理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树:翻转…...

Stable Diffusion——基础模型、VAE、LORA、Embedding各个模型的介绍与使用方法
前言 Stable Diffusion(稳定扩散)是一种生成模型,基于扩散过程来生成高质量的图像。它通过一个渐进过程,从一个简单的噪声开始,逐步转变成目标图像,生成高保真度的图像。这个模型的基础版本是基于扩散过程…...

Python自动化部署与配置管理:Ansible与Docker
Ansible 和 Docker 是两种常用于自动化部署和配置管理的工具。Ansible 是一个基于 Python 的自动化运维工具,可以配置管理、应用部署、任务自动化等。而 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&…...

《摔跤吧爸爸》19岁女星突患皮肌炎离世
从确诊到离世仅10天……罕见病“皮肌炎”! 曾凭借在知名电影《摔跤吧!爸爸》中饰演童年时期“小芭比塔”一角而广受喜爱的年轻演员苏哈尼巴特纳格尔不幸离世,年仅19岁。她的突然逝世引发了全球关注,据苏哈妮的家人表示࿰…...

用结构体数组,完成宠物信息登记管理。
管理宠物的名字,品种,年龄。 实现功能如下: 1.插入宠物信息 2.遍历宠物信息 #include <stdio.h> #define N 100 typedef struct chongwu { char name[20]; char pingz[10]; int age; }cw; void intset_cw(cw *ptr,int *pnum) { printf("请…...

频率主义线性回归和贝叶斯线性回归
整体概述 频率主义(Frequentist)线性回归和贝叶斯(Bayesian)线性回归是统计学中用于数据分析和预测的两种主要方法,特别是在建模关于因变量和自变量之间线性关系的上下文中。尽管两种方法都用于线性回归分析ÿ…...