00:01
上节课呢,我们详细的分析了在商户发送请求的时候,私钥计算签名的一个过程,我们呢也对源码进行了一个解读,那么这节课呢,我们来分析一下在商户接到微信的响应的时候是如何验签的好。我们呢,先来看一下。在微信的文档当中,接口规则开发指南,签名验证啊,这个页面当中的文档的具体的内容,我们呢,先来详细的阅读一下这个文档,首先呢,商户可以按照下述步骤验证应答或者回调的签名,那么所谓的应答呢,就是刚才我们说的这个步骤。这个叫做验证应答的签名。那么什么叫做回调呢?回调呢,就是。在这个过程当中,微信主动的向我们发起请求的时候,那这个就叫回调了,那上面这个是一个针对请求的响应,但是下面这个是主动的请求,那无论是响应还是主动的请求,他都是微信端向我们的商户端发起的一个远程通信。那么。
01:24
我们都要对这个远程通信呢,做一个签名验证,只不过呢,一个是被动的响应,一个是主动的请求,在我们的实际的业务流程当中,我们来看一下,那么什么位置是。主动的请求回调呢,就是这个位置,当我们支付成功的时候,微信端呢,会给我们的商户发送一个异步通知的一个支付结果,那么这个时候我们也要做一个签名的验证啊,那么还有呢,根据这张图,还有呢就是刚才我们说的。
02:01
当我们调用统一下单接口,微信给我们一个响应的时候,那么我们呢,也要做一个签名的验证,所以接下来我们现在讲的呢,是这个位置的签名验证,当然了,他们两个的原理呢,都是一样的啊,只不过呢,一个是对响应进行签名验证,一个呢是对请求进行签名验证。那我们继续来读这个文档。如果验证商户的请求签名正确,微信支付会在应答的HTP的头部,包括应答签名,我们建议商户验证应答签名,也就是说这句话是针对刚才我们所说的这个请求说的啊。就是在这个位置,他建议我们商户呢,进行应答签名,嗯,那言外之意就是这个应答的签名其实是可做可不做的,但是呢,微信是建议咱们要做这样的话呢,是更安全的啊,因为咱们现在集成的是微信给我们的官方的SDK,那SDK里默认情况下,他就对这个应答做了签名了啊,所以呢,这面呢。
03:21
虽然他是建议的啊,但是我们这边其实底层代码已经做了。好,同样的,微信支付会在回调的HTP头部中包括回调报文的签名,商户必须验证回调的签名,以确保回调是由微信支付发送,而不是有一些恶意的用户发送的。那这句话描述的是这个过程了。就是在回调的这个过程当中,我们是必须要验证签名的啊,所以他呢描述了两个过程,一个是请求和响应的过程,我们是建议验证签名的,而回调的过程是必须要验证签名的。
04:08
好,那接下来呢,我们来看获取平台证书这个部分,微信支付APIV3,使用微信支付的平台私钥。进行应答签名,这句话描述的呢?是这个过程。微信支付的APIV3使用微信支付的私钥进行应答签名,那这是个应答对不对?好应答就过来了啊。相应的商户的技术人员应使用微信支付平台证书中的公钥进行验签。那还是这个过程。这是我们的商户的技术人员应该使用微信支付的公钥进行验签。接下来,目前平台证书只提供API下载,也就是说我们的公钥要从平台证书当中拿到,那你注意,这个平台证书就是微信支付的证书,不是我们商户的证书,那之前我们从啊我们的后台管理系统申请的那个是我们商户的证书,而现在我们要使用的是微信支付的平台证书啊,从平台证书当中我们能获取到微信支付的公钥。
05:32
那么平台证书怎么获取呢?这里面说到了,目前平台证书只提供API进行下载,请参考获取平台证书列表,那么我们点击一下把它打开啊,我已经打开了好,那么获取平台证书列表的这个API方法呢?就是这个方法叫做V3CERIFIC。通过这个方法我们就可以下载微信支付的平台证书了,那么为什么它是一个列表呢?啊,因为啊前面我们也讲过,讲证书的时候,这个证书呢,都是有有效期的,所以呢,如果上一个证书失效了,那么你再去生成下一个证书的话,中间会有个空档期,对吧?啊,这个空档期就会出现问题,因为没有证书呀,就没有办法进行证书的下载,也没有办法进行公钥的获取,更没有办法进行验签,所以呢,一般情况下这面呢它有一个。
06:30
规范哈,就是微信那面呢,它会提前24小时把新证书加入到平台证书的列表当中,也就是说这24小时之内呢,平台证书会同时存在两个,一个是将要过期的旧证书,一个是即将启用的新证书,那所以呢,此时此刻我们两个证书同时存在,那么它会给我们提供一个证书序列号,就像我们自己下载的商户证书一样,我们不是有一个证书序列号嘛,那么微信支付那面也是一样的,它会给我们提供微信支付平台证书的证书序列号,那么在这个24小时之间,你既可以用新的证书序列号,又可以用旧的证书序列号,所以它就很好的做了一个新旧证书之间的一个转换啊,那么微信支付那边,他在切换新旧证书序列号的时候,他就可以无缝切换了,那么24小时之后,那么。
07:31
微信支付呢,就可以把它的旧证书呢,啊就给它销毁掉,所以说这面呢,它是一个平台证书列表的一个API叫v certific。好,这是我们所说的获取平台证书,那很显然,那这个地方呢,需要我们对刚才的这个API呢进行调用,然后呢,把平台证书下载下来之后呢,才能够去从平台证书当中拿到微信的公钥,然后通过微信的公钥呢再进行签,当然整个这个过程呢,实际上我们的SK当中都给我们封装好了,所以接下来啊,我们的任务呢,就是看一看源码,看一看SDK当中是如何进行平台证书的下载和管理的。
我来说两句