2017-08-02 116 views
0

我面臨着嘗試在WooCommerce Rest API上進行身份驗證的問題,以執行諸如獲取產品之類的基本功能......我想以純JavaScript形式執行此操作,以便在Cordova生成的應用程序上使用。但是在嘗試獲取內容時,我總是收到401 Unauthorized錯誤。這裏是我的代碼:WooCommerce Rest API帶有Javascript的Oauth

import axios from 'axios' 
    import OAuth from 'oauth-1.0a' 
    import crypto from 'crypto' 

    const ck = '[MY_CLIENT_KEY]' 
    const cs = '[MY_SECRET_KEY]' 
    const url = '[MY_URL]/wp-json/wc/v2/products' 

    const oauth = OAuth({ 
     consumer: { 
      key: ck, 
      secret: cs 
     }, 
     signature_method: 'HMAC-SHA1', 
     hash_function: function(base_string, key) { 
      return crypto.createHmac('sha1', key).update(base_string).digest('base64') 
     } 
    }) 

    const token = { 
     key: ck, 
     secret: cs 
    } 

    var request_data = { 
     method: 'GET', 
     url: url 
    } 

    var params = oauth.authorize(request_data, token) 
    console.log(params) 

    axios.get(url + '/?oauth_signature=' + params.oauth_signature + 
        '&oauth_consumer_key=' + ck + 
        '&oauth_nonce=' + params.oauth_nonce + 
        '&oauth_signature_method=HMAC-SHA1&oauth_timestamp=' + params.oauth_timestamp + 
        '&oauth_token=' + params.oauth_token + 
        '&oauth_version=1.0') 
    .then(function(data){ 
     console.log(data) 
    }, function(error){ 
     console.log(error) 
    }) 

有關如何完成此任務的任何想法?我在哪裏失敗?

回答

1

明白了,靈感來源於this answer here

import axios from 'axios' 
    import OAuth from 'oauth-1.0a' 
    import CryptoJS from 'crypto-js' 
    import jQuery from 'jquery' 

    const that = this 

    const ck = '[MY_CLIENT_KEY]' 
    const cs = '[MY_SECRET_KEY]' 
    const url = '[MY_URL]/wp-json/wc/v2/products' 

    const oauth = OAuth({ 
     consumer: { 
      key: ck, 
      secret: cs 
     }, 
     signature_method: 'HMAC-SHA1', 
     hash_function: function(base_string, key) { 
      return CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA1(base_string, key)); 
     } 
    }); 

    const requestData = { 
     url: url, 
     method: 'GET' 
    }; 

    axios.get(
     requestData.url + '?' + jQuery.param(oauth.authorize(requestData)) 
    ).then(function(response){ 
     console.log(response.data) 
    }, function(error){ 
     console.log(error) 
    })