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

时间:2015-07-22 00:04:25

标签: java magento oauth magento-1.9 scribe

我的一位客户已经设置了Magento。现在,我尝试访问他们的Magento API以获取产品信息。他们为我提供了Magento主机名,consumerkey和consumersecret。我使用Scribe 1.3.7访问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,并且我能够使用此代码获取访问令牌。我不想在没有先了解问题的情况下回到我的客户那里。

感谢。

1 个答案:

答案 0 :(得分:0)

网址似乎不正确:

constexpr
而不是那个 使用以下

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