【问题标题】:How to Use Magento Rest API如何使用 Magento Rest API
【发布时间】:2017-12-20 05:45:15
【问题描述】:

我是 Magento 的新手。我想使用适用于 Android 的 Magento Rest API。我得到了 oAuth_token 和 oauth_verifier。通过 oAuth_token 和 oauth_verifier 后,我得到一个错误。无效的身份验证/错误请求(得到 400,预期 HTTP/1.1 20X 或重定向) <br/>oauth_problem=parameter_absent&oauth_parameters_absent=oauth_verifier.

这是我的代码:

 <?php
    ini_set('display_errors', '1');
       $callbackUrl_1 = "http://demo.com/magento.com/admin123.php";
    $callbackUrl = "http://demo.com/magento.com/sendToken.php";
    $temporaryCredentialsRequestUrl = "http://demo.com/magento.com/oauth/initiate?oauth_callback=" . urlencode($callbackUrl);
    //$adminAuthorizationUrl = 'http://demo.com/magento.com/admin123/oAuth_authorize';
    $adminAuthorizationUrl = 'http://demo.com/magento.com/oauth/authorize';
    $accessTokenRequestUrl = 'http://demo.com/magento.com/oauth/token';
    $apiUrl = 'http://demo.com/magento.com/api/rest';
    $consumerKey = '88a6142021c1cdfed92b0954a94fc066';
    $consumerSecret = 'bedc0ede692fe06d4b12821bb21f7c3b';

    session_start();
    //echo "SESSION state".$_SESSION['state'];

    if (!isset($_GET['oauth_token']) && isset($_SESSION['state']) && $_SESSION['state'] == 1) {

        $_SESSION['state'] = 0;
    }
    try {
        $authType = ($_SESSION['state'] == 2) ? OAUTH_AUTH_TYPE_AUTHORIZATION : OAUTH_AUTH_TYPE_URI;
        $oauthClient = new OAuth($consumerKey, $consumerSecret, OAUTH_SIG_METHOD_HMACSHA1, $authType);
        $oauthClient->enableDebug();


        if (!isset($_GET['oauth_token']) && !$_SESSION['state']) {

            $requestToken = $oauthClient->getRequestToken($temporaryCredentialsRequestUrl);
            $_SESSION['secret'] = $requestToken['oauth_token_secret'];
            $_SESSION['state'] = 1;

            //echo "oauth_token ".$requestToken['oauth_token']."<br>";
            //echo "oauth_token_secret ".$requestToken['oauth_token_secret'];die;

            header('Location: ' . $adminAuthorizationUrl . '?oauth_token=' . $requestToken['oauth_token']."&oauth_token_secret=".$requestToken['oauth_token_secret']);

            exit;
        } else if ($_SESSION['state'] == 1) {
        //  echo "oauth_token ".$_GET['oauth_token'];die;   
            $oauthClient->setToken($_GET['oauth_token'],$_SESSION['oauth_verifier']);
            $accessToken = $oauthClient->getAccessToken($accessTokenRequestUrl);

            $_SESSION['state'] = 2;
            $_SESSION['token'] = $accessToken['oauth_token'];
            $_SESSION['secret'] = $accessToken['oauth_token_secret'];

            $_SESSION['example'] = $accessToken['oauth_token'];

            header('Location: ' . $callbackUrl);
            exit;
        } else {
            $_SESSION['state'] = 0;
            $oauthClient->setToken($_SESSION['token'], $_SESSION['secret']);

            $resourceUrl = "$apiUrl/products";
            $oauthClient->fetch($resourceUrl,array(), 'GET', array('Content-Type' => 'application/json', 'Accept' => 'application/json'));
            $productsList = json_decode($oauthClient->getLastResponse());
            print_r($productsList);
        }
    } catch (OAuthException $e) {
        print_r($e->getMessage());
        echo "&lt;br/&gt;";
        print_r($e->lastResponse);
    }


    ?>

【问题讨论】:

    标签: php rest magento session oauth


    【解决方案1】:

    调用restful webservice的完整示例 RestFulWebservice.java 这个活动类

    public class RestFulWebservice extends Activity {
    
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
            setContentView(R.layout.rest_ful_webservice);  
    
            final Button GetServerData = (Button) findViewById(R.id.GetServerData);
    
            GetServerData.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
    
                    // WebServer url change it accordingly
                    String serverURL = "http://androidexample.com/media/webservice/JsonReturn.php";
    
                    // Use AsyncTask execute Method To Prevent ANR Problem
                    new LongOperation().execute(serverURL);
                }
            });    
    
        }
    
    
        // Class with extends AsyncTask class
    
        private class LongOperation  extends AsyncTask<String, Void, Void> {
    
            // Required initialization
    
            private final HttpClient Client = new DefaultHttpClient();
            private String Content;
            private String Error = null;
            private ProgressDialog Dialog = new ProgressDialog(RestFulWebservice.this);
            String data =""; 
            TextView uiUpdate = (TextView) findViewById(R.id.output);
            TextView jsonParsed = (TextView) findViewById(R.id.jsonParsed);
            int sizeData = 0;  
            EditText serverText = (EditText) findViewById(R.id.serverText);
    
    
            protected void onPreExecute() {
                // NOTE: You can call UI Element here.
    
                //Start Progress Dialog (Message)
    
                Dialog.setMessage("Please wait..");
                Dialog.show();
    
                try{
                    // Set Request parameter
                    data +="&" + URLEncoder.encode("data", "UTF-8") + "="+serverText.getText();
    
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } 
    
            }
    
            // Call after onPreExecute method
            protected Void doInBackground(String... urls) {
    
                /************ Make Post Call To Web Server ***********/
                BufferedReader reader=null;
    
                     // Send data 
                    try
                    { 
    
                       // Defined URL  where to send data
                       URL url = new URL(urls[0]);
    
                      // Send POST data request
    
                      URLConnection conn = url.openConnection(); 
                      conn.setDoOutput(true); 
                      OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
                      wr.write( data ); 
                      wr.flush(); 
    
                      // Get the server response 
    
                      reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                      StringBuilder sb = new StringBuilder();
                      String line = null;
    
                        // Read Server Response
                        while((line = reader.readLine()) != null)
                            {
                                   // Append server response in string
                                   sb.append(line + "
    ");
                            }
    
                        // Append Server Response To Content String 
                       Content = sb.toString();
                    }
                    catch(Exception ex)
                    {
                        Error = ex.getMessage();
                    }
                    finally
                    {
                        try
                        {
    
                            reader.close();
                        }
    
                        catch(Exception ex) {}
                    }
    
                /*****************************************************/
                return null;
            }
    
            protected void onPostExecute(Void unused) {
                // NOTE: You can call UI Element here.
    
                // Close progress dialog
                Dialog.dismiss();
    
                if (Error != null) {
    
                    uiUpdate.setText("Output : "+Error);
    
                } else {
    
                    // Show Response Json On Screen (activity)
                    uiUpdate.setText( Content );
    
                 /****************** Start Parse Response JSON Data *************/
    
                    String OutputData = "";
                    JSONObject jsonResponse;
    
                    try {
    
                         /****** Creates a new JSONObject with name/value mappings from the JSON string. ********/
                         jsonResponse = new JSONObject(Content);
    
                         /***** Returns the value mapped by name if it exists and is a JSONArray. ***/
                         /*******  Returns null otherwise.  *******/
                         JSONArray jsonMainNode = jsonResponse.optJSONArray("Android");
    
                         /*********** Process each JSON Node ************/
    
                         int lengthJsonArr = jsonMainNode.length();  
    
                         for(int i=0; i < lengthJsonArr; i++) 
                         {
                             /****** Get Object for each JSON node.***********/
                             JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
    
                             /******* Fetch node values **********/
                             String name       = jsonChildNode.optString("name").toString();
                             String number     = jsonChildNode.optString("number").toString();
                             String date_added = jsonChildNode.optString("date_added").toString();
    
    
                             OutputData += " Name           : "+ name +" 
     "
                                         + "Number      : "+ number +" 
     "
                                         + "Time                : "+ date_added +" 
     " 
                                         +"--------------------------------------------------
    ";
    
    
                        }
                     /****************** End Parse Response JSON Data *************/    
    
                         //Show Parsed Output on screen (activity)
                         jsonParsed.setText( OutputData );
    
    
                     } catch (JSONException e) {
    
                         e.printStackTrace();
                     }
    
    
                 }
            }
    
        }
    
    }
    

    rest_full_webservice.xml

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
      android:fillViewport="true"
      android:background="#FFFFFF"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" >
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
        <EditText
            android:paddingTop="20px"
            android:id="@+id/serverText"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="" />
        <Button
            android:paddingTop="10px"
            android:id="@+id/GetServerData"
            android:text="Restful Webservice Call"
            android:cursorVisible="true"
            android:clickable="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:layout_gravity="center_horizontal"
        /> 
        <TextView
            android:paddingTop="20px"
            android:textStyle="bold"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Server Response (JSON): " />
        <TextView
            android:paddingTop="16px"
            android:id="@+id/output"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Output : Click on button to get server data." />
    
        <TextView
            android:paddingTop="20px"
            android:textStyle="bold"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Parsed JSON : " />
        <TextView
            android:paddingTop="16px"
            android:id="@+id/jsonParsed"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
           />
    
    </LinearLayout>
    </ScrollView>
    

    manifest.xml 别忘了添加互联网权限

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    

    我认为您需要 OAUth 2.0, 你可以从https://github.com/cbitstech/xsi-android获取样品 scribe 库是最好的方法。

    有关信息,请访问以下 URL:-

    https://stackoverflow.com/a/35083651

    https://stackoverflow.com/a/32934934

    【讨论】:

    • 哦,好吧..我会尝试用最好的解决方案回来@V.Soni
    猜你喜欢
    • 2012-07-17
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 2015-06-13
    相关资源
    最近更新 更多