Day 29 - WooCommerce: 接收虚拟帐号付款成功通知

今天铁人赛的倒数第一天了 ^^,要和大家分享的是,如何接收永丰银行丰收款金流平台收到顾客的银行转帐汇款时,主动通知我们的网站告知顾客已付款。

图 29-1
图 29-1: 文件第 6 页

今天的文章内容就是上图流程图的第 6 步骤。

即时讯息通知

在 Day 1 到 Day 10 介绍导览 API 文件及解说内容时,一直没介绍到第 47 页说明「即时讯息通知」这一项,因为它是属於丰收款金流平台主动通知我们的商店网站,要搭配情境比较好理解它的使用时机。

图 29-2
图 29-2: 文件第 47 页

使用时机就是,当顾客已经汇款到永丰银行的虚拟帐号,金流平台要进行即时讯息通知我们已经收到款项。

Day 27 建立虚拟帐号付款订单时的图 27-2 以下程序码:

图 29-3
图 29-3: class-wc-gateway-sinopac-va.php

第 7 行backend_url 就是在订立虚拟帐号订单时,传送给永丰银行金流平台,用来通知我们顾客已付款的网址。

定义资料入口

图 29-4
图 29-4: SinoPac_Payment controller

第 15 行 定义接收虚拟付款方式的结果的页面网址。
第 27 行 实作接收讯息的逻辑,在这个阶段,会在 do_backend_notify 这个方法接收 PayToken,并使用它来查询付款结果。

图 29-5
图 29-5: SinoPac_Payment controller

还在记得 Day 24 提到信用卡付款方式在刷完卡後,收款平台会 POST 两个值回到我们的商店网站,ShopNoPayToken 让我们用 PHP 的全域变数 $_POST 去接。

这边的讯息即时通知丢过来的值也是一样的 ShopNoPayToken。因此相同处理逻辑的程序码不用多一份,复用就好,所以在 第 15 行 判断是讯息即时通知,就呼叫 do_message_receive 这个方法来处理。

逻辑处理

图 29-6
图 29-6: SinoPac_Payment controller

第 8 行 在方法的参数上加了 $is_backend 当作信用卡和虚拟帐号付款接收资料处理入口的分水岭。
第 18 行 取得 ShopNo,接下来会比对和我们的资料是否符合。
第 19 行 取得 PayToken,准备用它来查询信用卡订单状态。
第 21-25 付款闸道类别的实例根据入口的不同,实例化的对象也不同。
第 40 行 查询到状态为成功,这个付款就完美地完成了。
第 41-46 行 查询到的交易资讯详细资料。
第 80-84 如果是永丰银行金流平台的即时讯息通知,订单备注再多一些说明是从讯息通知触发的,这样比较详细。
第 92 行 把付款成功的交易讯息加注到 订单备注,让负责处理订单的人员知道此订单已收款,可以即刻安排出货。
第 93 行 订单状态变更为「处理中」,让顾客知道其订单正在被处理,让负责处理订单的同事可以在後台筛选此状态取得出货清单进行出货。
第 94 行 交易的资料记录到 meta 中,以便以後可以查询。
第 100 行 失败的话,记录本次回传的资料以供查看问题。
第 107 文件第 47 页有说明,这样的讯息通知会每隔 10 分钟发送一次,重覆 5 次,这里有处理完成就回覆 JSON 字串告知已经收到资料,就不会连续发送了。

流程总结

这系列铁人赛的文章都完成了,铁人赛的最後一天会和大家分享以下:

  • Sinopac PHP SDK 的完整文件。
  • 这支付款外挂首次在 WordPress官方外挂目录开放下载。

我们明天见。


<<:  30-28 之 DDD 战术篇1 - Entity 与 Value Object

>>:  D28 - 彭彭的课程# Python 实体物件的建立与使用 - 下篇 - 实体方法 - Instance Method(2)

Day 18. UX/UI 设计流程之五:GUI Design (下)

上篇说明了 GUI 设计里包含的二个项目:Mockup,以及 Style Guideline。这篇我...

ui 框架説明

我比较熟悉的ui是qt的,但是框架类似,下面就分几步讲解,我是如何在一个自动化项目中使用UI的: 首...

【Day16】数据展示元件 - Table

元件介绍 Table 顾名思义就是一个表格元件,用来整齐的显示行列数据。 参考设计 & 属性...

[13th][Day3] 保留字

about Reserved Words 保留字就像 go 原本就捏好的黏土,并有其特别的意义 保留...

Day11 Android - AlertDialog视窗

今天主要要来提AlertDialog(对话视窗),包含像是通知、基本的功能选择,AlertDialo...