00:00
上节课呢,我们处理了微信支付的结果通知,那么这个呢,是微信支付通过支付通知接口将用户支付成功的消息通知给商户啊,那所以呢,我们在上堂课呢,处理了请求参数,并且呢成功的进行了一个应答,那么这堂课呢,我们来测试一下应答异常的情况,我们来看一下这个文档,这个文档当中呢。有一个通知规则,通知规则呢说如果微信收到的商户的应答不符合规范或者是超时,那么微信会认为通知失败,一旦通知失败了呢,微信会通过一定的策略,定期的重新发起通知,那么为了尽可能的提高通知的成功率啊,微信呢,会在15秒,15秒,30秒,30秒,然后三个小时,六个小时,总之加起来一共24小时零四分,这个时间内呢,不断的给我们的商户端发起通知。
01:03
那这个呢,就是它的通知规则,所以说呢,我们现在呢,就来测试一下,是不是在我们应答不符合规范或者是超时的时候呢,微信会给我们发这样的一个接连不断的通知,那么我们来模拟一下应答不符合规范的情况,比如说前面咱们说这个应答如果是200或者是204,也就是我们再看一下我们上堂课看到的这个文档啊。在这个位置,他说支付通知HTTP应答码为200或者是204的时候,才会当做正常的接收,当回调处理异常时,应答的HTTP状态码因为500或四开头的这样的一个应答,那也就意味着如果我们想要一个正常的应答,微信只给咱们发一次通知,不会接连不断的反复通知,以为咱们没收到呢,或者是以为咱们处理失败了呢,那么如果是这种情况的话,如果我们想要一个正常的应答的情况的话,那么我们就要返回这个结果,那所以现在呢,假设说我们返回一个其他的结果,比如说201啊,没有按照他的约定。
02:15
返回,那么我们看一看,这是不是就是一个室外的应答,另外呢,如果我们想啊,让这个应答看得更清晰一些呢,我把这个完整的数据这块呢,先给它屏蔽掉。好,我重新启动服务器。同样我们做测试的时候呢,建议大家也把这个数据库当中的数据先清掉啊。好,现在呢,我们的应用程序已经启动成功了。然后呢,我先展示一个二维码出来,接下来呢,还是再清空一下我的控制台。
03:04
然后呢,我来扫一下码,做一个支付。好,现在呢,我已经支付成功了,那么我们来看我们的控制台是不是我们。因为没有按照规定给微信返回一个成功的应答,那么微信呢,就会接连不断的给我们发通知,因为他认为呢,我们这边要么就是没收到,要么就是处理失败了,但是呢,他并没有按照文档当中说的一样啊,每隔15秒啊,前期你看啊。这个地方他说是每隔15秒。这个地方啊,第一次和第二次之间呢,是啊,间隔15秒,然后呢,第二次和第三次之间呢,也是间隔15秒,以后呢是30秒,再往后呢,时间会长一些,十分钟20分钟啊,30分钟,然后是三小时,然后是六小时哈,好,那么实际上呢,微信那一端呢,它是有多台服务器进行并行发送的啊,所以呢,有的时候发送的时间呢,就会在几秒之内。
04:21
啊,那这种通知呢,我们是。应该用在什么位置呢?应该用在这个位置啊,就是当我们的应用程序出现异常的时候,那我们呢,就可以去返回啊,像刚才文档当中说的500或者是以四为开头的这样的一个响应码的应答结果,所以呢,我们在这面呢,Try catch一下。好,然后呢,我再把它改回来啊。我们这面呢,写一个失败的应答。那么应息我们可以自定义键T应这个啊,我们必须按照要求来。
05:16
好,那这个呢,就是失败的应答,那我们来制造一个。异常。我来制造一个非常简单的处理。一场。那我呢,来重新启动一下这个服务器。那么大家注意啊,在这个过程当中,很有可能我还没有做任何操作,这面就有一个啊通知就调回来了,为什么?因为上一次我失败的那个通知,他会在24小时之内不断的执行,对不对啊,所以说呢,我们在控制台上有可能会收到啊,前面不同的测试请求的通知啊,所以呢,我们才打印这个通知的ID嘛,这样的话呢,我们可以辨别出啊,他们是不是同一个请求发过来的通知。
06:14
好,我们再买另一门课程。好,我已经支付成功了,那么我们来看一下。这面呢,就一直在执行一个处理异常,也就是说我们的这个通知呢,已经成功的接收了,对不对?好,那么接下来呢,我们来看一下我们的。通知ID啊,通知ID就没打印出来,为什么?因为我们的信息打的有点早是吧,但是呢,我们实际上是可以看出来,我们整个的这个除龄异常是反复不断的执行的,也就意味着我们的这个通知呢,是在反复不断的被执行啊,被调用好,那这是异常的情况,所以一般情况下,我们应用程序如果出现异常,那么我们就这样去处理,那当然这个地方呢,我们刚才我这是自动生成的啊,我们呢,就补获一个exception就可以了。
07:22
那还有一种情况。也会造成我们的。通知。会。不断的重新发起,那这种情况呢,就是在接入规范最佳实践回调通知注意事项这个里面写到的。商户系统收到支付结果通知,需要在五秒内返回应答报文,否则微信支付会认为通知失败,后续会重复发送该通知。那么。也就意味着。我们这边。如果应答不符合规范,微信会重复发通知,还有一种情况呢,就是我们的应答超时了,没有及时的给微信返回,那么微信呢,等不及了,他认为呢,我们这边有可能是没收到,或者是呢,没有成功的处理,那么这个时候呢,他也会给咱们不断的去发送。
08:21
通知回调啊好,那接下来呢,咱们来模拟一下这个应答超时的情况。那模拟应答超时呢,很方便,我们就直接让我们的线程睡眠就可以了,Time点睡几秒啊,Sleep睡五秒就可以了,因为只要超过五秒呢,它就会。认为我们是英达超市。我先把这个异常呢给他。屏蔽一下啊,下一次在测试执行的时候,我们可以把它放在这儿执行。
09:01
因为这样的话呢,至少能打印出通知ID来是不是。好,然后呢,我们来重新的启动一下。好,接下来呢,我来再发起一笔支付。好,那么在支付之前呢,我再清空一下目前为止的这个。一句。好,我再扫一扫。支付。好,现在呢,我们的应答呢,应该是超时的啊。稍等一会儿。好,那你会发现呢,我们的这个通知呢。
10:01
就调用回来了。那目前为止这几个通知的ID都是同一个,你有可能在这个过程当中收到一个突然不一样的ID,那是因为我前几次的测试,他也还在接连不断的给我发通知,明白吧?啊好,那如果你在测试的过程当中,测试了好多这个应用程序的啊,这个通知失败通知或者是超时通知的流程的话,有可能你看我这块突然出来一个其他的ID,是不是这就是前几次的啊,那么如果你不想出现这种啊干扰你啊判断的这样的一些其他的通知的啊这个信息的话,那么我们还有一种非常。用的办法就是我们重新启动这个,那样的话我们换一个地址啊,因为微信那呢知的地址呢,是我们目前为止的这个nro的地址,那如果你把它换掉了的话,它就通知不到了,那我们的服务器呢,也接收不着了,好那这块呢是咱们所说的。
11:11
失败应答以及超时应答。
我来说两句