00:00
那我们打开我们的统一下单API的接口,我们在API字典native支付native下单当中找到这个接口,那这个接口呢,我们先简单的看一下它的说明,商户native支付下单接口,微信后台系统返回链接参数code URL,那这个呢,就是我们最终需要的啊,帮助我们展示二维码的这样的一个值,商户后台系统将code UR值生成二维码图片,用户使用微信客户端扫码后发起支付。那接口说明这一块呢,请求的URL地址就是它了,所以说我们在发送请求的时候呢,要组装这样的一个URL地址,并且请求方式呢是post。因此呢,我们需要创建post请求对象,然后呢,我们要组装这一系列的参数啊,把这些参数都组装起来,并且呢,这些参数要通过Jason的形式传递,然后再接下来呢,这边有一个请求示例,那这个请求示例呢,就是如果参数我们组装起来之后,它应该长什么样子,所以呢,我们要把参数组装成Jason字符串的形式。
01:12
那我们把参数准备好,那URL地址呢?也明确了,请求方式呢,也定义了,那这样的话,我们的这个请求呢,就可以发送出去了,发送出去这个请求之后呢,我们会得到返回结果,那么返回结果当中呢,就会有这个二维码连接,就是扣的URL,所以最终呢,我们要的值就是它,那么这个就是一个返回示例。那如果没有返回这样的一个正确的事例的话呢,它也有可能返回错误的实例,那么如果我们得到了错误信息的话,我们可以通过判断这个错误码和错误描述来找到这个具体的解决方案,那这个接口怎么调用啊?我们需要写这个HTTP远程请求,那HTTP。
02:11
具体的案例代码,那我们找到一个。发送请求的案例代码。服务端native下单,我们找到Java版本的这个代码,那这个呢,就是一个创建订单,它的这个创建订单呢,是这个步骤啊,叫做统一下单API创建支付订单啊,指的是我们的商户系统和微信系统之间创建的这个支付订单,那所以呢,我们需要把这个代码呢,复制到我们的项目当中,我们直接把它复制过来。好,我们把它粘到这块。我们先把这个。异常先给大家抛一下。
03:01
爱的exception吧,好,我们现在我们这个类当中呢,直接添加一个exception异常这边都改成exception啊。抛出所有的遗产。然后接下来呢,我们来看一下这个统一下单API的URL,那这个URL呢,很显然就是刚才我们在这个位置。看到的这个URL地址了,叫V3配transactions。那么我们先。从我们的微信配肯这个里面,所以我们在上面这个地方先注入一个微信配这。在这个配置文件当中呢,我们有一个叫domain的这样的一个值,这个值呢,就是我们的微信的服务器的地址,所以呢,我们。
04:07
从微信配里面拿到,然后接下来呢,我们去连接。我们后面的URL地址,而URL地址呢,我们是写在了枚举当中。A。那么在这我们。微信api.native pay.get。好,通过这种方式呢,我们就定义了我们的远程链接的URL地址。然后需要写这个Jason字符串的组装了,那么这个Jason字符串的组装,它组装的有点太。
05:03
太复杂了哈,所以呢,我们需要找到一个简单的方案,我们把它改造一下。把它删掉,那之前呢,我们引入了一个Jason啊,所以呢,我们去一个JA这个对象。好,然后接下来呢,你有一个哈希map,这个哈希map里面呢,它的这个数据类型呢,是不固定的。所以说呢,我们这边呢,就不写泛型了。可以不写泛型哈,不固定的话。我们用这个面向接口的编程方式。那这块呢,我们就写ter。然后呢,我们把这个里面的参数呢,一一的去给他设置一下,那这里面的参数呢,包含若干哈。
06:01
那我们来对照一下接口文档。首先呢,就是应用ID,也就是我们的D。我们的D呢?从微信里面获取D。接下来呢,是第二个参数。叫商户号。商户号呢?我们也从微信配当中获取,要get MC hid?在接下来呢,是商品描述。那商品描述呢,我们从前面的这个订单信息当中获取,订单信息当中呢,有一个title,那我们的商品描述呢,可以是这个title。
07:06
第四个。是商户订单号out number。好商户订单号呢,我们从。当中的order number当中获取。好,然后接下来呢,是这个是非比天的,我们就先不用去处理它,然后接下来呢,是通知地址叫notify URL。好,什么叫做通知地址呢?我们来看一下之前的这个图啊,如果整个的一个支付流程成功了的话,那么在后面这个并行处理这个位置,你会发现呢,微信的服务器端会给我们的。业务服务器发送一个通知,那我们的业务服务器呢,就要有一个对外的一个外网的访问地址,这样的话,微信服务器呢才能够访问过来,所以这个呢就是通知地址。
08:13
那我们的这个通知地址呢,是定义在了这个位置的。Notify type。这个是我们的支付结果通知,这个是我们的退款结果通知,那这个是路径,他的主机在哪呢?主机我们定义在了这儿。就是接受结果通知的地址,那这个其实就是我们开发服务器未来要做的内网穿透的地址了,所以呢,我们把主机地址和刚才这个通知的路径给它拼起来,就是我们的通知地址,那这个呢,我们要作为参数发送给微信的服务器,这样的话,微信服务器可以从他接收到的参数当中解析出通知地址,并且在需要的时候。
09:00
给我们发送结果通知,那我们在这个位置呢,就把通知地址呢,也给它配置上,Get notify懂。然后连接我们的微信notify.notify get,好,那这个呢,就是我们的通知地址。然后接下来呢,就是这个订单金额,那订单金额这块呢,它又是一个嵌套的对象,所以呢,我们要组装这样的一个嵌套的数据出来,那它外层层呢,有。两个,一个类型ency。好,我们在这面呢,去组装一下,那怎么组装呢?因为它是一个嵌套数据,所以呢,我们要再创建一个map。
10:06
那这个map呢,我叫他。Amount map。好,然后再给这个map呢来数据,我们直接把这两个都装上吧,一个呢是总金额叫偷偷。好,这个总金额呢,我们还是里面get。然后呢,是。货币类型,当然这是可选的啊,你不写也行,那我顺便把它写上吧。人民币。好,接下来呢,我们把amount map put到parater map当中,所以这呢,我们amount map复制过来,那它的键呢,叫做amount。
11:11
然后呢,我们把这个请求参数呢,再换成刚才的这个Jason字符串。也就是说它这个地方实际上最终要得到的是这样的一个字符串形式,对不对,所以呢,我们还是要给它转成字符串的啊。有一个方法,我们把ter map呢给一下。转换成。Jason,那我们可以在这个地方呢,就打印一些日志了哈,啊,我们看一下啊,前面这块呢,就发起支付请求,然后这面呢,我们可以写一个日志。
12:37
到这为止呢,我们就拿到了这个支付参数。好,接下来呢,我们把这个请求参数封装到string entity这个对象当中,并且呢,用U切F8给它做一个编码。
13:01
然后呢,我们要把这个ity置内是TT。我们来看一下这面有一个叫做。接口规则,接口规则这面有个简介,那么这个地方呢,啊,前面我们看到了,他说的就是希望使用Jason做数据交换,对吧,所以呢,这面。我们就统一呢,都给它设置成Jason的数据格式啊。接下来呢,这个步骤就是完成签名并执行请求。整个的这个T获。
14:10
我们获取了一个HTTP对象啊,那么它的这个具体的数据类型呢,就是TP client了。他自带了这个签名和验签的流程,所以呢,我们只需要在这个位置直接执行XQ的方法就好了,那么他内部呢,可以帮助我们去做签名,并且拿到结果之后呢,也可以自动帮我们做验签,那现在呢,我们要把这个http client注入进来,所以呢。我们在这个地方。注入我们的TP client,因为我们置已经这个方法呢,直接注入进来。
15:03
好,把这个方法的结果直接注入进来就可以了。把它替换到这个位置。那到这为止呢,我们就将请求发送出去了,并且呢,将结果得到了。
我来说两句