跳到内容
All articles
Setup

企业级 ERP:SAP 和 NetSuite

分步指南:将 Sellio 与您的 SAP(OData)或 NetSuite(REST)进行双向连接,把账户、订单和发票发送到 ERP,并接收返回的事件(发票已付款、订单/客户已更新)。自带模型:ERP 和凭据都是您自己的。

该集成将 Sellio 连接到您的企业级 ERP,可以是通过 OData 的 SAP,也可以是通过 REST Record Service 的 NetSuite,支持深度双向同步。它是对通用“ERP / 账单”连接器(该连接器只向端点发起简单的 POST 请求)的补充:这里直接与每个平台的类型化 API 通信,使用各自真实的认证方式。自带模型:账户和凭据都是您自己的,我们这边不产生任何费用。默认一切都处于静默状态:在您完成配置并激活之前,不会发送或接收任何内容。密钥会加密存储,且不会再次显示。

每个方向发生的情况:在发送方向(Sellio → ERP)上,当您触发(或某个自动化触发)时,CRM 会用该 ERP 的“语言”构建记录(SAP 中的 OData EntitySet;NetSuite 中的 recordType),并发起经认证的 POST 请求。在接收方向(ERP → Sellio)上,您的 ERP 会在每个事件(发票已付款、订单已更新、客户已更新)发生时调用 Sellio 的 webhook URL;Sellio 会按金额+货币对账一笔待处理付款(当事件是已付款的发票/订单时),或在对应联系人上记录一条活动。重复的事件会通过外部 id 去重。

💡 请根据您使用的平台选择对应路径。您可以只配置 SAP、只配置 NetSuite,或两者都配置。每个平台在“设置 → 集成”中都有各自的卡片和各自的 webhook URL。

1. 前提条件

SAP(S/4HANA Cloud、通过 SAP Gateway 的 S/4HANA 本地部署,或 SAP BTP):您需要为将要同步的实体发布一个 OData 服务(例如,用于账户/联系人的标准服务 API_BUSINESS_PARTNER、用于订单的 API_SALES_ORDER_SRV、用于发票的 API_BILLING_DOCUMENT_SRV),以及用于调用它的凭据。有两种凭据方式:(a) 使用基本认证的通信用户,或 (b) SAP BTP 上的 OAuth 2.0 客户端(客户端凭据模式)。权限方面:该用户/客户端需要在所选的 OData 实体上具有创建(POST)权限。

NetSuite(SuiteTalk REST):您的账户需要启用“SuiteTalk(SOAP and REST Web Services)”和“Token-Based Authentication”功能,并且需要一个具有相应角色的用户,该角色对将要同步的对象(客户、销售订单、发票)拥有“Lists/Records”权限,以及“REST Web Services”权限(在 Setup 下)。您需要创建一个集成记录(Consumer Key/Secret)和一个访问令牌(Token ID/Secret)。

  • 您必须是 Sellio 管理员(拥有管理设置的权限)才能保存并激活该连接器。
  • 请准备好相关的 URL/ID:在 SAP 中是 OData 服务的基础 URL;在 NetSuite 中是您的账户 ID(例如 1234567,沙盒环境为 1234567_SB1)。

2. 在服务商处(SAP):暴露 OData 服务并创建凭据

  1. 发布/激活所需实体的 OData 服务。在 S/4HANA 本地部署中,使用事务代码 /IWFND/MAINT_SERVICE 添加并激活该服务(例如 API_BUSINESS_PARTNER);记下生成的基础 URL(类似 https://yourhost:44300/sap/opu/odata/sap/API_BUSINESS_PARTNER)。在 S/4HANA Cloud 中,该服务已预先发布,请从对应的通信安排(Communication Arrangement)中复制服务 URL。
  2. 创建通信凭据。对于基本认证:在“通信管理”→“维护通信用户”中,创建一个具有用户名和密码的通信用户;然后在“通信安排”中,将该用户与暴露 OData 服务的通信场景关联。对于 OAuth 2.0(BTP):创建一个服务实例,并记下客户端 ID、客户端密钥和令牌 URL(端点 /oauth/token)。
  3. 确保该用户/客户端对相应实体具有 POST(创建)权限。可以先用同一凭据在浏览器/Postman 中快速测试集合的 GET 请求,以确认访问权限正常。

2. 在服务商处,NetSuite(集成记录 + 访问令牌 TBA)

  1. 启用相关功能:Setup → Company → Enable Features → SuiteCloud 选项卡 → 勾选“SOAP Web Services”和/或“REST Web Services”以及“Token-Based Authentication”。保存。
  2. 创建集成记录:Setup → Integration → Manage Integrations → New。为其命名(例如“Sellio CRM”),保持“Token-Based Authentication”被勾选,如果只使用 TBA,则取消勾选“TBA: Authorization Flow”和“OAuth 2.0”,然后保存。NetSuite 只会显示一次 Consumer Key 和 Consumer Secret,请立即复制两者(不会再次显示)。
  3. 创建访问令牌:Setup → Users/Roles → Access Tokens → New。选择 Application Name(您创建的集成记录)、User 以及 Role(具有 Records 权限 + “REST Web Services”权限的角色)。保存。NetSuite 只会显示一次 Token ID 和 Token Secret,请立即复制两者。
  4. 记下您的账户 ID:Setup → Company → Company Information(“Account ID”字段),例如生产环境为 1234567,沙盒环境为 1234567_SB1。
💡 请妥善保存 Consumer Key/Secret 和 Token ID/Secret:NetSuite 不会第二次显示它们。如果丢失,您必须重新生成。

3. 在 Sellio 中:粘贴凭据并激活

  1. 打开“设置 → 集成”,找到“SAP(企业级 ERP)”或“NetSuite(企业级 ERP)”卡片。
  2. SAP:在“OData 服务 URL”中,粘贴服务的基础 URL(不带末尾斜杠,也不带 EntitySet 名称,因为 Sellio 会自动附加正确的 EntitySet)。在“认证类型”中,选择 Basic(并粘贴用户名 + 密码)或 OAuth 2.0(并粘贴令牌 URL + 客户端 ID + 客户端密钥)。
  3. NetSuite:在“账户 ID”中,粘贴您的 ID(例如 1234567 或 1234567_SB1)。在“认证类型”中,选择基于令牌的认证(TBA),并粘贴 Consumer Key、Consumer Secret、Token ID 和 Token Secret。(如果您更倾向使用 OAuth 2.0,请选择该选项并粘贴访问令牌。)
  4. 如果您要将 ERP 的事件回传给 Sellio,请填写“Webhook 密钥”。这是接收方向的必填项:出于安全考虑(事件可能会结算一笔付款),Sellio 只接受携带此密钥/签名的 webhook。没有它,接收会被拒绝(参见第 4 步)。加密存储。
  5. 点击“保存连接器”。凭据会加密存储。然后点击“激活”。只有在连接器被激活后,发送和接收才会生效。

要接收 ERP 事件:保存后,使用“生成 webhook URL”并复制该 URL(格式为 https://app.../api/inbound/erp/YOUR_TOKEN)。将该 URL 粘贴到您 ERP 的 webhook 目标中:在 SAP 中,粘贴到自动化/中间件(Event Mesh、SAP BTP,或一个执行 POST 的作业)中;在 NetSuite 中,粘贴到 User Event Script/RESTlet 或自动化工具(SuiteFlow + 脚本)中,由其执行 POST 事件。SAP 还是 NetSuite 会通过令牌本身来识别,因此 URL 中无需选择服务商。

4. 如何测试

  1. 在连接器已激活的情况下,点击卡片上的“发送测试记录”。Sellio 会构建一个虚构账户(“Sellio CRM”连接测试),并将其发送到您的 ERP。
  2. 在 ERP 中检查:在 SAP 中,在相应实体中查找新创建的 Business Partner;在 NetSuite 中,在 Lists → Relationships → Customers 下查找新的 Customer。
  3. 如果显示“测试记录已发送到 ERP”,说明认证和端点均正确。之后,若要发送真实记录,请从 CRM 记录(账户、联系人、订单、商机或发票)触发发送,Sellio 会使用相同的路径。
  4. 要测试接收:在 ERP 中生成(或模拟)一个事件(例如,将某张发票标记为已付款),然后在 Sellio 中检查是否有一笔金额相同的待处理付款被对账,或对应联系人上是否出现了一条活动。
💡 测试发送不会向您的 CRM 写入任何内容。它只是调用 ERP 以验证连接。发送真实记录时会按 id 获取该记录,并遵循您的权限设置。

5. 故障排查

  • 401(未授权):凭据错误或已过期。SAP Basic → 检查通信用户的用户名/密码;SAP OAuth → 检查客户端 ID/密钥以及令牌 URL;NetSuite TBA → 检查 Consumer Key/Secret 和 Token ID/Secret(多一个或少一个字符都会使签名失效)。请重新粘贴这些密钥(出于安全考虑,服务器不会再次返回它们)。
  • TBA 签名无效(NetSuite):基于令牌的认证使用带 HMAC-SHA256 的 OAuth 1.0a;签名取决于方法、精确的 URL(包括查询参数)以及账户 ID(realm)。请确认账户 ID 正确(沙盒环境带 _SB1 后缀),且四个值(Consumer Key/Secret、Token ID/Secret)粘贴时没有多余空格。如果您在 NetSuite 中重新生成了令牌,请同步更新 Sellio 中的值。
  • 403(禁止访问):凭据可以认证成功,但角色/用户没有创建该记录的权限。在 NetSuite 中,请检查角色权限(Lists/Records + “REST Web Services”);在 SAP 中,请检查该 OData 实体上的 POST 授权 / 通信场景。
  • 实体/recordType 未找到(404):在 SAP 中,OData 服务 URL 错误,或该服务未被激活。请确认基础 URL(不含 EntitySet),并在 /IWFND/MAINT_SERVICE 中激活该服务。在 NetSuite 中,默认的 recordType 可能与您的不匹配,自定义的账户/订单/发票可能需要不同的 recordType(请联系支持团队调整映射)。
  • 字段被拒绝:SAP 和 NetSuite 对属性名称的要求都很严格。Sellio 会发送一组保守的常用字段(姓名、邮箱、电话、公司、金额、货币、参考号)。如果您的 ERP 要求额外的必填字段(例如 SAP 中的 BP Category,或 NetSuite 中的 subsidiary),则需要进行映射,请在配置中调整映射或联系支持团队。
  • Webhook 未到达(接收方向):请确认连接器已激活(未激活的连接器 webhook 会返回 404)、粘贴到 ERP 中的 URL 是完整的(包含令牌),并且如果您设置了“Webhook 密钥”,ERP 会在 X-Sellio-Secret 请求头中发送该密钥,或在签名请求头中发送请求体的 HMAC-SHA256。否则响应会是 401。

Open this article inside the system

Read it and want to see it working?

The account is free and the whole manual is available inside the system, with an assistant that answers from this very content.

免费创建账户
企业级 ERP:SAP 和 NetSuite · Sellio