作者

黄昭

推荐理由

对实际项目遇到问题的总结,以及解决方法,而且如何未来对接微信可能会有借鉴意义

某系统有个水电充值的功能,通过充值页面充值了一笔金额,系统后台根据订单等一些关键信息校验微信服务器的充值记录,如果存在充值成功的,系统则向第三方的能耗系统添加一笔充值记录。

如上图所示,给能耗系统传递订单号和充值金额两个参数,返回result_history的结果,并记录到日志里。园区系统根据result_history的中的状态参数,如果成功则修改园区系统中此订单的支付状态为支付成功

但是比较早的时候发现。水电充值时,微信收款账号已经收到充值的金额,但是园区系统改订单收款状态是未支付。

查看日志,发现是能耗系统的充值记录insert失败了,导致园区系统更改状态不成功。还有种比较诡异的情况,调用能耗系统时,只有异常,上图的logger.info没有记录任何日志信息,能耗系统中也没有任何相关充值记录,猜测是网络阻塞延迟等问题,导致能耗系统记录失败,导致没有任何返回值。

于是在园区系统中增加了一个定时任务,每10分钟检验一次,取出订单状态未支付的订单,去微信的相关接口查询是否存在已支付的相关订单,如果该订单已在微信上充值成功,则再次调用能耗系统,如返回状态为成功则修改园区系统该订单的状态。

如此运行了大半年几乎未曾出现微信上已支付但系统订单显示未支付的情况。

可是最近出现一个奇怪的问题,能耗系统已经有相关订单的充值记录,微信上也收到充值的金额了,但是园区系统的订单状态是未修改,查看日志,发现从充值那个时候开始,每隔10分钟日志提示水电充值调用能耗接口结果失败的提示,得出结论,只要能耗系统中已经有同一订单的记录,上面10分钟一次的定时任务,无法给能耗系统成功插入订单数据,返回结果是失败的,则园区系统根据这个失败结果,无法更新订单状态为已支付。 猜测可能是网络原因导致能耗系统在第一次调用的时候,已经成功插入数据,但是园区系统没有接收到返回数据。导致第一次修改支付状态失败。后面的定时任务也就没有任何意义了。暂定解决方案,需要能耗系统的厂家提供查询订单是否存在的接口。如果存在则可以修改订单状态为已支付

微信支付调用第三方系统无返回值的问题相关推荐

  1. 微信支付调用接口退款,返回SSL certificate not found: 是什么问题?

    微信支付调用接口退款,返回SSL certificate not found: 是什么问题? 处理方法 :将路径换成服务器的路径就可以了:

  2. c#如何调用有参无返回值存储过程和有参有返回值存储过程,以及IDataParameter[]如何赋值(包含decimal值的转换)

     第一步先创建数据库链接方法 1.定义访问数据库的方法/// <summary>/// 执行存储过程/// </summary>/// <param name=" ...

  3. java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)

    oracle中procedure是不能有返回值的,要想返回值,就得有输出参数,同样要想返回记录集,可以把游标类型作为输出参数. 下面是详细情况说明: 一:无返回值的存储过程调用 存储过程: creat ...

  4. oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...

    java程序调用Oracle 存储过程 获取返回值(无返回,非结 果集,结果集) oracle中procedure是不能有返回值的,要想返回值,就得有 输出参数,同样要想返回记录集,可以把游标类型作为 ...

  5. oracle存储过程没有返回值,Java调用Oracle存储过程(无返回值)

    无返回值: 1:创建存储过程 此存储过程向表中插入一条数据 create or replace procedure demo_procedure(id varchar2,name varchar2,a ...

  6. 第八天学习Java的笔记(方法有参无参,有返回值和无返回值)

    48天 方法 对比有参数和无参数 package Demo03;/* * 有参数:小括号当中有内容,当一个方法需要一些数据条件才能完成任务的时候,就是有参数 * 例如两个数字相加,必须知道两个数字各是 ...

  7. Lambda表达式的无参数无返回值的练习

    package com.learn.demo04.Lambda; /*需求:给定一个厨子Cook接口,内含唯一的抽象方法makeFood,且无参数.无返回值.使用Lambda的标准格式调用invoke ...

  8. springboot 的异步任务 :无返回值 和有返回值

    在想要异步执行的方法上加上@Async注解,在controller上加上@EnableAsync,即可. 注:这里的异步方法,只能在本类之外调用,在本类调用是无效的. 无返回值的异步任务 servic ...

  9. 函数:无参无返回值函数的使用

    1.定义格式 函数构成代码执行的逻辑结构,在go语言中,函数的基本组成为:关键字func.函数名.参数列表.返回值.函数体和返回语句 go语言中函数定义的格式如下: func FuncName(/参数 ...

最新文章

  1. 按照文件名最后数字进行排序
  2. wpf将文字转化为图形_工程师们开发出将天然气转化为固体的方法
  3. python函数名的运用,闭包,迭代器
  4. Spring IOC学习心得之BeanPostProcessor,BeanNameAware,BeanClassLoaderAware,BeanFactoryAware接口是如何起作用的
  5. linux下设置SMTP服务器并用mail命令发送邮件精解
  6. SqlServer触发器常用语法AFTER、INSTEAD OF及其详解
  7. Yii Framework2.0开发教程(10)配合mysql数据库实现用户登录
  8. 作业成本分析法如何计算?作业成本怎么分析计算
  9. educoder结构化分析方法-实体-联系图
  10. 域名解析、域名转向的作用
  11. 数据索引是什么?索引作用是什么?什么样的字段适合建索引?索引的优缺点是什么?
  12. 层次路由与路由选择协议
  13. matlab中求矩阵A的特征向量,matlab层次分析法求特征值及特征向量.doc
  14. 数据分析总结四:可视化与数据分析
  15. CVE-2022-22916
  16. 自建工单(审批流)系统设计
  17. Flutter 评价星星 组件
  18. 深圳立仪科技进军2021年DME中国(东莞)机械展会
  19. map集合嵌套list集合遍历方式
  20. 连接的外部图形设备可能无法与计算机工作,连接外围设备,可以为计算机提供额外功能,Win10如何使用和管理...

热门文章

  1. linux整盘封装生成iso,一键自安装ISO封装打包脚本 | 聂扬帆博客
  2. 【洛谷】P2197 【模板】nim 游戏
  3. 【QT】QByteArray的使用
  4. java计算机毕业设计技术旅游平台源码+mysql数据库+系统+lw文档+部署
  5. pygame库和pgzero库
  6. 详解什么是软件企业认定
  7. 1.2开发小程序的准备工作
  8. 将mp4文件转换为flv
  9. 齐岳|聚乙二醇-四氧化三铁-二氢卟吩纳米复合物Fe3O4-PEG-Ce6|肝靶向功能的四氧化三铁Fe3O4纳米粒子
  10. VOLTE学习笔记(一)——VOLTE网络结构