(我最终想要完成的是使用产品代码在 Walmart.com 上查找单个产品,所以如果有人有另一种方法,那也可以)
Walmart.io 的 Product Lookup API 需要一个名为“WM_SEC.AUTH_SIGNATURE”的标头,但我不知道如何使用 Ruby 生成它。这里给出了一些 Java 代码(我不确定在这里复制该代码的合法性)但我不了解 Java,所以我不明白他们在做什么。
这个 SO question试图解释这个过程,但我也不清楚到底在做什么。
要使用您自己的代码获取数字签名,请执行以下步骤:
获取您在卖家中心生成的消费者 ID 和 Base 64 编码的私钥。
获取您希望调用的完整 URL,包括任何路径和查询参数。
使用 GET 方法构造数字签名的输入。
使用下面列出的结构:发给您的消费者 ID_+“\n”+您正在进行的 API 调用的 URL +“\n”+您正在进行的 API 调用的请求方法(全部大写)+“\n " + Unix Epoch 时间戳(自 1970 年 1 月 1 日 UTC 以来的毫秒数)+ "\n" ** 注意:参数的顺序和行返回 \n 对于正确生成签名很重要
使用以下步骤生成步骤 3 中列出的结构化数据的字节数组:
一个。使用 Base-64 解码字节数组。
湾。使用 PKCS#8 对结果值进行编码以表示您的私钥。各种语言的库提供了识别私钥是 PKCS#8 格式而不是其他冲突格式(如 PKCS#1)的能力。
C。使用您的私钥的这个字节表示,使用带有 RSA 的 SHA-256 对数据进行签名。
d。使用 Base-64 对生成的数字签名进行编码。
使用生成的数字签名和时间戳进行 API 调用。
我已经做到了:
time = DateTime.now.strftime('%Q')
customerid = "customerid"
link = "https://developer.api.walmart.com/api-proxy/service/affil/product/v2/items/4837473"
method = "POST"
uncoded = customerid + "\n" + link + "\n" + method + "\n" + time + "\n"
encoded = Base64.encode64(uncoded)
privatekey = "longrsakey"
但我不知道如何继续。我是否必须将 my 编码privatekey
为 PKCS#8,然后使用结果对 my 进行编码encoded
?我什至在 Ruby 中找不到 PKCS#8 编码器。
任何人都可以帮忙吗?