4

我(不幸的是)必须编写一个客户端应用程序作为 prestashop 支持的网站的前端。我需要通过 url webservice 对资源执行所有 CRUD 操作,并且我坚持创建和更新。由于 prestashop 应该是广泛使用的 cms,我很惊讶地发现网络上可用的示例很少。但是,直到现在我才发现:

GET http://www.myshop.com/api/myresource/id

获取具有给定 ID 的资源的 xml 或

GET http://www.myshop.com/api/myresource/?display=full&filter[field]=[value]

过滤结果。我写这篇文章只是因为我不得不与谷歌斗争以获得这些信息,这些过滤器的东西可能会在未来帮助某人。

DELETE http://www.myshop.com/api/myresource/id

删除资源(我想过滤器也可以在这里工作,但到目前为止还没有尝试过)

现在,有人知道如何创建和更新资源吗?我试过了

POST/PUT http://www.myshop.com/api/myresource/

在没有运气的情况下在 http 请求参数中给出几个字段值,我收到内部服务器错误。不,我无法直接访问服务器,所以我不知道抛出了什么错误,我希望可以在不打扰网站维护人员的情况下解决它,我想节省我的弹药。

我在网上找到的唯一有用的资源是这个,我还查看了关于 SO 的其他问题,并且这些问题中的建议链接没有帮助。

4

3 回答 3

2

如果您编辑 config/config.inc.php 并添加以下内容,您将能够在响应(错误)中看到错误(当您尝试找出创建失败的原因时,1by1 非常令人沮丧)。完成后请记住注释掉该行。

/*DEBUGGING ON*/
ini_set('display_errors', 'on'); 

您还需要确保在 POST/PUT 操作中使用xml=<prestashop>......</prestashop>预先添加数据(我的客户端使用 C#,因此 PHP 可能不需要这样做)

如果您使用?schema=synopsis来获取空白,请确保您通过 XML 中作为占位符的任何元素并将其删除。例如,您的(产品)将被破坏,但如果您不这样做,则可以工作.

我还在我的代码中添加了,在 XML 的初始传递中,它完全遍历树,查找具有该属性的任何内容not_filterable并删除这些节点(再一次没有太多文档可用于知道这是否是正确的做法)。

编辑:基于语言的元素中的另一件事要注意,请确保您使用 CDATA 作为元素。

我刚刚通过执行此操作成功地生成了我的产品,所以我希望它有所帮助。我还没有执行现有的更新。

更新:我已经更新到 Prestashop 的 1.5.4.1 并开始在我的情况下更新资源产品

更新资源

网址:http://site/api/products/1

使用方法 ="PUT"

内容类型 ="text/xml"

确保删除任何设置了“not_filterable”属性的元素。(我不明白为什么,但如果你不这样做,它就不起作用)

删除资源

网址:http://site/api/products/1

使用方法 ="DELETE"

内容类型 ="application/x-www-form-urlencoded"

我发现您不需要任何正文,因此您似乎可以将 ContentLength 设置为 0 。并且可能也不需要设置内容类型,但它可以工作。

于 2013-05-16T07:20:40.953 回答
1

我在源代码 prestashop/webservice/dispatcher.php 中找到了答案,如果使用帖子创建新的,则无需将字段/值设置为 http 参数,而是传递一个至少包含所有必需字段的整个 xml记录,或者只是在请求看跌时要更新的字段,所以

http://www.myshop.com/api/myresource/?xml=myXmlString
于 2013-05-15T17:55:04.273 回答
-2

如果您查看文档,您可以要求一个空白xml文件,其中包含每个资源的所有字段。你所要做的 :

http://mystore.com/api/[resource name]?schema=blank

然后,如果您需要有关字段的更多信息(因为有些是强制性的),只需执行以下操作:

http://mystore.com/api/[resource name]?schema=synopsis
于 2013-05-14T20:47:27.467 回答