example español android wordpress rest woocommerce oauth-1.0a

android - español - wordpress rest api authentication example



Firma no válida: la firma proporcionada no coincide con la API REST de WooCommerce llamando desde Android (2)

Debe enviar todos los parámetros en la secuencia. Como si tuviéramos un código en php

uksort( $params, ''strcmp'' );

Vea cómo puede ordenar los parámetros en Android.

Soy un desarrollador de Android y nuevo en Woocommerce y comencé a consumir el servicio REST con autenticación Oauth1.0. Recibo la respuesta adecuada de PostMan (complemento RestClient) y obtengo el error "Firma no válida" mientras llamo desde mi aplicación de Android.

Aquí está mi código de Android:

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}); } }

He buscado en Google para generar Firma, pero todos decían el mismo código. Utilizo esta herramienta http://oauth.googlecode.com/svn/code/javascript/example/signature.html para validar la firma, pero no pude validar porque PostMan, esta herramienta y la firma generada por Android eran diferentes entre sí.


También tengo el mismo problema después de días de investigación finalmente encontré la solución espero que esto ayude a algunos otros paso por varios documentos

1) Uso de la API REST de WooCommerce - Introducción

2) woocommerce-rest-api-docs

3) Escriba

4) escriba: 1.3.5

Después de referirme a los documentos anteriores y a los códigos fuente, finalmente creé una biblioteca que realiza la autenticación de "una sola pierna" OAuth 1.0a para woocommerce HTTP android

La descripción completa se ha agregado en la sección "Léame" de mi biblioteca

Compruebe la biblioteca aquí

WoocommerceAndroidOAuth1 BIBLIOTECA