Woocommerce休息API无效签名(错误401)对邮寄请求

问题描述:

我正在为woocommerce商店的Ionic 2项目工作。我在我的应用中使用Woocommerce REST API,并使用Postman Chrome App使用OAuth-1.0测试API。我得到正确的应对与GET请求,但POST请求,我得到签名不匹配的错误,如:Woocommerce休息API无效签名(错误401)对邮寄请求

{ 
    "code": "woocommerce_rest_authentication_error", 
    "message": "Invalid Signature - provided signature does not match.", 
    "data": { 
    "status": 401 
    } 
} 

我这个挣扎了几天(使用的角度),最后想通了,这是一个CORS问题。浏览器实际上发送一个OPTIONS请求,woocommerce-api作为GET接收。使用this tool有助于排除故障。

最后解决它通过设置我的.htaccess如下;

RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]] 
Header set Access-Control-Allow-Origin "*" 
Header always set Access-Control-Allow-Credentials "true" 
Header always set Access-Control-Max-Age "1000" 
Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding" 
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" 

你可以参考this answer进行了详细的解释

+0

为了澄清(请纠正我,如果我错了):了'RewriteCond'和'RewriteRule'基本上返回一个HTTP'200'每一个' OPTIONS'请求。浏览器(至少在HTTPS环境中)在每个“GET/POST/etc”调用之前发出一个“OPTIONS”调用。如果返回一个'200',则授权执行* actual *调用。 –

+0

@JeffHuijsmans是的,这是正确的:) –