支付宝支付回调

2023-10-27

1.支付宝回调地址设置在上一篇博客已经记录

地址:https://blog.csdn.net/qq_38669394/article/details/106671410

2.支付宝回调方法,最主要两点,一个是如何接受参数,另一个是验签 ,这里需要将支付宝回调的参数转为map

  @RequestMapping(value = "/alyPayNotify")
    public String alyPayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, JDOMException {
    		log.info("支付宝支付成功回调");
            //这里拿到支付宝通知数据
    		 Map<String, Object> params = convertRequestParamsToMap(request); // 将异步通知中收到的待验证所有参数都存放到map中
    	        String paramsJson = JSON.toJSONString(params);
    	        log.info("支付宝回调,{}"+ paramsJson);
    	        Map<String, String> map = JSON.parseObject(paramsJson, new TypeReference<Map<String, String>>(){});
    	     return  aliPayService.aliPayNotify(map, response);
    
 }

	 // 将request中的参数转换成Map
    private static Map<String, Object> convertRequestParamsToMap(HttpServletRequest request) {
    	Map<String,Object> returnMap = new HashMap<String,Object>();
        Map<String,String[]> map = new HashMap<String,String[]>();
        map = request.getParameterMap();
        Iterator entries = map.entrySet().iterator();
        Map.Entry entry;
        String name ="";
        String value=null;
        while (entries.hasNext()){
            entry=(Map.Entry)entries.next();
            name = (String) entry.getKey();
            Object objvalue = entry.getValue();
            if(objvalue == null){
                value = null;
            }else if(objvalue instanceof String[]){
                /**条件如果成立,objvalue就是一个数组,需要将它转换成为字符串,并拼接上逗号,并吧末尾的逗号去掉*/
                String[] values = (String[]) objvalue;
                for(int i=0;i<values.length;i++){
                    value = values[i]+",";//这里我拼接的是英文的逗号。
                }
                value = value.substring(0,value.length()-1);//截掉最后一个逗号。
            }else{
                value = objvalue.toString();
            }
            log.info("key:"+name);
            log.info("value:"+value);
            returnMap.put(name , value);
        }
        Iterator it = returnMap.keySet().iterator();
        while (it.hasNext()){
            Object key = it.next();
            if(returnMap.get(key) == null || "".equals (((String)returnMap.get(key)).trim())){
                returnMap.put((String) key, null);
            }
        }
        return returnMap; 

    }

3,支付宝回调验签,这里需要选择输出流的形式返回success ,return 方式支付宝好像不接受,不知道是不是因为版本原因,代码我就不一一修改了。这里签名验证方式与网上的有些方法也略有区别,参数不同。具体可参考我的另一篇支付宝博客

地址:https://blog.csdn.net/qq_38669394/article/details/106336900

    @Override
    public String aliPayNotify(Map<String, String> map, HttpServletResponse response) {
        // 调用SDK验证签名
        try {
            String sign = (String) map.get("sign");
            String content = AlipaySignature.getSignCheckContentV1(map);
            boolean signVerified = AlipaySignature.rsaCheck(content, sign, Configs.getAlipayPublicKey(), AliPayProperties.CHARSET, AliPayProperties.SIGNTYPE);

            if (signVerified) {
                log.info("支付宝回调签名认证成功");
                // 按照支付结果异步通知中的描述,对支付结果中的业务内容进行1\2\3\4二次校验,校验成功后在response中返回success,校验失败返回failure
                //检查金额是否一致
                //this.check(params);
                // 支付宝建议 另起线程处理业务
                Executors.newFixedThreadPool(20).execute(new Runnable() {
                    @Override
                    public void run() {
                        log.info("ZFB回调参数" + map);
                        String trade_status = map.get("trade_status");
                        log.info("trade_status:" + trade_status);
                        // 支付成功
                        if (trade_status.equals("TRADE_SUCCESS")) {
                            // 处理支付成功逻辑
                            try {
                                // 处理业务逻辑。。。
                                String out_trade_no = map.get("out_trade_no");
                                String trade_no = map.get("trade_no");
                                String total_amount = map.get("total_amount");
                           
                            } catch (Exception e) {
                                log.error("支付宝回调业务处理报错,params:" + e);
                            }
                        } else {
                            log.error("没有处理支付宝回调业务,支付宝交易状态:{},params:{}", trade_status);
                        }
                    }
                });
                BufferedOutputStream out = null;
                try {
                    out = new BufferedOutputStream(response.getOutputStream());
                    out.write("success".getBytes());
                    out.flush();
                    out.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return "success";

            } else {
                log.info("支付宝回调签名认证失败,signVerified=false, paramsJson:{}");
                return "failure";
            }

        } catch (AlipayApiException e) {

            log.error("支付宝回调签名认证失败,paramsJson:{},errorMsg:{}", e.getMessage());
            return "failure";
        }
    }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

支付宝支付回调 的相关文章

  • Java 使用服务器证书对 jar 进行签名

    是否可以使用服务器证书来签署 java web start 应用程序 我想知道的是它是否有效 我的服务器有一个受信任的证书 并且我想重复使用同一证书来签署应用程序 现在 我有这样的警告 此 jar 包含其签名者证书的 ExtendedKey
  • java本地时间格式不带年份

    我喜欢将本地时间格式格式化为不带年份的字符串 目前我可以显示包含年份的本地格式 java text DateFormat df java text DateFormat getDateInstance java text DateForma
  • 使用 Intellij 2017.2 /out 目录构建会重复 /build 目录中的文件

    更新到 Intellij 2017 2 后 构建我的项目会创建一个 out包含生成的源文件和资源文件的目录 这些文件与已包含的文件重复 build并导致duplicate class生成的类的编译器错误 关于 Gradle 或 Intell
  • 使用Java获取CSS文件中图像的URL?

    我正在尝试使用 Java 获取远程 CSS 文件中图像 所有 MIME 类型 的 URL 我正在使用 jsoup 来获取 css 的 URL 经过无数个小时的观看CSS解析器 http cssparser sourceforge net 由
  • 运行单个 Java 线程的双核 CPU 利用率[重复]

    这个问题在这里已经有答案了 可能的重复 多线程 Java 应用程序能否很好地利用多核机器 https stackoverflow com questions 1649402 would a multithreaded java applic
  • 使用 google-api-java-client 的 2 足 OAuth

    有谁知道如何将 2 legged OAuth 与 google api java client 一起使用 我正在尝试访问 Google Apps 配置 API 以获取特定域的用户列表 以下不起作用 HttpTransport transpo
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • 如何避免 Java 中的忙旋转

    我有一个多线程应用程序 其中一个线程向另一个线程发送消息 等待线程轮询消息并做出反应 处理锁 像这样 等待线程代码 while true if helloArrived System out println Got hello if bye
  • 使用 Hibernate 和 Apache DBCP 的 MySQL 连接池问题

    看来我的应用程序有问题 当应用程序在启动后闲置很长时间 我不确定确切的时间 时 我会在日志中收到以下错误消息 我使用 Spring Hibernate MySQL 和 ApacheDBCP 进行连接池 ERROR org hibernate
  • 到底什么是哈希冲突

    HashMap 中的哈希冲突或哈希冲突并不是一个新主题 我遇到过几个博客和讨论板 以模糊且详细的方式解释如何产生哈希冲突或如何避免它 我最近在一次采访中遇到了这个问题 我有很多事情要解释 但我认为很难准确地给出正确的解释 抱歉 如果我的问题
  • 竞争性编码 - 以最低成本清除所有级别:未通过所有测试用例

    当我遇到这个问题时 我正在一个竞争性编码网站上解决问题 问题指出 游戏中有 N 个关卡和 M 种可用武器 等级编号从 0 到 N 1 武器编号从 0 到 M 1 您可以按任意顺序清除这些级别 在每个关卡中 需要这些 M 武器的某些子集才能通
  • FXML 文件中的 getHostServices().showDocument()

    有没有简单的方法可以将 getHostServices showDocument 命令放入 toHomepage 方法中 而不是执行一行又一行的代码 这样代码应该看起来干净简单 package sample import javafx ap
  • Android 反向地理编码不适用于华为设备

    我正在尝试通过这段代码反转地理编码纬度 经度 Geocoder geocoder new Geocoder context Locale ENGLISH try List
  • 将 XML 从网站解析到 Android 设备

    我正在启动一个 Android 应用程序 它将解析来自网络的 XML 我创建了一些 Android 应用程序 但它们从未涉及解析 XML 我想知道是否有人对最佳方法有任何建议 这是一个例子 try URL url new URL your
  • Visual Studio Code - Java 类路径不完整。只会报告语法错误

    在使用 python 获得了丰富的经验之后 我正在使用 java 迈出第一步 我正在运行的脚本是一个简单的 Java Swing Gui 它可以从命令行和 VS Code 中正常编译和运行 为了设置 java 调试环境 我使用 github
  • Java“非法访问操作”方法将被弃用? [复制]

    这个问题在这里已经有答案了 JDK 9 JVM 发出非法访问操作警告后 如果您使用一些非法访问 例如setAccessible 我的问题 Is setAccessible 以后会被封吗 此功能的官方参考 如果将被弃用 在哪里 我在任何地方都
  • Spring Boot中服务接口类的用途

    我的问题是关于接口类的使用 我对 Spring 还很陌生 所以如果这过于简单 请耐心等待 首先 当您可以在 BoxService 中声明 find all 时 这里拥有 IBoxService 接口有什么意义 其次 在控制器中如何使用IBo
  • Java 中 .NET 的 Lambda 表达式

    我最近 再次 从 C 迁移到 Java 但我非常怀念 lambda 表达式和 C 的 IEnumerable Foreach 之类的东西 所以我正在寻找Java中的lambda表达式库 有比这更好的图书馆吗LambdaJ http code
  • Java 应用程序启动,ProcessBuilder 一段时间后被阻止

    我正在开发一个 Java 桌面应用程序 我们称之为控制台 包含 3 个按钮 其中两个启动 Win32 应用程序 第三个应该启动一个可执行的 jar ProcessBuilder pb new ProcessBuilder java jar
  • 删除Java中重载的方法

    有2个重载方法 这些方法中的每一个都将一种类型的列表转换为不同类型的列表 但第一种方法使用比较器 class SomeClass public static

随机推荐

  • RTThread中HardFault_Handler分析

    以Cortex M3为例 RTThread在运行过程如果产生fault 会进人HardFault Handler中断 RTThread对HardFault Handler进行了重定义 HardFault Handler函数在context
  • vue2+three.js实现宇宙(进阶版)

    2023 9 12今天我学习了vue2 three js实现一个好看的动态效果 首先是安装 npm install three 相关代码如下
  • SSL是什么?SSL怎么用?

    SSL是什么 SSL Secure Sockets Layer 安全套接层 及其继任者传输层安全 Transport Layer Security TLS 是为网络通信提供安全及数据完整性的一种安全协议 如今被广泛使用 如网页 电子邮件 互
  • STM32F103基于HAL工程TIM4多通道PWM固定占空比输出

    STM32F103基于HAL工程TIM4多通道PWM固定占空比输出 在测试过程中发现配置的2路PWM总是只有一个固定的通道有输出 于是复用到其他引脚 输出波形有 确定是芯片引脚的问题 后面换了一块板测试 确定是芯片引脚确实有问题 刚开始一直
  • 史上最全Elasticsearch学习

    文章目录 Elasticsearch 一 Elasticsearch简介 安装 1 1 Elasticsearch是什么 1 2 全文搜索引擎 1 3 Elasticsearch的应用案例 1 4 Elasticsearch的下载 安装 运
  • python异常处理

    Python3 错误和异常 作为 Python 初学者 在刚学习 Python 编程时 经常会看到一些报错信息 在前面我们没有提及 这章节我们会专门介绍 Python 有两种错误很容易辨认 语法错误和异常 Python assert 断言
  • 【计算机科学与技术】信息论笔记(6):微分熵

    200803本篇是学习信息论的入门笔记 希望能与各位分享进步 这是第六章 微分熵 文章目录 6 微分熵 6 1 定义 6 2 连续随机变量的AEP 6 3 微分熵与离散的关系 6 4 联合微分熵与条件微分熵 6 5 相对熵与互信息 6 6
  • ubuntu 12.04安装jdk

    分类 LINUX 在安装之前 系统没有任何jdk软件 也就是说在终端执行 java version 将会输出如下内容 root haiyang Aspire java version 程序 java 已包含在下列软件包中 default j
  • 解决linux下图形界面卡死不能操作的问题

    由于linux系统bug很多 所以有时候用着用这就会发生图形界面卡死不能操作的情况 具体解决方法如下 1 按住ctrl alt f2 然后进入了一个黑色的shell界面 注 linux下共有六个虚拟控台 f2 f6 分别对应这不同的权限 2
  • 小程序仿微信支付键盘实现

    先上图 2 实现过程 键盘放在了vant weapp组件的弹窗框popup中 并且默认进入页面自动弹出键盘 index wxml
  • java -- Math、BigInteger、BigDecimal类和基本类型的包装类、正则表达式

    Math java lang Math 类包含用于执行基本数学运算的方法 如初等指数 对数 平方根和三角函数 类似这样的工具类 其所有方法均为静态方法 并且不会创建对象 调用起来非常简单 Math PI 静态常量 public static
  • AD器件飞出可视区域如何推拽回来

    步骤1 选择器件 步骤2 摆放器件 先说摆放器件 如下图 三个器件 加入我们需要摆放右侧的两个器件到指定区域 先选择要摆放的器件 操作如下 绘制需要摆放的区域 器件已经被移动过来了 完成 上述方法可以对大量器件进行整体移动 利用上述方法可以
  • 基于改进YOLO的玉米病害识别系统(部署教程&源码)

    1 研究背景与意义 近年来 农业科技的快速发展为农作物的种植和管理带来了许多便利 然而 农作物病害的防治仍然是一个全球性的挑战 玉米作为世界上最重要的粮食作物之一 受到了许多病害的威胁 如玉米灰斑病 玉米穗腐病等 这些病害不仅会导致玉米产量
  • IM群聊消息如此复杂,如何保证不丢不重?

    1 前言 群聊已经成为主流IM软件的基本功能 不管是QQ群 还是微信群 一个群友在群内发了一条消息 那么对于IM服务器来说需要保证 在线的群友能第一时间收到消息 离线的群友能在登陆后收到消息 由于 消息风暴扩散系数 的存在 概念详见 IM单
  • sas数字转日期格式_一个关于sas日期时间读入格式的问题

    方法一 直接使用SAS的PROC IMPORT 可以直接识别DATETIME格式 SAS版本9 2 PROC IMPORT OUT WORK T5 DATAFILE C temp csv DBMS CSV REPLACE GETNAMES
  • clickhouse优化最佳实践

    clickhouse在易企秀数据仓库项目中已投入使用两年 主要为内部用户提供快速查询和多维分析的能力 希望你在业务当中遇到的性能问题 在这里都能得到解决 Clickhouse堪称OLAP领域的黑马 最近发布的几个版本在多表关联分析上也有了极
  • 有什么事在Linux上顺理成章,在Windows就令人费解?

    Linux与Windows都是十分常见的电脑操作系统 相信大家对它们二者都有所了解 在我们的使用过程中 是否有遇到这种情况 在Linux上顺理成章 换到Windows上就令人费解 文章目录 一 介绍 2 1 Linux系统 1 2 Wind
  • c# 已知文件路径,遍历文件夹下的.lnk文件(其他类型的文件也可同样的方法操作)

    遍历文件夹下的 lnk文件 public static string ForeachFiles lnk string FilePath string files Directory GetFiles FilePath lnk SearchO
  • vue webpack3 升级webpack4

    vue webpack3 升级webpack4 据说webpack3 比webpack4 编译速度将近快了60 80 成功升级之后 于是来记录下 项目主要是vue 2 5 9 webpack 4 10 2 webpack dev sever
  • 支付宝支付回调

    1 支付宝回调地址设置在上一篇博客已经记录 地址 https blog csdn net qq 38669394 article details 106671410 2 支付宝回调方法 最主要两点 一个是如何接受参数 另一个是验签 这里需要