Как получить oauth_signature с Hmac SHA1 в Android с Volley с использованием Kotlin? - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь получить ответ от woo commerce api , используя Volley ' GET Метод в Kotlin . Я сгенерировал все необходимые параметры, но не смог получить ответ.

Формат для URL GET должен быть таким:

http://www.tronosoft.in/demo/wordpress/wp-json/wc/v2/products?oauth_consumer_key=ck_22694c9d56cc1e03cff4cc2615xxxxxxxxxxx&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1561550709&oauth_nonce=cd22f6f0-d37e-46b9-9ae2-b49e4c33d6aa&oauth_version=1.0&oauth_signature=W0JAOThkMGZkNQ==

Код, который я использую для генерации всех параметров:

fun productApi() {
    //val oauth = AuthPermission() //Auth0(String(""))
    val consumerKey = "ck_22694c9d56cc1e03cff4cc2615xxxxxxxxxxxx"
    val consumerSecret = "cs_57ed10e0cb3e2de073184983ffxxxxxxxxxxxx"
    val nonce = UUID.randomUUID()
    val time: Long = System.currentTimeMillis() / 1000
    Log.d("PRODUCTTIME", time.toString())
    val url = baseUrl + "products?oauth_consumer_key=ck_22694c9d56cc1e03cff4cc2615xxxxxxxxxxxx&oauth_signature_method=HMAC-SHA1&oauth_timestamp=$time&oauth_nonce=mKcxEHLuAVk&oauth_version=1.0"

    val signature = Mac.getInstance("HmacSHA1")
    val secret = SecretKeySpec(consumerKey.toByteArray(), signature.algorithm)
    signature.init(secret)


    Log.d("PRODUCTNAL", signature.toString())

    val digssss = signature.doFinal(url.toByteArray())

    Log.d("PRODUCTDIG", digssss.toString())

    val result = Base64.encodeUrlSafe(digssss.toString())

    Log.d("PRODUCTSIG", result.toString())

    val urlT = baseUrl + "products?oauth_consumer_key=" + consumerKey + "&oauth_signature_method=HMAC-SHA1&oauth_timestamp=$time&oauth_nonce=$nonce&oauth_version=1.0&oauth_signature=$result"

    Log.d("PRODUCTURL", urlT)

    val request = object : StringRequest(Method.GET, urlT, Response.Listener { response ->
        Log.d("PRODUCTLIST", response.toString())
    }, Response.ErrorListener { error ->
        Log.d("PRODUCTERROR", error.toString())
    }){}
    val requestQ = Volley.newRequestQueue(context)
    requestQ.add(request)
}

Но я получаю сообщение об ошибке com.android.volley.AuthFailureError И в Интернете это показывает, что Неверная подпись - предоставленная подпись не совпадает

Я посмотрел другие вопросы на SO по этой проблеме, но ни один из них не в залпе с kotlin.

...