今天是示范使用 Pure PHP 建立购物网站的下集,本来想要录影片,不过发现这里没办法直接播影片,所以制作了 GIF 示范图,展示整个购物流程。
图 15-1: Terry's 商店 - 实际购买
由於在本机的虚拟网域 sinopac.php.sdk
,并没有 SSL,因此在後段填完卡号送出後,从收款平台转页到本机的虚拟网域时,浏览器有问一下是否继续,是浏览器的安全机制哦。
图 15-1 的示范网站可经由以下方法安装。
这个示范网站以非常简易的语法编写,读者们可以直接从 Composer 安装,或直接到 GitHub 下载实际操作看看。
Composer 安装指令:
composer create-project terrylinooo/sinopac-php-demo demo
由於铁人赛後,笔者的测试帐号会失效,届时会无法成功送单,因此在您申请了永丰金收款平台的帐号後,请修改成自己的资料喔。这些资料包括 ShopNo
还有四组 Hash Key,设定以下档案。
app/config.php
图 15-2: config.php 内容
QPAY_RETURN_URL
一栏请把 sinopac.php.sdk
修改成您自己的测试网域即可。
我们接续 Day 14 的流程,开始进行填单结帐。
图 15-3: 结帐页面
在这个结帐页面的填写收件人表单,以及送出建立订单的逻辑都写在这支 controller 中。
app/controllers/checkout_controller.php
第 8-23 行 是结帐网页。其中第 11 行的 checkout_handler()
处理送出表单後的动作。
图 15-4: checkout_controller.php
第 39-41 行 读取商品资料,带出要送给 API 建单的栏位。
第 44-46 行 收货人资讯是属於物流的部分,和收款的 API 无关。
第 48-55 行 准备要建立付款订单,喂给 API 的资料,回顾 Day 8 建立订单一文,有更详细的说明。
第 57 行 把订单资料存成 JSON 档案放到 storage/orders
目录中。
第 58 行 取得 QPay
物件。
第 61 行 传送 API 请求,建立付款订单。
第 62 行 把 API 回传的结果分析,取得 第 78 行 的 CardPayURL
,然後转址到永丰金收款平台的刷卡页面。
第 63 行 当 PHP SDK 在遇到资料丢到 API 一定会回错建单失败的情况下,预设丢出 QPayException
,可以 try-catch 起来做错误处理。
刷卡完成会转回到购买完成页面 (thank-you page)。
图 15-5: 购买完成
在永丰金收款平台填写完卡号进行付款後,会 POST 资料回来,为两个栏位,分别是 ShopNo
以及 PayToken
。我们收到 Token 之後,用它来查询订单,查看看订单的付款状况是成功还是失败。这一整个逻辑都在以下这个 controller 中。
app/controllers/order_controller.php
第 10 行 从全域变数 $_POST
取得 ShopNo。
第 11 行 从全域变数 $_POST
取得 PayToken。
图 15-6: order_controller.php
第 16-18 行 验证 ShopNo 是我们在 config.php 设定的那组以及有 Token,使用 PHP SDK 的 queryOrderByToken
方法来查询订单付款状态。
第 23 行 比较要注意的是,详细资料是在 TSResultContent
中,而不是直接在 Message
下。
第 25-28 行 就是我们在购买完成页显示的交易编号、订单编号、付款时间以及付款金额了。比较要注意的地方在金额,必须除以 100 才是真正金额,还记得 API 文件的说明吧?那两个位数是小数两位,因此我们送单要乘以 100,显示结果要除以 100。
以上就是使用 Pure PHP 做一个简易的示范网站,藉着 Sinopac PHP SDK,轻松就完成刷卡付款的动作罗。
接着,正式进入 WooCommerce 电商的世界,我们明天见 ^^
注:示范网站的原始码可能会再改善,而让程序码和本篇文章不同。以上网址为铁人赛文章的进度程序码可以参考。
本文更新於笔者的 TerryL 部落格,Day 15 - PHP SDK: 用 Pure PHP 建立购物网 (下),有兴趣可前往阅读及讨论。
<<: [Day14] React Native - Redux Saga
有些功能性的标签不需要内文,写法如下: < b >粗体字< /b > b 标...
该文件的头加入: using System; 既可以识别了; ...
Odoo模组开发实战 目录 基础栏位建立 第一章 基础栏位建立 1.设定名称 2.至models/m...
哈罗~ 昨天我们介绍了系统入侵的流程, 并且讲解微软提供给Window系统的验证机制。 今天想对系统...
身为开发时程紧凑的工程师 遇到问题或是疑惑时必须要能快速的排除 通常在专案中遇到不熟悉的物件,想到 ...