热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

支付结果回调_【微信支付】微信支付成功之后没有请求回调接口

谢尔顿的左耳朵​www.zhangxiaoshuai.fun最近做的一个项目中涉及到了微信支付的模块,因为之前从来没有接触过支付这方面的内容,所以花了一
425fd8cc22d200724c6c0a903aa3152a.png
谢尔顿的左耳朵​www.zhangxiaoshuai.fun

最近做的一个项目中涉及到了微信支付的模块,因为之前从来没有接触过支付这方面的内容,所以花了一些时间去专门研究,最后总算是搞定了支付;但是能支付可不行,我需要将用户支付过的订单的支付状态进行修改,并在下一次用户进行浏览的时候进行判断:用户是否已经对该资源进行了支付,如果已经进行了支付,那么直接放行;如果没有进行支付,就需要拉起收银台进行支付。

虽然这篇文章的标题主要是回调接口的内容,但是我还是想要把支付这一些问题进行一个小小的回顾总结。

最开始遇到的问题是:用户点击资源的时候系统进行预下单,然后在调用支付接口获取一系列参数,但是可能存在用户刚点进资源中,系统已经完成了预下单,但是用户又不想看了,又退了出去,过了一会,用户又回来了,这时,系统会再次下单,但是最开始的时候我没有考虑这种情况,所以在用户第二次进行下单的时候,就会出现下单失败的情况,最终的解决方案是:在用户请求下单之前,先查询是否存在之前下好的订单,如果存在,则只需修改预下单的时间即可,然后返回给前端订单信息;

完成重复下订单的问题之后,又出现了新的问题:当收银台被拉起的时候,用户又不想支付了,所以用户选择了关掉收银台,但是用户并没有退出资源界面,过了一会,用户重新点击支付,后台报错:订单已支付,请不要重复操作。what?我还没有支付呢……到底是哪里出现了问题呢?通过DEBUG,我将问题定位到自定义的“订单编号”上面,因为我这里使用的编号是该视频的序列编号,这个编号是固定的,当这个视频没有被购买过,第一次购买的人是可以成功支付的,这个时候自定义序列编号就会成为该订单的订单号,并且存在与微信后台中,这样在第二个人购买的时候,当我们将一系列的参数封装起来传到微信服务器上的时候,就会出现“该订单已存在”的现象。微信服务器返回给我的数据标识中:return_code:SUCCESS,而result_code:FAIL,在一个成功一个失败的情况下肯定是无法拉取起银台进行支付的,最终解决方案:使用当前年月日和一些标识生成每一个独一无二的订单编号,这样就解决了这个问题;

解决了无法支付的问题之后,随之而来的就是支付成功之后,微信似乎并没有调取回调接口进行逻辑业务。这样就造成了用户在支付成功之后,系统并没有将用户支付成功的结果进行存储,然后用户下次进行观看的时候就会造成继续收费的情况;

通过百度中各路大神的建议,我前后分别作出了如下尝试:

1.关闭和打开Linux防火墙;
2.分别尝试http和https;
3.尝试使用公网访问该回调接口,访问没有问题;

最后,我将目光集中在了tomcat日志上

查看catalina.out

9be3ea1f83986087a4b50c8db61fe753.png

显然,在请求支付的时候,后台是将notify_url传递过去了

5619e6533474bc4cd3e5973c2fa2ed67.png

这是支付成功之后的调用,显然是调用了回调接口,这说明回调地址应该是没有问题的。

但是为什么明明业务中写了对数据库的操作,既然调用了回调接口,却对数据库没有进行更新呢?

我又去到了error.log中查看

093d81cc64e588b2b3ab7b7cdae2c6bf.png

这就是我回调接口中的日志打印啊,这下我确信应该是业务逻辑中出现了问题,导致没有执行(日志打印在业务逻辑之前)

果然,在通过一个订单编号查询订单的方法参数上竟然还写的是之前的自定义订单号,这样每次根本没有订单被查询到,也就谈不上对支付状态更新和对支付成功订单进行存储的功能了……

我赶紧修改了查询参数、service层和持久层,总算是完成了基本的闭环支付。

eda9d87ee7292acb07c92cb395472e9e.gif



推荐阅读
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
author-avatar
白日做梦家_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有