用服务密钥测试 SAP CPI HTTPS iFlow,然后跟踪这次调用
使用 Process Integration Runtime 服务密钥中的 OAuth 客户端凭据调用 SAP CPI HTTPS 端点,找到这次调用生成的消息,并逐步跟踪它。

带有 HTTPS 发送方的 iFlow 很容易部署,调用起来却出奇地麻烦:您需要正确的端点、来自正确服务密钥的令牌,有时还需要 CSRF 令牌,之后还得在监控中找到这次调用生成的消息。
本文针对 SAP Cloud Integration(SAP CPI)走完整个闭环:需要准备什么、如何获取令牌并调用端点、如何找到生成的消息,以及如何跟踪它。
需要准备什么
- 一个已部署、带有 HTTPS 发送方通道的 iFlow。它的 Address(例如
/orders/create)会成为端点的一部分。 - 端点 URL:运行时主机后跟
/http和该地址。监控的 Manage Integration Content 会为已部署的 iFlow 列出它。 - 一个使用服务计划
integration-flow、带有可发送消息角色的 Process Integration Runtime 服务实例,以及该实例的一个包含客户端 ID 和客户端密钥(client secret)的服务密钥。 - 一个 iFlow 能够接受的测试负载。
获取令牌并调用端点
服务密钥包含这次调用所需的一切:客户端 ID 和客户端密钥、令牌服务的 URL,以及运行时主机:
{
"oauth": {
"clientid": "<client id>",
"clientsecret": "<secret>",
"url": "https://<subaccount>.it-cpi<nn>-rt.cfapps.<region>.hana.ondemand.com",
"tokenurl": "https://<subaccount>.authentication.<region>.hana.ondemand.com/oauth/token"
}
}请像对待密码一样对待客户端密钥:不要把服务密钥放进共享文件、工单和聊天中。
调用端点并读取响应
这次调用需要两个请求:先用 client credentials 授权方式获取令牌,再用该令牌进行调用本身:
# 1. Get an access token with the client credentials of the service key
curl -X POST "<tokenurl>" \
-u "<clientid>:<clientsecret>" \
-d "grant_type=client_credentials"
# 2. Call the iFlow's HTTPS endpoint with the token
curl -i -X POST "<url>/http/orders/create" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d @order.json
# The response headers include SAP_MessageProcessingLogID: the Message ID of this call.- 401:令牌缺失、已过期,或来自另一个子账户。
- 403:服务密钥的角色不允许发送消息,或者 HTTPS 发送方要求 CSRF 令牌。对于测试端点,您可以在通道中关闭 CSRF 保护,或者先获取一个令牌。
- 404:地址错误,或者 iFlow 没有部署。
- 500:iFlow 失败;消息处理日志会说明在哪里失败。
无论状态如何,响应 header SAP_MessageProcessingLogID 都会给出这次调用的 Message ID,凭它就能打开该消息:请参阅按 Message ID 查找消息。
在浏览器中用 HTTP Runner 完成
Kitegra 的 Toolbox 中有一个用于调用 iFlow 端点的 HTTP Runner。请从扩展弹出窗口的「工具」视图中打开它。
- 用「新建集合」和「新建请求」建立请求集合,支持 GET、POST、PUT、PATCH、DELETE 或 HEAD,查询参数、请求头,以及 JSON、XML、文本正文或文件。
{{variables}}和环境(dev、test、prod):用「新建环境」添加,或选「无环境」发送。标为「机密」的变量,其值只留在此浏览器中。- 认证:「来自集合」「无」「Basic」「Bearer 令牌」或「OAuth2 客户端凭据(服务密钥)」;选最后一项时粘贴「服务密钥(Process Integration Runtime)」的 JSON,令牌会自动获取。需要带 client secret 的密钥;不支持基于证书的密钥。
- 「测试」检查响应(「状态等于」「正文包含」「JSONPath 等于」「XPath 等于」),「提取」把响应中的值保存到变量,「运行集合」按顺序发送整个集合。
- 「导入」→「Postman 集合」可导入 Postman 集合,参见从 Postman 或 OpenAPI 到 HTTP 接收方;在「数据集」标签页,「逐条发送消息」会逐条发送测试消息生成器中某个数据集的消息。
点击「发送」之前不会发出任何内容,你的 SAP Cookie 也从不发送。Runner 只调用 *.hana.ondemand.com 下的主机。调用后,「在监控中打开」会按 SAP_MessageProcessingLogID 在日志查看器中打开该消息;若无法从端点推断设计器主机,请在环境中设置「用于“在监控中打开”的租户(设计器主机)」。
跟踪这次调用
- 在设计器中打开 iFlow,通过「Kitegra 工具」按钮打开「消息」,并把「Trace:关闭」切换为开启。
- 在 Runner 中点击「发送」,或用 curl 调用端点。
- 消息会出现在「消息」面板中,并带有 TRACE 标记。选择「在图上」。
- 点击一个着色的步骤,查看它之前的消息体、header 和 exchange property。
逐步跟踪消息详细介绍了跟踪面板。
Kitegra 如何帮您
在 Kitegra 中,服务密钥、认证值和机密变量都保留在您的浏览器中。登录后,Runner 的集合和环境会与您的 Kitegra 账户同步,其中所有认证值和机密变量都会被移除。Runner 属于免费的 Toolbox;跟踪和日志查看器属于 Message Monitor。
Helper、Message Monitor、iFlow Inspector 和 iFlow Docs 各自统计您使用它们的 iFlow 数:没有 Kitegra 账户时每个模块 5 个,Free 套餐 50 个,Starter 100 个,Pro 300 个;Business 不限。Toolbox 和工作区附加功能免费。比较各套餐。
在下一个 iFlow 中试试
了解 Kitegra 为 SAP Integration Suite 设计器增加了哪些功能,或在 Kitegra 的其他 Chrome 扩展旁查看它。
常见问题
如何使用 OAuth 调用 SAP CPI HTTPS 端点?
用 client credentials 授权方式从服务密钥的令牌 URL 获取令牌,然后在调用端点时带上 header Authorization: Bearer 和该令牌。
我需要哪个服务密钥?
一个 Process Integration Runtime 实例的服务密钥,该实例使用服务计划 integration-flow,并带有可以发送消息的角色。
为什么我的 HTTPS iFlow 返回 403?
通常是服务密钥的角色不允许发送消息,或者 HTTPS 发送方要求 CSRF 令牌。
如何找到我的调用生成的消息?
读取响应 header SAP_MessageProcessingLogID:它就是这次调用的 Message ID。
HTTP Runner 把我的服务密钥保存在哪里?
保存在您的浏览器中。同步的集合从不包含认证值或机密变量。
HTTP Runner 免费吗?
免费。它属于 Toolbox,不计入您套餐的 iFlow 数。