2015-07-22 83 views
0

我的一位客戶在其最後安裝了Magento。現在,我試圖訪問他們的Magento API來獲取產品信息。他們爲我提供了Magento主機名,consumerkey和consumersecret。我使用Scribe 1.3.7來訪問API。這是我的代碼:無法從第三方Magento REST API獲取請求令牌

public final class MagentoThreeLeggedOAuth extends DefaultApi10a { 
    private static final String BASE_URL = "http://example.com/"; 

    @Override 
    public String getRequestTokenEndpoint() { 
     return BASE_URL + "oauth/initiate"; 

    } 

    @Override 
    public String getAccessTokenEndpoint() { 
     return BASE_URL + "oauth/token"; 
    } 

    @Override 
    public String getAuthorizationUrl(Token requestToken) { 
     return BASE_URL + "admin/oauth_authorize?oauth_token=" 
       + requestToken.getToken(); //this implementation is for admin roles only... 
    } 
} 

public final class MagentoAuth { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     final String MAGENTO_API_KEY = "abcdefghij"; 
     final String MAGENTO_API_SECRET = "qwertyuiop"; 
     final String MAGENTO_REST_API_URL = "http://example.com/magento/api/rest";   

     // three-legged oauth 
     OAuthService service = new ServiceBuilder() 
     .provider(MagentoThreeLeggedOAuth.class) 
     .apiKey(MAGENTO_API_KEY) 
     .apiSecret(MAGENTO_API_SECRET) 
     .debug() 
     .build(); 

     System.out.println("" + service.getVersion()); 
     Scanner in = new Scanner(System.in); 
     System.out.println("Magento's OAuth Workflow"); 
     System.out.println(); 

     // Obtain the Request Token 
     System.out.println("Fetching the Request Token..."); 
     Token requestToken = service.getRequestToken(); 
     System.out.println("Got the Request Token!"); 
     System.out.println(); 

     System.out.println("Fetching the Authorization URL..."); 
     String authorizationUrl = service.getAuthorizationUrl(requestToken); 
     System.out.println("Got the Authorization URL!"); 
     System.out.println("Now go and authorize Main here:"); 
     System.out.println(authorizationUrl); 
     System.out.println("And paste the authorization code here"); 
     System.out.print(">>"); 

     Verifier verifier = new Verifier(in.nextLine()); 
     System.out.println(); 
     System.out.println("Trading the Request Token for an Access Token..."); 

     Token accessToken = service.getAccessToken(requestToken, verifier); 
     System.out.println("Got the Access Token!"); 
     System.out.println("(if your curious it looks like this: " 
       + accessToken + ")"); 
     System.out.println(); 

     OAuthRequest request = new OAuthRequest(Verb.GET, MAGENTO_REST_API_URL+ "/products"); 
     service.signRequest(accessToken, request); 

     Response response = request.send(); 
     System.out.println(); 
     System.out.println(response.getCode()); 
     System.out.println(response.getBody()); 
     System.out.println(); 
    } 
} 

當我嘗試運行該程序,我得到以下錯誤:

1.0 
Magento's OAuth Workflow 

Fetching the Request Token... 
obtaining request token from http://example.com/oauth/initiate 
setting oauth_callback to oob 
generating signature... 
using base64 encoder: DatatypeConverter 
base string is: POST&http%3A%2F%2Fexample.com%2Foauth%2Finitiate&oauth_callback%3Doob%26oauth_consumer_key%3Dabcdefghij%26oauth_nonce%3D2387862876%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1437522397%26oauth_version%3D1.0 
signature is: 7DHYSmiU9JMnek04Pd8JwtbaeP4= 
appended additional OAuth parameters: { oauth_callback -> oob , oauth_signature -> 7DHYSmiU9JMnek04Pd8JwtbaeP4= , oauth_version -> 1.0 , oauth_nonce -> 2387862876 , oauth_signature_method -> HMAC-SHA1 , oauth_consumer_key -> abcdefghij , oauth_timestamp -> 1437522397 } 
using Http Header signature 
sending request... 
response status code: 400 
response body: oauth_problem=parameter_absent&oauth_parameters_absent=oauth_consumer_key 
Exception in thread "main" org.scribe.exceptions.OAuthException: Response body is incorrect. Can't extract token and secret from this: 'oauth_problem=parameter_absent&oauth_parameters_absent=oauth_consumer_key' 

有什麼問題嗎?它與代碼有什麼關係?或者我的客戶不得不在他們的最後做些什麼?我在本地安裝了Magento,並且能夠使用此代碼獲取訪問令牌。如果不先了解問題所在,我不想回到客戶身邊。

謝謝。

回答

0

的網址似乎是不正確的:

private static final String BASE_URL = "http://example.com/"; 

,而不是下面

private static final String BASE_URL = "http://example.com/magento/"; 
是 使用
相關問題