无法从第三方Magento REST API获取请求令牌

问题描述:

我的一位客户在其最后安装了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,并且能够使用此代码获取访问令牌。如果不先了解问题所在,我不想回到客户身边。

谢谢。

的网址似乎是不正确的:

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

,而不是下面

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