Day 9 - 解密 Order API 回传的 Message 字串

图 9-1
图 9-1: 测试建立订单

接续 Day 8 使用 Order API 建立测试订单後,返回结果是加密後的字串,如上图所示。Message 栏位是加密过的 16 进位字串。而今天的任务就是解密下图中的 Message 栏位,还原成我们可以读取的资料。

图 9-2
图 9-2: API 回应字串

解密流程实作

为了易於阅读,先将 JSON 字串排版一下。

图 9-3
图 9-3: JSON 字串排版

还记得 Day 7 时,我们对 Message 内文加密时使用了 openssl_encrypt 函式进行加密,再把加密後的 binary string 使用了 bin2hex 函式转成了 16 进制字串。

解密的流程正好反过来。

图 9-4
图 9-4: PHP SDK - aesDecrypt 方法

第 11 行 先用 hex2bin 将 16 进制字串转成 binary string。
第 12 行 再使用 openssl_decrypt 函式来解密还原。但使用的 IV 参数的值是采用 API 回覆给我们的这组 Nonce,而不是自取的。

图 9-5
图 9-5: 测试程序

解密的流程可以参考以上测试程序码。

测试结果

图 9-6
图 9-6: 测试解密 Message

Message 内文栏位

图 9-7
*图 9-7: 还原成功的内文结构

解密後可得到的栏位资讯在文件第 35 页提及,比较重要的栏位如下:

图 9-8
图 9-8: 栏位说明

根据前段传递的 PayType 的不同,得到的栏位资讯也不同。

  • PayType 的值为 A 则为虚拟帐号付款,会得到如上图 ATMParam 段落的栏位。
  • PayType 的值为 C 则为信用卡付款,会得到如上图 CardParam 段落的栏位。

信用卡付款

图 9-9
图 9-9: 文件第 7 页

如果进行的是信用卡付款,API 的回应会有 CardPayURL 这个栏位,提供给商店网站进行转址到信用卡付款页面,让使用者进行付款。付款完再跳转回商店网站。

ATM 虚拟帐号付款

图 9-10
图 9-10: 文件第 6 页

如果进行的是虚拟帐号付款,API 的回应会有 AtmPayNoWebAtmURLOtpURL 这三个栏位,提供给商店网站显示在结帐完成页面 (Thank-you page) 或订单资讯页面,让使用者能透过 ATM 转帐进行结帐。

流程总结

为了交易的安全,保障消费者的权益,加解密的流程难免会较一般 API 串接复杂许多,希望这几天的文章可以帮助读者们在串接上的工作效率能有所提升喔!

永丰金流的 Order API 还有其它功能,在接下来 1 或 2 天分享完後,就会发布 PHP SDK 并且正式进入 WooCommerce 电商串接实战了,欢迎锁定收看!


本文更新於笔者的 TerryL 部落格,Day 9 - 解密 Order API 回传的 Message 字串,有兴趣可前往阅读及讨论。


<<:  【在厨房想30天的演算法】Day 08 资料结构:堆叠 Stack

>>:  Day 9 : PHP - 如何宣告阵列?又该如何印出它?

[Day5] 第一章贴图

今日目标 载入图片,画出第一张图 stb_image.h 第三天-驱动OpenGL这篇有稍稍提到这个...

[Android Studio菜鸟的学习分享]我不是机器人-Google reCAPTCHA

Google reCAPTCHA是Google开发的防堵机器人验证API, 原本是设计给网页使用, ...

作业系统L4-执行绪

Process VS Thread 行程: 适合一次最多一个工作(unix shell) 优点: 缺...

DAY 22 Big Data 5Vs – Variety(速度) Kinesis (2)

接续介绍Kinesis家族中其它更实用的资料分析服务: 进入Kinesis服务首页可以看到这三个常常...

[用 Python 解 LeetCode] (004) 277. Find the Celebrity

这题因为 leetcode锁起来,所以我们跑去做Lintcode上面的第 645题 Find the...