Android, хэш SHA1 Base64 и пост-данные из WebView

Пробую оплату с карты на webView. Я пробовал с веб-сайта html те же значения, он работает без проблем, но я пытаюсь из webView всегда говорить «хэш неверен!». Я думаю, может быть, тип кодирования - это разница. Каковы ваши мысли? Я так устал. Я работаю над этим долгое время. Пожалуйста помогите.

    String postData = null;
    try {
        String plaintext = clientid + oid + amount + okUrl + failUrl + islemtipi + taksit + rnd + sanal_pos_key;
        String hash = toSHA1(plaintext.getBytes());
        postData = "clientid = " + URLEncoder.encode(clientid, "UTF-8")
                + "&storetype = " + URLEncoder.encode(storetype, "UTF-8")
                + "&islemtipi = " + URLEncoder.encode(islemtipi, "UTF-8")
                + "&amount = " + URLEncoder.encode(amount, "UTF-8")
                + "&oid = " + URLEncoder.encode(oid, "UTF-8")
                + "&pan = " + URLEncoder.encode(pan, "UTF-8")
                + "&cv2 = " + URLEncoder.encode(cv2, "UTF-8")
                + "&Ecom_Payment_Card_ExpDate_Year = " + URLEncoder.encode(Ecom_Payment_Card_ExpDate_Year, "UTF-8")
                + "&Ecom_Payment_Card_ExpDate_Month = " + URLEncoder.encode(Ecom_Payment_Card_ExpDate_Month, "UTF-8")
                + "&cardType = " + URLEncoder.encode(cardType, "UTF-8")
                + "&firmaadi = " + URLEncoder.encode(firmaadi, "UTF-8")
                + "&taksit = " + URLEncoder.encode(taksit, "UTF-8")
                + "&okUrl = " + URLEncoder.encode(okUrl, "UTF-8")
                + "&failUrl = " + URLEncoder.encode(failUrl, "UTF-8")
                + "&rnd = " + URLEncoder.encode(rnd, "UTF-8")
                + "&hash = " + URLEncoder.encode(hash, "UTF-8");

        Log.d("plaintext: ", plaintext);
        Log.d("hash: ", hash);
        Log.d("rnd: ", rnd);
    } catch (Exception e) {
        e.printStackTrace();
    }
    if (postData != null) {
        webView.postUrl(url, postData.getBytes());
        Log.d("Web View URL: ", webView.getUrl());
        webView.setVisibility(View.VISIBLE);
        layout.setVisibility(View.GONE);
    }

public static String toSHA1(byte[] convertme) {
    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("SHA-1");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return Base64.encodeToString((md.digest(convertme)),Base64.DEFAULT);
}

В нем говорится, что вы передали хэш-ключ неправильно, означает, что либо ваш хэш-ключ неверен, либо вам нужно проверить алгоритм типа ключа SHA1 SHA-1 или что-то еще

Upendra Shah 08.07.2019 19:49

Спасибо за помощь. Вы заставили меня сосредоточиться на правильном месте.

Yunus Erdem Sıhhatlı 09.07.2019 08:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
287
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этот код работает.

public static String SHA1(String text) throws NoSuchAlgorithmException, UnsupportedEncodingException {
    String result;
    MessageDigest md = MessageDigest.getInstance("SHA-1");
    md.update(text.getBytes("iso-8859-1"), 0, text.length());
    byte[] sha1hash = md.digest();
    result = Base64.encodeToString(sha1hash, Base64.DEFAULT);
    result = result.substring(0, result.length()-1);
    return result;
}

Другие вопросы по теме