【发布时间】:2020-09-28 03:06:55
【问题描述】:
(我最终想要完成的是使用产品代码在 Walmart.com 上查找单个产品,所以如果有人有其他方法,那也可以)
Walmart.io 的 Product Lookup API 需要一个名为“WM_SEC.AUTH_SIGNATURE”的标头,但我不知道如何使用 Ruby 生成它。 here 给出了一些 Java 代码(我不确定在此处复制该代码的合法性)但我不了解 Java,所以我不明白他们在做什么。
This SO question 试图解释这个过程,但我也不清楚具体做了什么。
要使用您自己的代码获取数字签名,请按以下步骤操作:
获取消费者 ID 和您生成的 Base 64 编码私钥 在卖家中心。
获取您要调用的完整 URL,包括任何 路径和查询参数。
使用 GET 方法构造输入 用于数字签名。
使用下面列出的结构: 发给你的消费者ID_+“\n”+你所在API调用的URL make + "\n" + 你正在调用的 API 的请求方法 所有大写字母 + "\n" + Unix Epoch 时间戳(以毫秒为单位) 自 1970 年 1 月 1 日 UTC) + "\n" ** 注意:参数的顺序和行返回\n对于正确生成签名很重要
使用第 3 步中列出的结构化数据生成字节数组 以下步骤:
一个。使用 Base-64 解码字节数组。
b.使用 PKCS#8 对结果值进行编码以表示您的 Private 钥匙。各种语言的图书馆提供识别的能力 私钥是 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"
但我不知道如何继续。我是否必须将我的privatekey 编码为 PKCS#8,然后使用结果对我的encoded 进行编码?我什至在 Ruby 中都找不到 PKCS#8 编码器。
谁能帮忙?
【问题讨论】:
标签: ruby rsa sha256 pkcs#8 walmart-api