Invalid signature - the provided signature does not match the WooCommerce REST API calling from Android

I am an Android developer and new to Woocommerce and started using the REST service with Oauth1.0 authentication. I get the correct answer from PostMan (RestClient plugin) and get the message "Invalid Signature" when I call from an Android app.

Here is my Android code:

OAuthParameters oauth; public OAuthParameters authChecking() { oauth = new OAuthParameters(); GenericUrl genericUrl = new GenericUrl("http://localhost/wordpress/wc-api/v3/products/count"); oauth.consumerKey = "ck_xxxxxxxxxxxxxxxxxxxxxxxxxxx"; oauth.signatureMethod = "HMAC-SHA1"; oauth.version = "3.0"; oauth.computeTimestamp(); oauth.computeNonce(); oauth.signer = new OAuthSigner() { @Override public String getSignatureMethod() { return oauth.signatureMethod; } @Override public String computeSignature(String signatureBaseString) throws GeneralSecurityException { String key = "cs_xxxxxxxxxxxxxxxxxxxxxxxxxx"; Mac mac = Mac.getInstance( "HmacSHA1"); SecretKeySpec secret = new SecretKeySpec(key.getBytes(), "HmacSHA1"); mac.init(secret); byte[] digest = mac.doFinal(signatureBaseString.getBytes()); Log.e("SIGNATURE Base64", new String(Base64.encode(digest, 0)).trim()); String signature = new String(com.google.api.client.repackaged.org.apache.commons.codec.binary.Base64.encodeBase64String(digest)); return signature; } }; try { oauth.computeSignature("GET", genericUrl); } catch (GeneralSecurityException e) { e.printStackTrace(); return null; } catch (NullPointerException e) { e.printStackTrace(); return null; } methodSignatureTest(); return oauth; } @Override public void requestAPI(Object... param) { OAuthParameters oauth = authChecking(); if (oauth != null) { String url = null; try { Toast.makeText(MainActivity.this, "Signature retrive called", Toast.LENGTH_SHORT).show(); url = "http://localhost/wordpress/wc-api/v3/products/"+"count?oauth_consumer_key=" + oauth.consumerKey + "&oauth_signature_method=" + oauth.signatureMethod + "&oauth_timestamp=" + oauth.timestamp + "&oauth_nonce=" + oauth.nonce + "&oauth_version=" + oauth.version + "&oauth_signature=" // + java.net.URLDecoder.decode(oauth.signature, "UTF-8"); + URLEncoder.encode(oauth.signature, "UTF-8"); // +oauth.signature; } catch (UnsupportedEncodingException e) { e.printStackTrace(); url = null; } Log.v("URL ", url); Log.v("SINGNATURE ", oauth.signature); getDataFromWeb_Get.getData(this, this, new String[]{"http://localhost/wordpress/wc-api/v3/products/", url}); } } 

I searched on Google to create a Signature, but everyone said the same code. I use this http://oauth.googlecode.com/svn/code/javascript/example/signature.html tool to verify the signature, but I can’t verify it because PostMan, this tool and the android signature were different from each other.

+3
android rest wordpress woocommerce
source share
2 answers

You must send all the parameters in sequence. How do we have the code in php

 uksort( $params, 'strcmp' ); 

See how you can sort the options in android.

+1
source share

I also have the same problem after days of research, finally I found a solution, hope this helps some others I look through various documents

1) Using the REST WooCommerce API - Introduction

2) woocommerce-rest-api-docs

3) Scribe

4) scribe: 1.3.5

After linking to the above documents and source codes, finally, I created a library that makes OAuth 1.0a "one-way" authentication for woocommerce HTTP android

Full description is added in the section of my library read by me.

Check out the library here

WoocommerceAndroidOAuth1 LIBRARY

+1
source share

All Articles