当前位置: 首页 > 知识库问答 >
问题:

Android脚本java不提供令牌magento

柏高丽
2023-03-14

这样的情况下,我用cribe-java(https://github.com/fernandezpablo85/scribe-java)通过Oauth认证,总是得到这样的错误:

     org.scribe.exceptions.OAuthConnectionException: There was a problem while creating a connection to the remote service.
on this line of code 

        Token requestToken = service.getRequestToken();

请帮助谁能解决这样的问题。

  Here my main activity :
    public class MainActivity extends Activity {
            final String MAGENTO_API_KEY = "key";
            final String MAGENTO_API_SECRET = "secret";
            final String MAGENTO_REST_API_URL = "https://www.myweb.com/api/rest";

        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        doAsyncTask doIt = new doAsyncTask();
            doIt.doInBackground();
    }
    public void testOauth(){
        OAuthService service = new ServiceBuilder()
                .provider(MagentoThreeLeggedOAuth.class)
                .apiKey(MAGENTO_API_KEY)
                .apiSecret(MAGENTO_API_SECRET)
                .callback("SUCCESS")
                .debug()
                .build();
        Scanner in = new Scanner(System.in);
        System.out.println("Magento'srkflow");
        System.out.println();
        // Obtain the Request Token
        System.out.println("FetchingRequest Token...");
        Token requestToken = service.getRequestToken();
        System.out.println("GotRequest Token!");
        System.out.println();

        // Obtain the Authorization URL
        System.out.println("FetchingAuthorization URL...");
        String authorizationUrl = service.getAuthorizationUrl(requestToken);
        System.out.println("GotAuthorization URL!");
        System.out.println("Nownd authorize Main here:");
        System.out.println(authorizationUrl);
        System.out.println("Ande the authorization code here");
        System.out.print(">>");
        Verifier verifier = new Verifier(in.nextLine());
        System.out.println();


        // Trade the Request Token and Verfier for the Access Token
        System.out.println("TradingRequest Token for an Access Token...");
        Token accessToken = service.getAccessToken(requestToken, verifier);
        System.out.println("GotAccess Token!");
        System.out.println("(if curious it looks like this: "
                + accessToken + " )");
        System.out.println();

//现在让我们去请求一个受保护的资源!OAuthRequest=new OAuthRequest(动词. GET,MAGENTO_REST_API_URL"/产品?限制=2");service.sign请求(访问令牌,请求);响应=request.send();System.out.println();System.out.println(response.get代码());System.out.println(response.get主体());System.out.println();

     /*   OAuthRequest request = new OAuthRequest(Verb.POST, MAGENTO_REST_API_URL+"/customers");
        request.addHeader("Content_Type", "text/xml");//this is a nasty bug in the current Magento implementation...we have to sent over
        final String user = "<!--?xml version=\"1.0\"?-->" +
                "<magento_api>" +
                "<firstname>Gerardo</firstname>" +
                "<lastname>Martinez</lastname>" +
                "<password>123123q</password>" +
                "<email>jerry@example.com</email"+
        "<website_id>1</website_id>" +
                "<group_id>1</group_id>" +
                "</magento_api>";
        request.addPayload(user);
        service.signRequest(accessToken, request);
        Response response = request.send();
        System.out.println();
        System.out.println(response.getCode());
        System.out.println(response.getBody());*/

    }
    public class doAsyncTask extends AsyncTask<String,Void,Boolean>
        @Override
        protected Boolean doInBackground(String... params) {

            testOauth();

            return null;
        }
    }

    public static final class MagentoThreeLeggedOAuth extends DefaultApi10a {
        private static final String BASE_URL = "https://www.myweb.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...
        }

        }

    }

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.example.myapplication" >

    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

共有2个答案

西门智
2023-03-14

我认为OAuthService服务可能有错误,您确定这包含MAGENTO API密钥的值吗

service = new ServiceBuilder()
            .provider(MagentoThreeLeggedOAuth.class)
            .apiKey(Contants.ConsumerKey)
            .apiSecret(Contants.ConsumerSecret)
            .callback(Contants.URL_CALLBACK)
            .build();

参考标准脚本在java在这里:示例脚本-java-android
祝你好运^^

邬令
2023-03-14

MagentoThreeleggedAuth中。类,将基本URL更改为基本URL。不使用AsyncTask,您可以在onCreate()方法中编写该代码,并在onCreate()方法中包含以下行:

StrictMode.ThreadPolicy policy = new  
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);  
 类似资料:
  • 我在PayPal沙盒账户中创建了一个应用程序。我想当一些用户点击“转账”按钮时,然后PayPal将钱从我的账户转移到用户的账户(注意:我们有用户的电子邮件ID)。 因此,可以在没有身份验证的情况下将资金转移到PayPal帐户,就像离线访问方法一样。 感谢先进。

  • 我试图张贴使用ajax在laravel 5.我得到CSRF令牌不匹配异常。我环顾四周,发现可能存在这样的问题,但在这种情况下,我确实包括了所有必要的代码。 请看一下我的代码。 看法 我已经在隐藏输入中提供了令牌,并将其包含在我的帖子中。 我有一个元在头如下。 下面是我的控制器。 这个只是测试用的,这里没什么。我的路线如下 请帮我解决这个问题 这是日志中的输出。 以下是我的浏览器控制台帖子标题和页面

  • 问题内容: 因此,我试图制作一个bash脚本,该脚本调用此命令,然后将其输入。它调用此命令,此命令之后需要3-4个输入。我键入命令,它等待我输入名字,一个我输入名字,它等待我输入名字,依此类推。如何使用bash脚本一次将这些参数传递给命令? 问题答案: 几种方法。 分组所有echo命令并将它们通过管道传递给命令: 或使用heredoc:

  • 问题内容: 对于那些想回复我应该使用SSH密钥的人,请弃权 我试图在bash脚本中使用Expect提供SSH密码。提供密码是可行的,但是我并没有像我应该的那样最终进入SSH会话,它将回溯到bash。 我的剧本: 我的脚本的输出: 我想拥有我的SSH会话,并且只有在退出该会话后才能返回我的bash脚本。我之所以使用bash,是因为我使用了可以选择要连接到的设备的菜单。 谢谢 问题答案: 混合bash

  • 问题内容: 也许您很容易地说我如何提供表名和行数? 伪SQL: 您能告诉我在T-SQL中显示此脚本吗? 问题答案: 如果您使用的是SQL Server 2005或更高版本 (很遗憾,您没有指定要使用的SQL Server 版本 ),则此查询应为您提供以下信息: 产生的输出类似(来自):

  • 我正在尝试将CSRF保护添加到基于Spring-Boot(尤其是WebFlux)的项目中。 到目前为止,我所尝试的是低于安全配置。 但当我尝试上述配置时,我看不到任何与CSRF令牌从服务器推送到浏览器相关的内容。它不是默认推送到客户端吗?如果是这样的话,向客户端(浏览器)提供CSRF令牌的更干净的方法是什么?其中spring文档提到了这一点。(我跟着这个- P、 S.(希望以下信息对回答有用) S