Woocommerce rest api 使用令牌进行身份验证

Woocommerce rest api auth with token

我正在构建自定义应用程序以从前端发布产品。问题是,我可以使用给我令牌的 JWT Auth 插件登录用户。但我不能用这个来创建产品。唯一有效的是使用用户名和密码的基本身份验证。但我不想传递请求的密码。

当我尝试使用 Postman Bearer auth token、POST 和 /wp-json/wc/v2/products 时,我收到此错误:woocommerce_rest_cannot_create

有办法吗?

此错误可能由于多种原因而出现,首先 不要使用邮递员 oAuth1.0 而是使用基本身份验证。尝试用您的消费者密钥替换用户名和密码。

**修改您的 .htaccess 以使基本身份验证工作,

粘贴这个:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteBase /
RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

第二个原因,您的 posting/curl/fetch 缺少变量 url 或未满足其余 api 的要求。 这里有一些提示可以帮助解决这个问题。

OAuth 提示 OAuth 参数可以添加为查询字符串参数或包含在授权中 header.

请注意,在 WordPress 中没有可靠的 cross-platform 获取原始请求 header 的方法,因此查询字符串在某些情况下应该更可靠。 所需参数为:oauth_consumer_keyoauth_timestampoauth_nonceoauth_signatureoauth_signature_methodoauth_version 不需要,应该省略.

OAuth 随机数可以是任何随机生成的 32 个字符(推荐)的字符串,对消费者密钥而言是唯一的。在 Twitter REST API 论坛上阅读有关生成随机数的更多建议。

OAuth 时间戳应该是请求时的 unix 时间戳。 REST API 将拒绝包含时间戳超出 15 分钟 window 的任何请求,以防止重放攻击

在形成用于 签名的基本字符串时,您必须使用索引提供的存储区 URL,因为这是服务器将使用的。 (例如,如果商店 URL 包含 www sub-domain,您应该将其用于请求)

您可以使用 LinkedIn 的 OAuth 测试控制台测试生成的签名 – 将成员 token/secret 留空。

Twitter 提供了有关使用 OAuth 1.0a 生成签名的详细说明,但请记住此实现不使用令牌。

请注意,请求 body 未根据 OAuth 规范进行签名,有关原因的详细信息,请参阅 Google 的 OAuth 1.0 扩展。

如果在您的请求中包含参数,如果您可以按字母顺序订购您的物品,将会省去很多麻烦。 支持授权 header s启动 WooCommerce 3.0。

请注意,对于当前版本的 WordPress,使用 json_url_prefix 过滤器不再有效。

在 WordPress 4.7 上(并使用来自核心的 REST API 而不是插件),这是更改 API 前缀所必须做的。

add_filter( 'rest_url_prefix', 'my_theme_api_slug'); 
function my_theme_api_slug( $slug ) { return 'api'; }

如果这不能立即奏效,您需要刷新重写规则。你可以 运行 这段代码一次这样做(不要把它留在你的代码中所以它每次 运行s)

flush_rewrite_rules(true);

只需查看您正在使用的设备的日期和时间

我花了 6 个小时解决了这个问题我浪费了我的时间,当我 运行 没有耐心时,一个偶然的机会,我尝试更改计算机的时间,因为它不同,问题就解决了