我正在构建一个自定义应用程序,以从前端发布产品。问题是,我可以使用为我提供令牌的JWT Auth插件登录用户。但是我不能用这个来创建产品。唯一起作用的是带有用户名和密码的基本身份验证。但是我不想传递请求的密码。
当我尝试使用邮递员Bearer auth token
,使用/wp-json/wc/v2/products
进行POST时,收到以下错误消息:woocommerce_rest_cannot_create
一种方法吗?
答案 0 :(得分:2)
此错误可能是由于多种原因出现的,首先 不要使用邮递员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>
第二个原因,缺少发布/卷曲/获取您的网址的变量或未满足其余api的要求。 这里有一些技巧可以帮助解决此问题。
OAuth技巧 OAuth参数可以添加为查询字符串参数,也可以包含在Authorization标头中。
请注意,没有可靠的跨平台方法来获取WordPress中的原始请求标头,因此在某些情况下查询字符串应该更可靠。 必需的参数是: oauth_consumer_key , oauth_timestamp , oauth_nonce , oauth_signature 和 oauth_signature_method 。 oauth_version 不是必需的,应省略。
OAuth随机数可以是任何随机生成的32个字符(推荐)的字符串,该字符串对于使用者密钥是唯一的。在Twitter REST API论坛上阅读有关生成随机数的更多建议。
OAuth时间戳记应为请求时的Unix时间戳记。 REST API将拒绝任何包含15分钟窗口之外的时间戳的请求,以防止重放攻击。
在形成用于签名的基本字符串时,必须使用索引提供的商店URL,因为这是服务器将使用的URL。 (例如,如果商店URL包含www子域,则应将其用于请求)
您可以使用LinkedIn的OAuth测试控制台测试生成的签名-将成员令牌/秘密留空。
Twitter对于使用OAuth 1.0a生成签名有很好的说明,但是请记住,此实现未使用令牌。
请注意,请求正文未按照OAuth规范进行签名,有关原因的详细信息,请参见Google的OAuth 1.0扩展。
如果在请求中包含参数,则可以按字母顺序订购商品,从而省去了很多麻烦。 支持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'; }
如果这不能立即生效,则需要刷新重写规则。您可以一次运行这段代码(不要将其留在您的代码中,这样每次都可以运行)
flush_rewrite_rules(true);
答案 1 :(得分:0)
仅查看您使用的设备的日期和时间
我花了6个小时来解决我浪费时间的问题,当我忍耐不住时,偶然地,我尝试更改计算机的时间,因为时间不同,问题得以解决