2017-07-28 51 views
0

我正在用WP API REST和WC API REST创建angularjs客户端,而且我已经在发布数据到订单时遇到了问题。我得到401错误未经授权。有人能告诉我我做错了什么吗?WC API REST无法POST数据oauth 1.0

angular.module('egonometriaApp') 


.service('$order', ['$http', function ($http) { 
    var order={ 
     payment_method: 'bacs' 
    }; 
    function randomString(length, chars) { 
     var result = ''; 
     for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))]; 
     return result; 
    } 

var consumer_key = "ck_ae3c4951e083094b8ae716c3b8b59eac4a35515b", 
    httpMethod = "POST", 
    url = "http://it-grafika.pl:8080/wp-json/wc/v2/orders", 
    parameters = { 
    oauth_consumer_key: consumer_key, 
    oauth_signature_method: "HMAC-SHA1", 
    oauth_timestamp: (Math.floor((new Date().getTime())/1000)).toString(), 
    oauth_nonce: randomString(32, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") 
    }, 
    consumerSecret = "cs_00af1fb1fa20bcf81d3c68dc8cfea4f3b9f261e9", 
    tokenSecret = "", 
    encodedSignature = oauthSignature.generate(httpMethod, url, parameters, consumerSecret, tokenSecret, 
    {encodeSignature: true}); 
console.log(encodedSignature); 
parameters['oauth_signature'] = encodedSignature; 
console.log(parameters); 
this.postOrder = function() { 
    var config = { 
    method: httpMethod, 
    url: url, 
    headers: { 
     authorization: 'OAuth '+ 'oauth_consumer_key="'+parameters['oauth_consumer_key']+'",oauth_signature_method="'+parameters['oauth_signature_method']+ 
     '",oauth_timestamp="'+parameters['oauth_timestamp']+'",oauth_nonce="'+parameters['oauth_nonce']+'",oauth_version="1.0"'+',oauth_signature="'+parameters['oauth_signature']+'"', 
     "Content-Type": 'Content-Type: application/json' 
    } 

    // data: order 
    }; 
    $http(config) 
    .then(function (status) { 
     console.log(status); 
    }); 
}; 

}]) ;

它正在工作,当我使用邮递员。不知道为什么授权不通过。

这是我得到我的浏览器 http://imgur.com/a/bEMC8

回答

0

既然你正在跨域请求,您需要通过withCredentials在你的配置true

你的配置应该看起来像这样。

var config = { 
    "async": true, 
    "crossDomain": true, 
    method: httpMethod, 
    url: url, 
    withCredentials : true, 
    headers: { 
     authorization: 'OAuth '+ 'oauth_consumer_key="'+parameters['oauth_consumer_key']+'",oauth_signature_method="'+parameters['oauth_signature_method']+ 
     '",oauth_timestamp="'+parameters['oauth_timestamp']+'",oauth_nonce="'+parameters['oauth_nonce']+'",oauth_version="1.0"'+',oauth_signature="'+parameters['oauth_signature']+'"', 
     "Content-Type": 'Content-Type: application/json' 
    } 

详情请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials

+0

这没有帮助 – Tomek