跳到主要内容
← 返回博客

本文涉及的模块: 工具箱

用服务密钥测试 SAP CPI HTTPS iFlow,然后跟踪这次调用

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

用服务密钥测试 SAP CPI HTTPS iFlow,然后跟踪这次调用

带有 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 在日志查看器中打开该消息;若无法从端点推断设计器主机,请在环境中设置「用于“在监控中打开”的租户(设计器主机)」。

跟踪这次调用

  1. 在设计器中打开 iFlow,通过「Kitegra 工具」按钮打开「消息」,并把「Trace:关闭」切换为开启。
  2. 在 Runner 中点击「发送」,或用 curl 调用端点。
  3. 消息会出现在「消息」面板中,并带有 TRACE 标记。选择「在图上」。
  4. 点击一个着色的步骤,查看它之前的消息体、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 数。

无需离开设计器即可处理 iFlow

将 Kitegra 添加到 Chrome 或 Microsoft Edge。免费开始,无需账户。