求助:调用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
相关产品推荐
相关产品推荐

