Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

woocommerce rest api OAuth authentication in android

Tags:

android

oauth

what is the sample code for OAuth 1.0a(one leg) authentication in android? is there a library for it? . I use eclipse and i'm new in android. can anyone clarify the path for me?

like image 758
Moradi Avatar asked May 11 '16 16:05

Moradi


People also ask

How do I set up REST API in WooCommerce?

Go to: WooCommerce > Settings > Advanced > REST API. Note: Keys/Apps was found at WooCommerce > Settings > API > Key/Apps prior to WooCommerce 3.4. Select Add Key. You are taken to the Key Details screen. Add a Description.

How to implement OAuth authentication in WordPress?

In the context of WordPress,OAuth authentication is implemented by installing the OAuth authentication API for WordPress. This is based on OAuth 1.0a specifications and actually extends these specifications by an additional parameter wp_scope. This parameter is sent to Temporary Credential Request endpoint.

What is the best authentication for WordPress REST API?

When it comes to WordPress REST API, OAuth is the most common authentication handling provider.

What is OAuth and why do we need it?

Those tokens are also used to manage all API access requests. This access could be revoked at any point. Perhaps, the most important use of the OAuth authentication process is the safe process of handling REST API requests without exposing the credentials of the users.


2 Answers

to answer my own question:

  1. download Scrib.jar library and add it to your lib folder(you can download it from (here)
  2. create a class with name "OneLeggedApi10" and copy below code in it:

    import org.scribe.builder.api.DefaultApi10a;
    import org.scribe.model.Verb;
    import org.scribe.model.Token;
    public class OneLeggedApi10 extends DefaultApi10a  {
    @Override
    public String getAccessTokenEndpoint() {
        return null;
    }
    
    @Override
    public String getRequestTokenEndpoint() {
        return null;
    }
    
    @Override
    public String getAuthorizationUrl(Token requestToken) {
        return null;
    }
    
    @Override
    public Verb getAccessTokenVerb() {
        return Verb.GET;
    }
    
    @Override
    public Verb getRequestTokenVerb() {
        return Verb.GET;
    }
    }
    


  3. now you can do OAuth authentication:

    String RESOURCE_URL = "http://yourDomain.com/wc-api/v3/orders";
    String SCOPE = "*"; //all permissions
    Response response;
    OAuthRequest request;
    String responsebody = "";
    OAuthService service = new ServiceBuilder().provider(OneLeggedApi10.class)
                    .apiKey("your_key")                
                    .apiSecret("your_apiSecret") 
                    .signatureType(SignatureType.QueryString)
                    .debug()
                    /*.scope(SCOPE).*/
                    .build();
    
                request = new OAuthRequest(Verb.GET, RESOURCE_URL);
                service.signRequest(new Token("", ""), request);
    
                // Now let's go and ask for a protected resource!
                Log.d("scribe","Now we're going to access a protected resource...");
                try{
                    response = request.send();
                    if (response.isSuccessful()) {
                        responsebody  = response.getBody();
                    }
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
    
  4. note that if you are not using above code in an AsyncTask,then put the request.send() part in a thread (actually whole try_catch section) for avoiding run in main thread exception

  5. finally if you want to send data,for example in a case that you want to update an order,replace

     request = new OAuthRequest(Verb.GET, RESOURCE_URL);  
    

    with these lines:

    String payload = yourJsonOBJ.toString();
    request = new OAuthRequest(Verb.PUT, RESOURCE_URL);
    request.addHeader("Content-Type", "application/json");
    request.addPayload(payload);  
    

more information in WooCommerce Documentation site
Hope it help ;)
good luck..

like image 122
Moradi Avatar answered Oct 30 '22 17:10

Moradi


new Thread() {
            @Override
            public void run() {
                    String RESOURCE_URL = "http://www.woocommerce.com/wp-json/wc/v1/api/";
                    String SCOPE = "*"; //all permissions
                    Response response;
                    OAuthRequest request;
                    String responsebody = "";
                    OAuthService service = new ServiceBuilder().provider(OneLeggedApi10.class)
                            .apiKey("yourConsumerKey")
                            .apiSecret("yourConsumerSecret")
                            .signatureType(SignatureType.QueryString)
                            .debug()
                            /*.scope(SCOPE).*/
                            .build();

                    request = new OAuthRequest(Verb.GET, RESOURCE_URL);
                    service.signRequest(new Token("", ""), request);

                    // Now let's go and ask for a protected resource!
                    Log.d("scribe","Now we're going to access a protected resource...");

                try {
                    response = request.send();
                    if (response.isSuccessful()) {
                        responsebody = response.getBody();
                        Log.v("response", responsebody);
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();

This code is updated from above, the above code is working getting JSON from wordpress Woocommerce API. But if you wondering how to use Thread this is the answer. And I add Log.v for see the json response.

like image 22
Faisal Avatar answered Oct 30 '22 18:10

Faisal