乐趣区

如何使用API的方式消费SAP-Commerce-Cloud的订单服务

最近 Jerry 在做一个微信和 SAP Commerce Cloud 集成的项目,需要在微信里调用后者的 Restful API 进行订单创建和读取。以前 Jerry 对 SAP Commerce Cloud 知之甚少,这次趁机学习了一下,过程中得到了 SAP 成都研究院 Commerce 开发团队的 Jonathan,Kevin 和 Kate 等几位同学的大力帮助,这里表示感谢。

在 SAP 官网 help.sap.com 上根据关键字 commerce 搜索,结果列表里会显示出好几个产品,这难免会让像 Jerry 这种刚接触 commerce 的人感到有点疑惑。

其实只需要耐心地打开这些链接逐一阅读一会儿,就能弄清楚这几个产品间的差异:

  • SAP Commerce:SAP On-Premises 上的电商解决方案
  • SAP Commerce Cloud on SAP Infrastructure: SAP Commerce 的云端解决方案,Commerce 核心代码通过 SAP 内部工具打成一个容器镜像,部署和运行在 SAP 自己的数据中心里。在很多文档里又称为 Commerce Cloud Version One, 简称为 CCV1.
  • SAP Commerce Cloud on Public Cloud:SAP Commerce 云端解决方案,部署运行在公有云上,比如微软的 Azure,简称为 CCV2.

Medium 上有一篇不错的博客 Two clouds in practice: a comparison of SAP Commerce Cloud v1 and v2 介绍 CCV1 和 CCV2 的对比,这里 Jerry 就不深入展开了。

回到本文主题,要想消费 Commerce Cloud 的订单服务,首先需要熟悉一下如何手动在 Commerce Cloud 里下单。在 Commerce Cloud B2C 的场景里,下单的流程对我们每个人来说几乎熟悉得不能再熟悉了——和我们日常在某宝上购物如出一辙。

到电商店铺里浏览商品,看中自己心仪的一款产品后,

点击 Add To Cart 把产品加到购物车里:

点 Check Out 去结账:

会生成一个购物车 ID:

维护发货地址。当然我们平时在某宝上购物时,一般都提前在手机 app 里维护了好几个发货地址,然后结账时只需从中选择一个即可。

维护支付方式和明细 (Payment Detail),这一步好比我们在某宝上购物选择微信,支付宝,花呗等方式支付。

Place Order 点击后,成功生成订单,得到订单 ID.

总结一下,手动下单的流程可以分成这五步:

(1) 创建一个购物车 Shopping Cart
(2) 给该购物车里添加产品
(3) 给该购物车维护发货地址
(4) 给该购物车维护支付明细
(5) 执行下单操作,成功生成订单

搞清楚流程之后,接下来需要找到每个步骤分别调用哪些 API 来实现。

登录 SAP 官网 https://api.sap.com, 根据关键字 Commerce Cloud 搜索,很容易就能找到所有需要使用的 API:

Jerry 写了一个 nodejs 应用来演示这些 API 的用法。这个 nodejs 应用的完整代码在 Jerry 的 github 上。

执行这个应用,在第 20 行的回调函数里会打印出成功创建的订单 ID:

根据这个 ID 到 Commerce Cloud 的 backoffice 里,能查找到成功创建的订单:


前面说到手动下单需要 5 个步骤,而 Jerry 项目文件里有七个 step.js, 多出来的两个步骤,一个是获取 Access Token,另一个是设置购物车的 Delivery Mode. 前者是后续调用所有 API 的基础,而后者完成的逻辑,当我们在浏览器里手动下单时,Commerce Cloud 应用会自动帮我们设置,但是用 API 的方式下单时,需要我们显式调用设置 Delivery Mode 的 API, 因此最后一共需要 7 个步骤才能完成订单的创建。

获取 Access Token 的步骤,仍然是采用常规的 OAuth 认证,通过 client id 和 client secret 去换取 Access Token.

我们首先需要在 Commerce Cloud 上创建一个 OAuth Client,维护 Client ID, Client Secret, 密码,token 刷新间隔,相关权限等信息:

然后在 step1_get_token.js 里,通过 OAuth Client 维护的这些信息发一个 POST 请求到 OAuth endpoint 换取 Access Token.

因为隐私原因,Jerry 没有把 urlconfig.js 上传到 github 上,只上传了一个 urlconfigTemplate.js, 请大家在使用这个 nodejs 应用之前,把 urlconfigTemplate.js 里的以左右尖括号标识的占位符替换成实际值,然后重命名成 urlconfig.js 即可。

要获取更多 Jerry 的原创文章,请关注公众号 ” 汪子熙 ”:

退出移动版