You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:调用SAP_COM_0002 API在S/4HANA Cloud创建日记账分录遇401未授权

解决S/4HANA Cloud中调用SAP_COM_0002 API创建日记账分录时的401未授权错误

我之前帮不少开发者处理过类似的S/4HANA Cloud API授权问题,看到你调用POST日记账分录的API时遇到401错误,但GET PO的API能正常运行,咱们可以从以下几个关键方向排查解决:

1. 先确认请求格式是否正确(大概率是这里出问题!)

你提供的请求体是JSON格式,但SAP_COM_0002对应的SOAP服务只接受XML格式的请求。SOAP服务的Content-Type需要设置为text/xml;charset=UTF-8,而非application/json。

给你一个适配你请求内容的XML示例:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:glob="http://sap.com/xi/SAPGlobal20/Global">
   <soapenv:Header/>
   <soapenv:Body>
      <glob:JournalEntryBulkCreateRequest>
         <MessageHeader>
            <CreationDateTime>2018-05-27T12:50:30.45+01:00</CreationDateTime>
         </MessageHeader>
         <JournalEntryCreateRequest>
            <MessageHeader>
               <CreationDateTime>2018-05-27T12:50:30.45+01:00</CreationDateTime>
            </MessageHeader>
            <JournalEntry>
               <OriginalReferenceDocumentLogicalSystem/>
               <OriginalReferenceDocumentType>BKPFF</OriginalReferenceDocumentType>
               <OriginalReferenceDocument/>
               <BusinessTransactionType>RFBU</BusinessTransactionType>
               <AccountingDocumentType/>
               <DocumentHeaderText>Header Value</DocumentHeaderText>
               <CompanyCode>US01</CompanyCode>
               <CreatedByUser>CB9980000010</CreatedByUser>
               <DocumentDate>2018-05-27</DocumentDate>
               <PostingDate>2018-05-27</PostingDate>
               <Item>
                  <GLAccount>0021517000</GLAccount>
                  <AmountInTransactionCurrency>
                     <Amount>1200.00</Amount>
                     <CurrencyCode>USD</CurrencyCode>
                  </AmountInTransactionCurrency>
                  <DocumentItemText>Text1</DocumentItemText>
               </Item>
               <Item>
                  <GLAccount>0010010000</GLAccount>
                  <AmountInTransactionCurrency>
                     <Amount>-1200.00</Amount>
                     <CurrencyCode>USD</CurrencyCode>
                  </AmountInTransactionCurrency>
                  <DocumentItemText>Text2</DocumentItemText>
               </Item>
            </JournalEntry>
         </JournalEntryCreateRequest>
      </glob:JournalEntryBulkCreateRequest>
   </soapenv:Body>
</soapenv:Envelope>

同时要确保请求URL替换成你的实际租户域名,比如https://your-tenant.s4hana.ondemand.com/sap/bc/srt/scs/sap/journalentrycreaterequestconfi(你之前的URL里的占位符https://:/要补全)。

2. 检查API专属的权限配置

GET PO的API和POST日记账分录的API所需权限是不同的,即使前者能正常运行,后者需要额外的权限:

  • 确保你的通信用户被分配了SAP_CORE_BC_EXT_JRN业务角色模板,或者自定义角色包含以下关键权限对象:
    • F_BKPF_BUK:控制公司代码层面的记账权限,要允许在US01公司代码下操作
    • F_BKPF_BLA:控制凭证类型的权限,确保包含你使用的凭证类型(这里你留空了,系统会用默认值,但权限要覆盖)
  • 检查S/4HANA Cloud的通信场景配置:确认SAP_COM_0002(Post Journal Entries from External Systems)这个通信场景已经被分配给你的通信系统和用户。

3. 验证Postman中的认证设置

虽然GET API正常,但要确保POST请求的认证方式完全一致:

  • 如果用Basic Auth:确认用户名和密码是正确的通信用户凭证,没有拼写错误
  • 如果用OAuth2:确保获取的Token包含API_JOURNALENTRYCREATECONFIGURATION_SRV相关的Scope,并且Token未过期
  • 注意:SOAP服务的认证信息要放在请求的Authorization头里,Postman中可以在Authorization标签直接配置,不需要手动拼接头信息。

4. 云平台应用额外检查(如果使用云平台调用)

如果你是通过SAP云平台应用调用,还要确认:

  • 云平台中的目的地(Destination)配置正确:URL、认证方式、用户密码都和Postman中一致
  • 云平台和S/4HANA Cloud的信任关系已正确建立,目的地的权限已开放给你的应用

内容的提问来源于stack exchange,提问作者William

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:33:28