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_key、oauth_timestamp、oauth_nonce、oauth_signature 和 oauth_signature_method。 oauth_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 个小时解决了这个问题我浪费了我的时间,当我 运行 没有耐心时,一个偶然的机会,我尝试更改计算机的时间,因为它不同,问题就解决了
我正在构建自定义应用程序以从前端发布产品。问题是,我可以使用给我令牌的 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_key、oauth_timestamp、oauth_nonce、oauth_signature 和 oauth_signature_method。 oauth_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 个小时解决了这个问题我浪费了我的时间,当我 运行 没有耐心时,一个偶然的机会,我尝试更改计算机的时间,因为它不同,问题就解决了