前提

项目开发中实现微信提现的功能。使用到了两个接口

企业付款接口:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers【https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2】

查询企业付款接口:https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo 【https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_3】

为什么有不能马上知道付款结果的情况--遇到err_code=SYSTEMERROR

根据支付文档https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2,可知,主要看3个字段

return_code :通信标识,非交易标识,此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断

result_code:  交易标识

err_code :错误编码

只有在return_code 和 result_code 同时为SUCCESS时 才可判断 交易成功

那么return_code ==SUCCESS result_code =FAIL的时候呢?根据文档可知result_code 才是交易标识,这时应该判定位交易失败才对,

然而,在实际应用中发现,真相并不是这样的。

在一次付款日志中出现,return_code ==SUCCESS result_code =FAIL 有err_code时 【err_code=SYSTEMERROR:系统繁忙,请稍后再试】

我们判定了为交易失败,但是微信方面却在几天后,成功支付了这笔钱,这就就导致了损失。

所以,付款API 除了有即时成功 即时失败的情况外 还有一些意外的情况 :不能马上判断是成功了还是失败了

对于那些不能马上知道结果的交易订单应该怎么处理?

对于那些不能即时成功的交易记录,我们使用第二个微信接口:查询企业付款接口:https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo

定期去查询这些记录的微信处理结果,如果返回即时成功/失败时 才在我们这边处理金额数据。这样就尽量避免了出现上面会造成损失的情况。

查询企业付款接口遇到的err_code=NOT_FOUND问题

但是这个查询企业付款接口 ,在实际应用中,我们又遇到了一个新的问题:

  • 付款接口返回即时成功时,下一秒马上使用查询接口去查询该订单号的交易结果时,返回的却是err_code=NOT_FOUND而不是成功。再隔一个时间去查询时 就返回交易结果为成功了。

这种情况,因为付款成功到调用查询接口的时间间隔太短 (只有1秒)导致的,这1秒期间微信那边的订单可能还没有入库,导致查询结果为订单号不存在,再隔一段时间去查就为成功了。

这是因为付款成功后,刚好就到了定时任务启动的时间段,马上就去执行查询订单结果的脚本的结果,这是使用定时任务无法避免的会出现的情况。

  所以,有err_code=NOT_FOUND并不代表 真的交易失败,err_code为NOT_FOUND时可能只是数据没有入库的原因。

总结上文工作中遇到的情况,可以归纳如下结果

  • 付款接口
  1. return_code=result_code=SUCCESS   -->可以 判定为即时交易成功
  2. return_code=FAIL           -->可以判定为即时交易失败 
  3. err_code=SYSTEMERROR       -->不可判定交易结果,需要定时去调用查询付款接口取确定,直到明确结果
  4. 其他 明确失败的err_code则 可以判定为即时失败(err_code=NOAUTH/AMOUNT_LIMIT等)
  5. 其他不可判定交易结果,需要定时去调用查询付款接口取再去确定,直到明确结果
  • 查询付款接口
  1. return_code=result_code=SUCCESS时:

  status=SUCCESS   交易成功

  status = FAILED    交易失败

  status=PROCESSING 交易处理中

  2.return_code=SUCCESS,result_code=FAIL时:

  err_code=NOT_FOUND 不可判定交易结果,需要定时去调用查询付款接口取再去确定,直到明确结果

  其他 明确失败的err_code 则可以判定为即时失败(err_code=NOAUTH/AMOUNT_LIMIT等)

  3.其他不可判定交易结果,需要定时去调用查询付款接口取再去确定,直到明确结果

 

微信企业支付--遇到不明确结果的err_code:SYSTEMERROR,NOT_FOUND的更多相关文章

  1. 微信小程序支付(企业支付给用户零钱)

    内容摘要:本案例客户端支付方式为微信小程序支付(JSAPI).商户运营一段时间后,在微信商户平台开通企业支付服务后,即可调用微信支付提供的企业付款接口将佣金等金额通过微信零钱返现给C端用户零钱. 服务 ...

  2. PHP微信商户支付 - 企业付款到零钱功能(即提现)技术资料汇总

    PHP实现微信开发中提现功能(企业付款到用户零钱) 一.实现该功能目的 这几天在小程序里要实现用户从系统中提现到零钱的功能,查了一下文档可以使用 企业付款到用户零钱 来实现: 官方文档:https:/ ...

  3. thinkphp.2 thinkphp5微信支付 微信公众号支付 thinkphp 微信扫码支付 thinkphp 微信企业付款5

    前面已经跑通了微信支付的流程,接下来吧微信支付和微信企业付款接入到thinkphp中,版本是3.2 把微信支付类.企业付款类整合到一起放到第三方类库,这里我把微信支付帮助类和企业付款类放到同一个文件了 ...

  4. PHP实现微信商户支付企业付款到零钱功能代码实例

    本文为大家分享了PHP实现微信商户支付企业付款到零钱的具体代码,供大家参考,具体内容如下 微信支付开发文档 一.开通条件 企业付款为企业提供付款至用户零钱的能力,支持通过API接口付款,或通过微信支付 ...

  5. 微信、企业微信和支付窗 SDK 三合一,JeeWx-api 1.2.0 版本发布

    摘要: JEEWX-API 是第一款JAVA版微信极速SDK,同时集成企业微信SDK,支付窗SDK,可以快速的基于她进行微信公众号.企业微信.支付窗应用开发.基于 jeewx-api 开发可以立即拥有 ...

  6. PHP微信商户支付企业付款到零钱功能

    一 开通条件,就是首先要在微信平台设置好. 以下微信文档里有的,我这里大概掠几项比较重要的. 付款资金 企业付款到零钱资金使用商户号余额资金. 根据商户号的账户开通情况,实际出款账户有做区别: ◆ 默 ...

  7. PHP实现微信企业付款到个人零钱步骤

    微信支付企业付款到零钱功能应用广泛,比如微信红包奖励,业务结算等.通过企业向个人付款,付款资金将直接进入用户微信零钱. 一 开通条件 ​ 付款资金 企业付款到零钱资金使用商户号余额资金. 根据商户号的 ...

  8. 微信JSApi支付~集成到MVC环境后的最后一个坑(网上没有这种解决方案)

    返回目录 大叔第一人 之前写了关于微信的坑<微信JSApi支付~坑和如何填坑>,今天将微信的jsapi支付封装到了MVC环境里,当然也出现了一些新的坑,如支付参数应该是Json对象而不是J ...

  9. 微信移动支付V3开发详细教程服务端采用.net mvc webapi(C#)

    转自:http://www.kwstu.com/ArticleView/netmvc_201511132050268716 最近开发手机app需要实现移动支付功能,由于考虑支付安全将微信支付生成签名写 ...

随机推荐

  1. pyhton3多线程

    from time import ctime,sleep def music(): for i in range(2): print ("I was listening to music. ...

  2. What floating point types are available in .NET?

    The C# standard only lists double and float as floating points available (those being the C# shortha ...

  3. [HIHO1039]字符消除(字符串,枚举,模拟)

    题目链接:http://hihocoder.com/problemset/problem/1039 思路:枚举所有字符更新的位置和ABC三种修改方案,之后再模拟消除规则,一步一步去消除.直到无法消除, ...

  4. phpcms上线步骤,无法生成缓存,页面空白原因

    缓存目录没有设置成777. 1.修改数据库配置 2.修改数据表中的本地地址成线上地址 3.修改代码中的配置,本地地址批量改为线上地址 4.登录后台,更新缓存

  5. D3D中深度测试和Alpha混合的关系

    我在学习D3D的深度测试和Alpha混合的时候,有一些遗憾.书上提供的例子里说一定要先渲染不透明物体,再渲染透明物体,对渲染状态的设置也有特殊要求.我看的很晕.自己查图形学的书,上网找资料,结果还是糊 ...

  6. 51nod1476 括号序列的最小代价

    这题应该可以用费用流写吧?不过我想不出贪心来TAT.其实还是单调队列乱搞啊T_T //ÍøÉϵÄ̰ÐÄËã·¨ºÃÉñ°¡¡£¡£¡£ÎÒÖ»»áÓÃ×îС·ÑÓÃ×î´óÁ÷ÅÜTAT #in ...

  7. 51nod1421 最大MOD值

    O(n2)tle.O(nlognlogn) #include<cstdio> #include<cstring> #include<cctype> #include ...

  8. 4612 warm up tarjan+bfs求树的直径(重边的强连通通分量)忘了写了,今天总结想起来了。

    问加一条边,最少可以剩下几个桥. 先双连通分量缩点,形成一颗树,然后求树的直径,就是减少的桥. 本题要处理重边的情况. 如果本来就两条重边,不能算是桥. 还会爆栈,只能C++交,手动加栈了 别人都是用 ...

  9. java基础:数据类型

    一:基本数据类型 (1):整数类型   byte,short,int,long (2):浮点类型   float , double (3):布尔类型 boolean 注意: long 类型的变量后面要 ...

  10. BZOJ 4597 随机序列

    一定要想到,对于一个空位如果填了+,那么一定有一个表达式这里填-号使得后面的全部抵消掉.这点十分重要. 于是发现这个答案只和前缀积有关,线段树维护即可. #include<iostream> ...