Intereting Posts
Ошибка Symfony2 Doctrine Обнаруженная сущность типа Doctrine \ Common \ Collections \ ArrayCollection в ассоциации sth # vote, но ожидающая sth \ Vote Ограничить тип и размер файла в загрузке формы PHP Отправить JSON cURL всегда возвращает «Без доступа», преобразовать в трехзначный шестнадцатеричный код цвета Расширение PHP PDO не работает в IIS Неустранимая ошибка: Не удалось OAuthException – Неавторизованный IP-адрес источника Файлы Parse Bibtex Доступ к значениям массива с использованием ключа массива от Twig Найти ближайшую долготу и широту в массиве? Изменение порядка записей с передней стороны Имя двоеточия PHP в имени свойства Добавление пользовательского пункта меню в меню WordPress Javascript NoGray Календарь наследует следующую доступную дату после того, как выбранные заблокированные даты, если сегодня заблокирован Ошибка «Class HTML not found» в Laravel 4 Изменения CodeIgniter, расширяющие драйверы баз данных для их использования с запросами UNION

Проверка IAB на стороне сервера PHP openssl_verify всегда возвращает 0

Я использую следующую функцию (серверная php) для проверки транзакции IAB v3:

Я перехожу из приложения Android:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { String signed_data=data.getStringExtra(IabHelper.RESPONSE_INAPP_PURCHASE_DATA); String signature=data.getStringExtra(IabHelper.RESPONSE_INAPP_SIGNATURE); 

У меня такое чувство, что это может быть связано с подписью, которую я прохожу. Я использую следующий метод Android для его кодирования, потому что без кодирования я получаю сообщение об ошибке:

 public String URLsafe(String text){ try { return URLEncoder.encode(text, "utf-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace();; } return null; } 

Я передаю URL

 http://www.example.com/handlepayment.php?signature=....&data=.... public String getXmlFromUrl(String url) { String xml = null; try { // defaultHttpClient DefaultHttpClient httpClient = new MyHttpClient_ALKS(myContext.getApplicationContext()); HttpPost httpPost = new HttpPost(url); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); xml = EntityUtils.toString(httpEntity); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return xml; } 

к серверу:

 function verify_play($signed_data, $signature) { global $public_key_base64; $pkey = "-----BEGIN PUBLIC KEY-----\n". chunk_split($public_key_base64, 64,"\n"). '-----END PUBLIC KEY-----'; //using PHP to create an RSA key $pkey = openssl_get_publickey($pkey); //$signature should be in binary format, but it comes as BASE64. //So, I'll convert it. $signature = base64_decode($signature); //using PHP's native support to verify the signature $result = openssl_verify( $signed_data, $signature, $pkey, OPENSSL_ALGO_SHA1); if (0 === $result) { return false; } else if (1 !== $result) { return false; } else { return true; } } ; 

Кажется, он всегда возвращает false ($ result = 0), кто-нибудь может понять, почему? Как передать незашифрованную подпись или какую кодировку использовать?

Related of "Проверка IAB на стороне сервера PHP openssl_verify всегда возвращает 0"