Prestashop通过url webservice api创建和更新资源


prestashop create and update resources via url webservice api

我(不幸地)不得不编写一个客户端应用程序作为prestshop支持的网站的前端。我需要通过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

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

现在,有人知道如何创建和更新资源吗?I tried
POST/PUT http://www.myshop.com/api/myresource/

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

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

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

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

您还需要确保在POST/PUT操作中使用xml= <prestashop>......</prestashop>(我的客户端使用c#,因此PHP可能不需要)

如果您使用?schema=synopsis来获得空白的,请确保您遍历XML中作为占位符的任何元素并删除它们。例如,如果你不这样做,你的(产品)就会坏掉,但也能工作。

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

在基于语言的元素中,还有一件值得注意的事情,确保你对这些元素使用了CDATA。

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

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

更新资源

URI: http://site/api/products/1

使用方法= "PUT"

content type = "text/xml"

确保你删除了所有设置了'not_filterable'属性的元素。(我不明白为什么,但如果你不这样做,它就行不通)

删除资源

URI: http://site/api/products/1

使用方法= "DELETE"

content type = "application/x-www-form-urlencoded"

我发现你不需要任何主体,所以你可以设置ContentLength为0似乎。可能也不需要设置内容类型,但它可以工作。

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

http://www.myshop.com/api/myresource/?xml=myXmlString

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

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

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

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