记一次支付宝支付的功能开发

news2024/7/4 5:59:35

背景:

公司需要增加一项支付宝PC端的收款功能

解决:

使用的支付宝官方文档中的电脑网站支付->统一收单下单并支付,当然,我们的支付宝账号需要开通该产品。官方API连接:https://opendocs.alipay.com/open/028r8t?pathHash=8e24911d&ref=api&scene=22。调用流程如下:
在这里插入图片描述

一、其中1.1对支付宝发起支付请求时,返回的是一个HTML文本,我们后端拿到文本后返回给前端,前端将表单进行提交,将会新生成一个支付宝二维码收银台。

二、其中6,是支付完成后要跳转的界面,会有个5S的跳转缓冲时间,期间支付宝会发起7:异步通知,我们同步通知和异步通知都要写,来确保支付通知不会丢失。

● 用户确认支付后,支付宝通过 get 请求 returnUrl(商户入参传入),返回同步返回参数。
● 交易成功后,支付宝通过 post 请求 notifyUrl(商户入参传入),返回异步通知参数。
● 接收到支付成功通知,必须进行验签,这个官方已经封装好了

Map<String, String> paramsMap = ... //将异步通知中收到的所有参数都存放到map中
    boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, ALIPAY_PUBLIC_KEY, CHARSET, SIGN_TYPE) //调用SDK验证签名
    if(signVerified){
        // TODO 验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure
    }else{
        // TODO 验签失败则记录异常日志,并在response中返回failure.
    }

三、同步或者异步通知验签成功后,还必须再次校验数据的正确性

  1. 商家需要验证该通知数据中的 out_trade_no 是否为商家系统中创建的订单号。
  2. 判断 total_amount 是否确实为该订单的实际金额(即商家订单创建时的金额)。
  3. 校验通知中的 seller_id(或者 seller_email) 是否为 out_trade_no 这笔单据的对应的操作方(有的时候,一个商家可能有多个 seller_id/seller_email)。
  4. 验证 app_id 是否为该商家本身。
    上述 1、2、3、4 有任何一个验证不通过,则表明本次通知是异常通知,务必忽略。
    只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。

四、异步通知返回应遵守返回要求

成功应该返回success,如果支付宝收到的应答不是 success,支付宝会认为通知失败,会通过一定的策略定期重新发起通知。通知的间隔频率为:4m、10m、10m、1h、2h、6h、15h。不遵守规范,如果用户支付多次,这样会造成“ABA”问题,导致订单在某段时间状态不正常。

五、需要注意并发问题

支付成功后的同步通知、异步通知、以及异步通知失败后的重试,可能会造成并发,导致订单数据不正常的问题。这里我是同步通知、异步通知的支付成功的处理逻辑中加了out_trade_no维度的分布式锁,并进行了订单的幂等性校验(判断这笔订单的支付状态是否为已支付)。

总结:整体难度不高,安全性(消息摘要防篡改、数字签名确定发送方)支付宝官方已经替我们考虑了,我们只需要按照文档规范就可以保证支付的安全。需要注意的就是1、验签成功后,还要按照文档进行支付通知的逻辑验证;2、同步、异步通知需要加锁,防止并发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小航助学信息学奥赛C++ GoC期末考试试卷(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 单选题4.0分 删除编辑 答案:B 第1题GoC的编译运行的快捷键是&#xff08;&#xff09; A、F5B、F11C、F8D、F12 答案解析&#xf…

超声波雷达介绍 ———— 分类介绍

文章目录 介绍安装位置UPAAPA 传感器种类等方性传感器超声波雷达异方性传感器超声波雷达 技术方案模拟式四线式数位二线式数位三线式主动数位 其他密闭式超声波传感器开放式超声波传感器 介绍 超声波的定义 —— 波长短于2cm的机械波称为“超声波”。 超声波属于机械波&#xf…

【prism】容器使用

获取容器对象 当我们使用了prism框架之后,我们就会拥有一个 对象创建/管理 工厂 —— 容器(IOC)。 回忆一下prism工程的构架过程: 我们当前的App 其实 已经继承了 Prism 给我们提供的APP,所以,我们当前的App对象其实就包含了一个容器对象,所以我们可以从任何地方拿到…

javaweb实验:Servlet应用开发

目录 前言实验目的实验内容实验原理或流程图实验过程一个简单的servletServlet表单结果展示 使用servlet处理表单请求servlet结果展示 在Servlet中获取应用程序配置参数servlet 使用Servlet处理用户登录请求Servlet登录表单登陆成功页面登录失败页面结果展示![在这里插入图片描…

调用百度API实现图像风格转换

目录 1、作者介绍2、基本概念2.1 人工智能云服务与百度智能云2.2 图像风格转换 3、调用百度API实现图像风格转换3.1 配置百度智能云平台3.2 环境配置3.3 完整代码实现3.4 效果展示3.5 问题与分析 1、作者介绍 张元帮&#xff0c;男&#xff0c;西安工程大学电子信息学院&#…

ODB 2.4.0 使用延迟指针 lazy_shared_ptr 时遇到的问题

最近在学习使用C下的ORM库——ODB&#xff0c;来抽象对数据库的CURD&#xff0c;由于C的ORM实在是太冷门了&#xff0c;ODB除了官方英语文档&#xff0c;几乎找不到其他好用的资料&#xff0c;所以在使用过程中也是遇到很多疑惑&#xff0c;也解决很多问题。近期遇到的一个源码…

欧拉角,四元数与旋转矩阵

目录 一、欧拉角二、四元数三、旋转矩阵四、Python下欧拉角、四元数和旋转矩阵的相互转换总结 一、欧拉角 对于在三维空间里的一个参考系&#xff0c;任何坐标系的取向&#xff0c;都可以用三个欧拉角(x,y,z)来表现。对于夹角的顺序和标记&#xff0c;夹角的两个轴的指定&…

Baklib分享:做好企业内部知识管理的方法?

企业内部知识管理是一个重要的任务&#xff0c;它涵盖了许多领域&#xff0c;包括知识生成、知识共享、知识保护等。在现代企业中&#xff0c;知识管理被认为是一项战略性的任务&#xff0c;可以为企业带来许多好处&#xff0c;例如提高员工生产力、减少错误和失误、加强员工的…

RabbitMQ 小白教程,从安装到使用

主要内容 AMQP简介 RabbitMQ简介 RabbitMQ原理 Erlang安装 安装RabbitMQ RabbitMQ账户管理 交换器 学习目标 知识点要求AMQP简介掌握RabbmitMQ简介掌握RabbitMQ原理掌握Erlang安装掌握安装RabbitMQ掌握RabbitMQ账户管理掌握交换器掌握 一、 AMQP简介 1 AMQP是什么?…

微信小程序 vue+nodejs高校食堂外卖点餐平台系统rf6md

前端vueelementui, (1) vue引入elementui 1.使用npm安装element-ui npm i element-ui -S 2.在main.js中导入使用vue import element-ui/lib/theme-chalk/index.css //别忘了导入样式 import ElementUI from element-ui Vue.use(ElementUI) 后端&#xff1a;java(springbootss…

蓝牙资讯|智能家居标准Matter 1.1 发布,智能家居产品兼容更丰富

据“CSA 连接标准联盟”官方微信号&#xff0c;Matter 1.1 版本已发布&#xff0c;“1.1 版本带来的更新使设备制造商和开发者上手更容易、产品获取认证更方便&#xff0c;也让产品能更快地交付给用户。该版本还为电池供电设备提供了更大支持&#xff0c;而这类设备涉及多种类型…

VIBRO-METER VM600 MPC4 机械保护卡

4个动态通道和2个转速通道每个动态通道2个处理输出&#xff0c;每个双通道1个处理输出(每个MP C4 2个)&#xff0c;每个转速器通道1个处理输出高度可配置的卡支持机械保护应用所需的所有测量&#xff0c;如相对和/或绝对振动高度集成的卡对(带IOC4T)包括传感器电源、缓冲输出、…

5.2 标准IO:文件的打开、关闭及代码实现

目录 标准IO 文件的打开 标准I/O-fopen-mode参数 ​编辑 标准I/O-fopen-示例 标准I/O-fopen-新建文件权限 标准I/O-处理错误信息 标准I/O-错误信息处理-示例1 标准I/O-错误信息处理-示例2 文件的关闭 标准IO 文件的打开 打开就是占用资源 下列函数可用于打开一个…

四个PCB工程师最头痛的Allegro问题及解答,你一定要看

Allegro是一款功能强大的PCB设计软件&#xff0c;广泛应用在电子设计行业&#xff0c;在使用Allegro过程中&#xff0c;工程师会遇见到多种复杂的技术问题&#xff0c;本文将针对工程师最头痛的Allegro问题进行回答&#xff0c;希望对小伙伴们有所帮助。 1、如何创建新的Allegr…

汽车电子电气架构里的VCU DCU ZCU ECU怎么区分?

文章目录 一、VCU二、DCU三、ECU四、ZCU五、车辆电子电气架构的域架构 一、VCU VCU&#xff08;Vehicle Control Unit&#xff0c;车辆控制单元&#xff09;&#xff1a;VCU是车辆级别的控制单元&#xff0c;负责管理和协调车辆的各个系统和子系统之间的通信和协同工作。它可以…

javaweb实验:JSP+JDBC综合实训__数据库记录的修改、删除

目录 前言实验目的实验内容编程实现后台的用户管理功能 实验原理或流程图实验原理流程图 实验过程AdduserquerAllUserdoAddUser结果展示 实验结论 前言 本实验的目的是让学生掌握使用JSP和JDBC技术对数据库中的记录进行修改和删除的方法。实验内容包括以下几个部分&#xff1a…

STM32单片机蓝牙APP手势语音温控电风扇落地扇人体感应

实践制作DIY- GC0134-蓝牙APP手势语音温控电风扇 一、功能说明&#xff1a; 基于STM32单片机设计-蓝牙APP手势语音温控电风扇 二、功能介绍&#xff1a; 硬件组成&#xff1a;STM32单片机语音识别模块PAJ7620U2手势识别传感器DS18B20温度传感器5V风扇LCD1602显示器红外接…

机器学习算法的基本概念、分类和评价标准,以及一些常用的机器学习算法的原理和特点

机器学习是一门研究如何让计算机从数据中学习和推理的科学。机器学习算法是实现机器学习的具体方法&#xff0c;它们可以根据不同的目标、数据类型和应用场景进行分类和比较。本文将介绍机器学习算法的基本概念、分类和评价标准&#xff0c;以及一些常用的机器学习算法的原理和…

MacBook杀毒软件CleanMyMac X2023

Mac 上也广泛存在恶意软件&#xff0c;并且能够突破系统自身的防护&#xff0c;通过渠道传播到电脑上&#xff0c;威胁大家的数据安全和窃取个人信息&#xff01;所以&#xff0c;MacBook杀毒软件还是很有必要安装的。 始于颜值&#xff0c;忠于实力。CleanMyMac X是我用过UI风…

复杂软件版本如何使用git工具进行管理

1.需求说明 一个项目&#xff0c;如果长期开发下去&#xff0c;我们会碰到各种各样的客户&#xff0c;然后就会有各种各样的需求。这时候就会出现一个问题&#xff1a;如果我们的代码都是一个项目&#xff0c;客户的主体流程都是一样&#xff0c;但部分客户又有一些特别的定制…