什么是Magento 2“ Web API集成”


9

根据开发人员文档

集成样式的Web API使单个Web API调用能够一次运行多个服务,从而实现更有效的集成。在目录中可以看到这种行为的一个示例,其中一个Web API调用可以创建产品。如果您的有效负载包括库存对象和媒体对象,则框架还将在该API调用中创建产品的库存和媒体。

...

在Magento Admin上创建新的集成。要创建集成,请单击系统>集成>添加新集成。确保限制集成可以访问的资源。

集成到底是什么还不是很清楚。第一个文档片段指示集成是(也许是)一种在单个HTTP请求中链接多个API调用的方法。但是,没有语法示例。另外,如果我使用第二个文档摘要中的信息,则可以创建一个集成对象,但是尚不清楚我该怎么做。同样,深入到代码中,集成对象似乎使用了不同的身份验证代码路径。

是否有人清楚这些“ API集成”是什么以及它们如何工作?

Answers:


7

Magento 2中有4种类型的用户(请参见\ Magento \ Authorization \ Model \ UserContextInterface),在通过Web API发出请求时可以使用其中任何一种:

  • 匿名用户(来宾)。如果未使用令牌或cookie进行请求,则认为用户是匿名的
  • 顾客。客户令牌或cookie必须与请求一起传递
  • 管理员。管理员令牌或cookie必须存在
  • 整合。集成访问令牌应以OAuth 2.0样式传递,或者应使用OAuth 1.0a风格的使用者密钥,使用者密钥,访问令牌,访问令牌秘密对请求进行正确签名

可以在创建集成System > Integration > Add New Integration,它可以被赋予与任何Admin用户相同的权限(ACL树是相同的)。Web API请求可以代表admin和Integration提出。与管理员用户的集成不同之处在于,第三方可以使用OAuth握手检索Web API凭据。

OAuth握手允许自动与多用户第三方系统集成(在第三方支持时):

  • 在集成创建期间,填写可选字段,Callback URL并且Identity Link URL(两者均应由第三方系统提供)
  • 当您尝试激活集成时,将触发OAuth握手
  • Magento将使用服务器到服务器的POST请求将一些数据发送到回调URL。身份链接网址(第3方系统上的登录页面)将在弹出窗口中打开,并将发送一些GET参数
  • 成功验证用户凭据后,第3方将向Magento请求请求令牌,然后将其交换为访问令牌。它还会根据自己的记录将当前的Magento实例与用户帐户相关联。也就是说,多个Magento商家可以在同一第三方CRM中拥有帐户,并且每个商家的帐户都将绑定到他的Magento实例
  • 发出的访问令牌可用于向Magento Web API发出请求。该令牌将与Magento集成记录关联,并将有权访问在API集成编辑页面的标签中选择的资源

关于立即调用多个服务的快速说明,此功能被称为聚合API,与Integration用户类型没有任何共同之处。


如我错了请纠正我。但是Magento 2身份验证中没有用户密钥。Docs明确指定M2实施两腿式身份验证过程。请求和访问。如此处所述devdocs.magento.com/guides/v2.2/get-started/authentication/…–
vitoriodachef

2

这里的集成是集成商和开发人员使用通过Magento API与Magento系统通信的Web服务的方式的场景。他们可以调用Magento允许管理员在“新集成表格”中配置的一项或多项服务(在该屏幕中向下滚动以选择特定的API或全部选中)

由于安全问题,Magento仅允许通过以下三种身份验证之一进行外部授权请求:-基于令牌的身份验证-基于OAuth的身份验证-基于会话的身份验证

使用任何类型的身份验证,集成商和开发人员都必须在Magento中注册用户帐户。使用用户帐户,您可以获得令牌ID,您需要将该令牌ID与请求一起发送给Magento。

例如,假设您已经具有用户帐户和集成信息。现在,您将请求从Magento获取令牌。我向您展示了使用第一类身份验证(基于令牌的身份验证)的代码段:

curl -X POST "https://localhost/magento/index.php/rest/V1/integration/admin/token" \
     -H "Content-Type:application/json" \
     -d '{"username":"user_example", "password":"123123q"}'

如果成功,您将获得一个令牌,例如 "asdf3hjklp5iuytre"

现在,您可以通过调用Magento的API与Magento集成以请求数据

curl -X GET "http://localhost/magento/index.php/rest/V1/customers/2" \
     -H "Authorization: Bearer asdf3hjklp5iuytre"

最后,您可能会从Magento收到客户清单。例如,我使用curl命令,集成商和开发人员可以通过PHP,C#或其他语言来实现,以创建对服务网址的Web服务请求。

PS:SoapUI是发出服务请求进行测试的有用工具。

希望这可以帮助。


这似乎根本不涉及“系统”>“集成”>“添加新集成”中的“集成”对象。我想念什么吗?
艾伦·风暴

抱歉,我只是关注集成商和开发人员与Magento集成的方式。使用Integration对象,管理员可以自定义允许访问的API,而不必依赖Magento用户角色。第三方必须使用基于OAuth的身份验证作为通过Integration对象中的使用者令牌和秘密令牌访问Magento Web API的方法之一。见devdocs.magento.com/guides/v2.0/get-started/authentication/...
疃阮

当我在第一个curl命令之后使用第二个curl命令时,得到了“ {{message” ::没有这样的实体,其中%fieldName =%fieldValue”,“ parameters”:{“ fieldName”:“ customerId”,“ fieldValue”:2}} “此消息是什么意思?
Rishabh Rk Rai
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.