2016-12-22 9 views
0

oauth-signature을 사용하여 woocommerce API 연결에 대한 oauth-signature를 생성합니다.woocommerce api v1과 http 및 javascript (https 아님)

필요한 매개 변수는 다음과 같습니다 : 나는 woocommerce rest api documentation에 명시된 모든 단계를 따라 oauth_consumer_key, oauth_timestamp, oauth_nonce, oauth_signature를하고을 oauth_signature_method. oauth_version은 필요하지 않으므로 생략해야합니다. OAuth nonce는 임의로 생성 된 소비자 키에 고유 한 32 자 (권장) 문자열 일 수 있습니다. 등 ...

그러나 다음과 같은 요청이 아직 승인되지 않은 반환

http://siglar.no/wp-json/wc/v1/orders?oauth_consumer_key=ck_1ca1c6ff1a93de4836ee52c766538043d7f15d07&oauth_timestamp=1482431903&oauth_nonce=P5SM1FGeFVpdRyHWp4HHYOMlYAhxE6Gl&oauth_signature=cEETZUnSNQD6uorII9c%2B5SXf0M8%3D&oauth_signature_method=HMAC-SHA1

(그나마 걱정은 키가 현지 사용을위한 전용)

응답 :

{"code":"woocommerce_rest_cannot_view","message":"Beklager, du kan ikke liste ressurser.","data":{"status":401}} 

임 WP 4.7, WC 2.6.9, A

는 문자열 기반 서명과와 소비자 비밀 키를 사용하여 서명을 생성 : 나는 또한 도서관에서 요구하는이 작업이 완료되었는지 확인

화장실, 화장실 등을 위해 비활성화 된 SSL 활성화 PI .. & 문자가 HMAC-SHA1 해시 알고리즘을 사용합니다.

시간대는 UNIX이며 필요에 따라 nonce를 생성해야합니다. 그래서 당신 중 일부는 문제를 발견합니까? 여기 내 코드는 다음과 같습니다.

constructor(private http: Http) { 

    var d = new Date(); 
    var httpMethod = 'GET', 
     url = 'http://siglar.no/wp-json/wc/v1/orders', 
     ck = 'ck_1ca1c6ff1a93de4836ee52c766538043d7f15d07', 
     cs = 'cs_ce323425064c37688d614e4ff43a5489c6f78017', 
     sm = 'HMAC-SHA1', 
     nc = this.nonceGen(), 
     timestamp = Math.floor(d.getTime()/ 1000), 
     parameters = { 
      oauth_consumer_key : ck, 
      oauth_timestamp : timestamp, 
      oauth_nonce : nc, 
      oauth_signature_method : sm 
     }, 
     // generates a RFC 3986 encoded, BASE64 encoded HMAC-SHA1 hash 
     encodedSignature = oauthSignature.generate(httpMethod, url, parameters, cs); 

    this.http.get(
     url + '?oauth_consumer_key='+ck+'&oauth_timestamp='+timestamp+'&oauth_nonce='+nc+'&oauth_signature='+encodedSignature+'&oauth_signature_method='+sm 
    ).subscribe(data => { 
     console.log('fetched'); 
     console.log(data); 
    }); 

} 

public nonceGen() { 
    let length = 32; 
    let text = ""; 
    let possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 
    for(let i = 0; i < length; i++) { 
     text += possible.charAt(Math.floor(Math.random() * possible.length)); 
    } 
    return text; 
} 

다른 누구나이 행운이 있었나요?

+0

나는 여기에 '작동하지 않는'솔루션을 발견했다. quote => "https://github.com/bettiolo/oauth-signature-js/blob/master/dist/oauth-signature.js#L263 행을 this._key = consumerSecret;으로 대체했습니다." – Steffan

+0

(그가 wc api '레거시 v2'를 사용하고 있고 최근 버전 인 'v1'을 사용하고있는 것처럼 보입니다.)^ – Steffan

답변

3

나는 마침내 작동하게 만들었습니다. 어떻게 든

내 지역 워드 프레스 설치를위한 작업을 wouldnt하지만 내 라이브 워드 프레스 사이트에 대한 작업을했다 :

Angular2 코드 : 사용

constructor(private http: Http) { 

    var 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)); 
     } 
    }); 

    var requestData = { 
     url: 'http://siglarweb.no/wp-json/wc/v1/orders', 
     method: 'GET' 
    }; 

    this.http.get(
     requestData.url + '?' + jQuery.param(oauth.authorize(requestData)) 
    ).subscribe(data => { 
     console.log(data); 
    }); 

} 

라이브러리 (NPM을 통해 설치) :

npm install crypto-js --save npm install oauth-1.0a --save

필요한 파일 : https://github.com/woocommerce/woocommerce/issues/6493하지만 나를 위해 작동하지 않았다

"scripts": [ 
    "../node_modules/crypto-js/crypto-js.js", 
    "../node_modules/oauth-1.0a/oauth-1.0a.js" 
    ] 
+0

TS 파일에서 암호화 및 0auth를 가져 오는 방법은 무엇입니까?(초보자 질문에 대한 미안) – GY22

+0

@ GY22 -'npm install crypto-js oauth-1.0a --save' 그런 다음 core.hs 파일을 index.html에 포함 시키거나 angular-cli 설정으로로드하십시오 – Steffan

+0

@ Steffan.can u pls oauth1.0a를 사용하여 데이터를 게시하고 Angular2를 사용하여 암호화 j를 말하십시오. – ANISUNDAR