我(不幸的是)我必须将客户端应用程序编写为prestashop驱动的网站的前端。我需要通过url webservice对资源执行所有CRUD操作,我仍然坚持创建和更新。我很惊讶地发现网上有几个例子,因为prestashop应该是一个广泛使用的cms。但是,到现在为止我来了:
GET http://www.myshop.com/api/myresource/id
获取具有给定id或
的资源的xmlGET 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请求参数中给予字段值的夫妻没有运气,我收到内部服务器错误。不,我没有直接访问服务器所以我不知道抛出了什么错误,我希望没有麻烦的网站维护者可以解决,我想保存我的弹药。
我在网上找到的唯一有用的资源是this one,我还查看了其他问题,并且这些问题中的建议链接没有任何帮助。
答案 0 :(得分:2)
如果您编辑config / config.inc.php并添加以下内容,您将能够看到响应中的错误(错误)(1by1,当您尝试找出创建失败的原因时,这非常令人沮丧)。完成后,请记得注释掉该行。
/*DEBUGGING ON*/
ini_set('display_errors', 'on');
您还需要确保使用 xml = <prestashop>......</prestashop>
在POST / PUT操作中添加数据(我正在为我的客户端使用C#,因此可能不需要PHP)
如果您使用?schema=synopsis
来获取空白元素,请确保浏览XML中的任何元素作为占位符并将其删除..例如,您的(产品)将被破坏但是如果你不这样做,那就是工作。
我还在我的代码中添加了在XML的初始传递中它完全遍历树,查找具有属性not_filterable
的任何内容并删除这些节点(再次没有太多文档可用来知道这是否是正确的事情)。
编辑:在基于语言的元素中还有另外一点需要注意,请确保使用CDATA作为元素。
我刚刚通过执行此操作生成了我的产品,所以我希望它有所帮助。我还没有执行现有的更新。
更新:我已经更新到Prestashop的1.5.4.1并在我的案例中开始更新资源产品
更新资源
URI:http://site/api/products/1
使用Method = "PUT"
内容类型= "text/xml"
确保删除所有设置了'not_filterable'属性的元素。 (我不明白为什么,但如果你不这样做就不行了)
删除资源
URI:http://site/api/products/1
使用Method = "DELETE"
内容类型= "application/x-www-form-urlencoded"
我发现你不需要任何身体,所以你可以将ContentLength设置为0。并且probaly也不需要设置内容类型,但它可以工作。
答案 1 :(得分:1)
我在源代码prestashop / webservice / dispatcher.php中找到了答案,没有必要将字段/值设置为http参数,而是传递整个xml,至少包含所有必填字段,如果使用帖子到创建一个新记录,或者只是在请求put时想要更新的字段,所以
http://www.myshop.com/api/myresource/?xml=myXmlString
答案 2 :(得分:-2)
如果你查看文档,你可以要求一个空白的xml
文件,其中包含每个资源的所有字段。你必须这样做:
http://mystore.com/api/[resource name]?schema=blank
然后,如果您需要有关字段的更多信息(因为某些字段是必需的),请执行以下操作:
http://mystore.com/api/[resource name]?schema=synopsis