2017-08-02 16 views
0

私はWooCommerce Rest APIで認証しようとすると問題を抱えています。製品を取得するなどの基本的な処理をしています...私はCordovaで生成されたアプリケーションで使用するためにプレーンなjavascriptで行いたいと思います。しかし、コンテンツを取得しようとすると、私は401 Unauthorizedエラーを受けています。ここに私のコードです:WooCommerce Rest API Oauth with Javascript

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) 
    }) 
関連する問題