00:00
这节课呢,我们来详细的说一下异步通知参数以及异步通知应答。那么在我们的。支付宝的开放文档当中呢,我们找到开放能力电脑网站支付通知参数说明异步通知参数这篇文档哈,那这个文档呢,就是对于PC网站支付的交易,在用户完成支付之后呢,支付宝会根据API中商户传入的notify URL,也就是上节课我们设置的这个通知地址,通过post请求的形式呢,将支付结果作为参数通知到商户系统,所以呢,上堂课我们所获取到的。这个parameters就是我们这堂课要讲解的异步通知参数了,那么这个异步通知参数当中呢,它也分为两个部分的内容,一个呢是公共参数,一个呢是业务参数,那么在公共参数当中呢,它包含notify time,就是通知发送的时间,还有notify type通知的类型,那么这个类型呢,就是trade status sync哈,这是固定的,我们可以看一下。
01:10
Trade status sync,意思呢就是我们的交易状态的一个异步通知,好,再接下来呢,就是我们的通知的唯一的ID,然后还有呢叉site version啊,Sign type签名类型,还有sun,那么支付宝给我们发送的这个异步通知里面呢,是携带签名的,所以呢,一会儿我们将会对这个签名进行校验,如果签名校验成功了,我们才可以正确的去接收这个通知,并且呢,我们才能够去做后面呢我们的业务处理,如果这个签名校验不成功呢,我们认为这个通知呢是非法的,或者呢是有安全风险的啊,甚至呢,是黑客伪造支付宝给咱们发送的一个假通知,那么我们呢,是拒绝接受这个通知的,那这个呢是授权方APPID,所以呢,我们可以在这个文档当中看到,实际上就是把我们的D呢,给我们做了一个返回。
02:08
再接下来呢,就是业务参数,业务参数这面呢,它包含了trade number啊,是支付宝交易号,也就是说在支付宝端它对每一笔支付呢,都会生成一笔交易,那这个呢,是支付宝端的那个唯一的交易编号,然后是我们的APPID,支付宝应用的APPID,然后呢是out trade number,这个呢,就是我们之前在发送支付请求的时候,我们生成的我们的商家的订单号,那么我们在发送支付请求的时候,给支付宝发送过去嘛,那么支付宝这次呢,也给我们在回调当中呢,在我们的异步通知当中呢,也给我们发送回来了,便于我们在我们的这个回调要通知当中呢,去查找我们当时的那个订单数据,好,剩下的这些呢,都是一些非必要的内容,我们先不去分析它啊,有必要的时候,需要用到的时候呢,我们再去看哈,所以这些呢,就是我们的业务参数了。
03:04
那么我们会发现呢,这些业务参数实际上在刚才我们得到的这个通知参数当中呢,其实一一的都可以找到对应的结果。那接下来呢,我们再来看后面的这个交易状态,说明交易状态呢,在我们的支付的过程当中呢,它有这几种,第一个呢,就是交易创建,等待买家付款啊这样的一个状态,第二个呢,就是未付款交易超时关闭这样的一个状态。那么下面一个呢是trade success,叫做交易支付成功,还有一个呢是trade finished,叫交易结束不可退款,那么这个交易支付成功呢,就是我们商户平台之前呢,会跟支付宝进行产品的签约,签约的过程当中有些产品呢是支持退款的,那么他这种呢,就是支付成功之后呢,就是支付成功了,有些产品呢是不支持退款的,那么这个交易结束之后呢,就是不可退款的了,具体的说明呢,在下面这个位置。
04:06
有一个关于这两个状态区别的说明哈,这他说状态trade success的通知触发条件是商户签约的产品支持退款功能的前提下,买家付款成功,还有一个呢,就是交易状态trade finish的的通知触发条件是商户签约的产品不支持退款功能的前提下,买家付款成功,或者是商户签约的产品支持退款功能的前提下,交易已经成功,并且已经超过可退款的期限啊这两种情况呢,分别是trade success还有trade finish的啊这样的两个状态,好,然后我们看完这个交易状态之后呢,我们看一下当前我们的这个异步通知,它触发的条件是什么?我们说这个里面触发的条件呢,就是支付成功的情况下,也就是说当trade success的时候,我们当前的这个异步通知呢,才会被触发。
05:06
接下来呢,就是资金明细说明,那资金明细呢,这块有一个参数叫fund channel啊叫资金渠道,那么我们来看一下我们当前获取到的这个参数的资金渠道,它的值呢,是阿里pay account,那我们会发现呢,在我们刚才的这个。资金明细说明这个表格当中呢,阿里pay account意思呢就是支付宝的余额支付哈,然后呢,支付的也就是amount,它是单位是元,所以你会发现在我们当前的这个请求参数里面呢,它有一个0.01,那单位呢是元,也就是前面我们支付的一分钟这些内容呢,都会在我们的异步通知结果当中呢,通过请求参数的这个拍的这个形式呢,给我们的应用程序端呢,再发送回来哈。那么接下来呢,就是刚才我们看到的支付渠道了,除了啊我们的支付宝余额之外啊,那实际上呢,你还可以用你的支付宝红包支付呀,啊什么折扣券呀,余额宝呀等等,那用户选择这些不同的渠道的时候,我们获取到的结果当中,我们获取到的请求参数当中就会显示出不同的值,所以通过这个请求参数,我们可以判断出用户当时是通过什么样的一个支付渠道进行支付的,然后优惠券信息说明,因为我们刚才的测试当中呢,并没有涉及到优惠券哈,所以这块我们就不去多说了。然后接下来呢,就是服务器异步通知的页面特性,这个里面呢,它提到了好多内容,我们先来看这个啊,就是结果程序执行完成后,必须打印输出success,也就是说在我们的应用程序当中。
06:51
我们的这个结束必须要打印这个success,那因为中间我们还要经过一系列的流程,最后是不是success还不一定,所以呢,我们在前面哈,我们先定义一个字串叫result,好,然后最后呢,我们将这个赋值为Su success啊经过一系列的处理之后,如果都成功了,我们就将result赋值为success,然后呢,将这个success呢返回给我们的支付宝端,好,所以这块呢,就是返回成功的结果,当然这是像支付宝返。
07:36
向支付宝返回成功的结果。那么如果商户反馈给支付宝的字符不是success这七个字符,支付宝服务器会不断的重发通知,直到超过24小时,22分钟,也就是说这个和之前我们在微信支付当中讲的啊,这个超时重试的这个功能呢是一致的,那么一般情况下,25小时以内完成八次通知,通知的间隔频率一般是四分钟十分钟,十分钟,一个小时,两小时,六小时,15小时,这样的话呢,他在25小时以内完成八次通知,如果这八次通知我们都没有接收到,那么可能我们就需要进行一个查单的这样的一个接口的一个调用了。
08:25
那么如果不成功的话,我们打印什么呢?一会儿我们会讲验签哈,在这个验签的这个示力代码当中,它会写到啊,如果不成功的话,就会打印非令,所以呢,我们就先将我们当前的这个返回结果默认设置成非令,然后一会儿呢,经过一系列的处理之后,如果处理流程结束了,我们就返回success,最后呢,向支付宝端返回这个result,好,如果处理流程没有顺利的啊结束,那么我们在中间的过程当中呢,就会给支付宝呢返回failure啊,如果返回的是failure利的话,那么它就会执行他前面所说的这个流程。
09:06
就是支付宝务器呢,会不断的我们的业务服务器发送重复的通知,当然了,在沙箱的这个环境下呢,支付宝服务器是不会向我们发通知的,所以大家如果想测试这个重发通知的这个功能的话呢,那必须呢要切换到真实的测试环境,也就是说我们的这个位置。要切换成真实的啊测试参数,所以这块呢,我也不给大家测试了,那么具体的啊,测试的效果呢,我们可以参见当时我们在微信支付当中测试通知重试的那个效果。所以刚才呢,我们讲到的就是支付通知当中的通知参数以及通知结果啊这样的两个内容。
我来说两句