这里有很多东西要解开。首先,我编辑了标题,因为我意识到虽然最终我的 REST 请求将被实现为 PHP 代码,但现在我已经将其剥离到 Postman 以测试 REST,所以我将其剥离为低和尽可能基本。我可以正式地说问题出在我的要求上。
基本上,我正在发出 POST 请求,并使用“新”OAuth 身份验证对沃尔玛 API 的 PUT 请求进行测试。听起来很宏伟。GET 在 Postman 和我的实际 PHP 代码中运行良好。POST 和 PUT 立即返回完全相同的错误,无论我做什么和如何做:400 Bad Request, Invalid URL。在我的 PUT 测试中,我之所以这样做是因为它是一个更简单、更快速的文本,需要梳理的 XML 更少,这是 HTML 标头中的确切响应:
<HTML>
<HEAD>
<TITLE>Invalid URL</TITLE>
</HEAD>
<BODY>
<H1>Invalid URL</H1>
The requested URL "http://%5bNo%20Host%5d/v3/inventory?", is invalid.
<p>
Reference #9.c9384317.1556319123.8c89b8dc
</BODY>
</HTML>
我已经通过我的服务器在 PHP 中进行了测试,并进入 Postman 以尝试找到我遇到的确切问题,并且 GET 请求运行良好。我每 15 分钟左右生成一个新令牌。我已经完成了......很多细微的变化,但是提要示例和请求的工作方式,我可以说我做的一切都是正确的。老实说,我认为我在这一点上失去了我的弹珠。
让我最沮丧的是 GET 有效。我的令牌正在工作。我的 OAuth 运行良好。GET 用于 Walmart API 的许多标头在 PUT/POST/GET 之间完全相同。这里的区别仅在于链接具有查询参数和 XML 被推入正文。编辑:我的意思是我的标题在 GET 和 POST 之间没有变化;我提供的唯一变化是 XML 在正文中发送,并且需要查询参数。这是在成功的 GET 和不成功的 400 错误请求 PUT/POST 之间发生变化的唯一事情。这让我相信我处理查询参数或我的 XML 的方式有问题,但考虑到在下面的示例中我复制/粘贴了 XML ......我不确定。它是我们目录中的现有项目,我知道这是事实。
我注意到我不太了解 Postman 是否存在问题,因为沃尔玛的 API 要求内容类型为 multipart/form-data。我注意到它在说明这一点时使用了“示例”一词,但是,如果它会接受其他内容,它通常会说“这个或这个”。但是,如果我将 Postman 中的 content-type 切换为 multipart/form-data,Body 会自动变为raw: text而不是raw: XML(application/xml)或 text/xml。如果我尝试将原始数据交换为这些类型,它会自动将我的内容类型转换为应用程序/xml,所以这有点...... hinky。
我没有通过代理。我已关闭全局代理配置并使用系统代理。请求超时设置为 0。没有任何客户端证书。我的意思是,GET 有效,并且我的令牌是通过外部 PHP 代码成功生成的(不是在 Postman 中,无法让它工作,说见鬼)。
标题
PUT URL: https://marketplace.walmartapis.com/v3/inventory?sku=0xyz0
授权
Bearer Token: Bearer Basic --insert token here--
WM_SVC.NAME: Walmart Marketplace
WM_QOS.CORRELATION_ID: randomString123
WM_SEC.ACCESS_TOKEN: --insert token here--
Accept: application/xml
Host: https://marketplace.walmartapis.com
Content-type: multipart/form-data
正文原始:XML(应用程序/xml)
<?xml version="1.0" encoding="UTF-8"?>
<inventory xmlns="http://walmart.com/">
<sku>0xyz0</sku>
<quantity>
<unit>EACH</unit>
<amount>7</amount>
</quantity>
<fulfillmentLagTime>1</fulfillmentLagTime>
</inventory>
准确响应
400 Bad Request
<HTML>
<HEAD>
<TITLE>Invalid URL</TITLE>
</HEAD>
<BODY>
<H1>Invalid URL</H1>
The requested URL "http://%5bNo%20Host%5d/v3/inventory?", is invalid.
<p>
Reference #9.c9384317.1556320429.8ca752c4
</BODY>
</HTML>
请发送帮助,我想我已经盯着这个很久了,我要离开这个物理世界了。沃尔玛最近将他们的身份验证更新为 OAuth,他们模糊地表示他们的旧身份验证将被弃用并逐步淘汰,所以我显然想尝试让它发挥作用。我试图尽可能地复制粘贴所有内容。该 XML 几乎是从他们的示例中逐字复制粘贴的,而我自己的产品已启用。
此外,每次我运行它时,那里的参考编号总是会改变,所以我实际上无法查找。我只提供了邮递员方面的东西,因为坦率地说,如果我能让它工作,我的 PHP 会很好,我已经通过成功的 GET 请求解决了一些小问题。
如果是分号问题,我会尖叫。
API 文档:https ://developer.walmart.com/#/apicenter/marketPlace/latest#updateInventoryForAnItem