如何使用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的原创文章,请关注公众号"汪子熙":

如何使用API的方式消费SAP Commerce Cloud的订单服务的更多相关文章
- 如何通过Restful API的方式读取SAP Commerce Cloud的Product图片
需求:我在SAP Commerce Cloud的backoffice里给某product维护了一些图片: 分别位于Normal,Thumbnails和Others等字段: 现在我想通过Restful ...
- 如何通过Restful API的方式读取SAP Commerce Cloud的Product Reference
从SAP官网上找到api的说明: https://api.sap.com/api/commerce_services/resource api endpoint: /rest/v2/electroni ...
- Step by Step to create orders by consuming SAP Commerce Cloud Restful API
Recently Jerry is working on an integration project about creating orders in Wechat platform by cons ...
- 继收购Magento十个月,Adobe推出Commerce Cloud商务云服务
去年 5 月,软件巨头 Adobe 以 16.8 亿美元的价格,受过了 Magento .在经历了十个月的业务整合后,该公司终于推出了全新的 Commerce Cloud 商务云服务.据悉,其本质上是 ...
- 部署在SAP Cloud Platform CloudFoundry环境的应用如何消费SAP Leonardo机器学习API
Jerry的前一篇文章 如何在Web应用里消费SAP Leonardo的机器学习API 里介绍的例子是Neo测试环境的Web应用消费sandbox版本的机器学习API,url如下: https://s ...
- 如何在Web应用里消费SAP Leonardo的机器学习API
去年5月的时候,Jerry曾经写了一篇文章:使用Java程序消费SAP Leonardo的机器学习API,而最近另外做的一个项目,需要在Web应用里做同样的事情. 因为有了前一篇文章的铺垫,避免了很多 ...
- kafka直连方式消费多个topic
一个消费者组可以消费多个topic,以前写过一篇一个消费者消费一个topic的,这次的是一个消费者组通过直连方式消费多个topic,做了小测试,结果是正确的,通过查看zookeeper的客户端,zoo ...
- spring jwt springboot RESTful API认证方式
RESTful API认证方式 一般来讲,对于RESTful API都会有认证(Authentication)和授权(Authorization)过程,保证API的安全性. Authenticatio ...
- 配置Struts2及Struts2访问servlet api的方式
Struts2的起源与背景 在很长的一段时间内,在所有的MVC框架中,Struts1处于绝对的统治地位,无论是从市场的普及范围,还是具体的使用者数量. 其他MVC框架都无 法与其相比,作为一一款优秀的 ...
随机推荐
- mysql 如何减少InnoDB关闭时间
原文连接: https://www.percona.com/blog/2009/04/15/how-to-decrease-innodb-shutdown-times/ 有时,运行InnoDB的MyS ...
- 不使用BASE64Encoder、BASE64Decoder
BASE64Encoder/BASE64Decoder类在sun.misc包下,是sun公司的内部方法,后期有删除的潜在可能,建议使用apache commons.codec下的Base64替代. m ...
- TeslaManage 运行日志
“TeslaManage.exe”(Win32): 已加载“F:\TeslaManageProject\TeslaManage\x64\Debug\TeslaManage.exe”.已加载符号.“Te ...
- 数据分析入门——pandas之数据合并
主要分为:级联:pd.concat.pd.append 合并:pd.merge 一.numpy级联的回顾 详细参考numpy章节 https://www.cnblogs.com/jiangbei/p/ ...
- Linux中添加新硬盘后对硬盘的分区以及挂载
转自:https://www.linuxidc.com/Linux/2018-06/152958.htm 我将使用VM来进行模拟 先使用df看下我的电脑硬盘信息: df -h 可以看到只有一个sda1 ...
- 导入一个eclipse的java项目到IDEA报Cannot find JDK '1.7' for module 'TEST'
解决办法: 右键你的项目--------------->OPen module settings 将dependencies里面的module sdk改成你安装的java版本就可以了(比如我电脑 ...
- [LeetCode] 195. Tenth Line 第十行
Given a text file file.txt, print just the 10th line of the file. Example: Assume that file.txt has ...
- [LeetCode] 243. Shortest Word Distance 最短单词距离
Given a list of words and two words word1 and word2, return the shortest distance between these two ...
- mysql 的sql_model模式
原文地址:https://blog.csdn.net/baidu_19338587/article/details/59483954 MySQL的sql_mode合理设置 sql_mode是个很容易被 ...
- Spring的日志管理
一.spring的日志依赖 Logging是spring中唯一强制的外部依赖,spring中默认使用的日志是commons-logging,简称JCL,这里说的强制性,是因为在spring-core这 ...