Как подтвердить платежную информацию в приложении с помощью Google Play Market

Я делаю приложение, которое будет включать выставление счетов. У меня дневной работает иначе.

Приложение ссылается на сервер PHP. Я хочу сохранить информацию о покупках в приложении на своем сервере и подтвердить ее с помощью Google Play Market.

Мне удалось сохранить информацию о покупках в приложении на моем сервере, но я не могу подтвердить это в Google Play Market.

Я попытался использовать эту библиотеку, но вижу только следующее:

«Эта библиотека (пока) не поддерживает проверку покупок, сделанных через In-app Billing в Google Play».

Возможно ли то, что я хочу сделать? Если да, то как?

Вот мой PHP:

$signedData = $request['signedData'];
$signature = $request['signature'];

$signedData = str_replace('\\', '', $signedData);
$signature = str_replace('\\', '', $signature);

define('PUBLIC_KEY', 'MY GOOGLE MARKET PUBLIC KEY');
define('PACKAGE_NAME', 'MY APP PACKAGE NAME');

$validator = new AndroidMarket_Licensing_ResponseValidator(PUBLIC_KEY, PACKAGE_NAME);
$valid = $validator->verify($signedData, $signature);

if($valid){
    $result['respon'] = 'sucessed';
} else {
    $result['respon'] = 'fail';
}

SendData($result);

$db -> close();

person uprising    schedule 14.04.2012    source источник
comment
Возможный дубликат stackoverflow.com/questions/5645418/   -  person Femi    schedule 14.04.2012
comment
Этот другой вопрос имеет подход, который я использовал. stackoverflow .com/questions/8763260/   -  person Evan Siroky    schedule 02.10.2012


Ответы (1)


Да, это вполне возможно. Также Google советует вам сделать это в своих настройках безопасности, чтобы сделать это наилучшим образом. Следующий блок кода — это код, который я использую в производстве благодаря https://gist.github.com/menny< /а>

Рекомендации Google: https://developer.android.com/google/play/billing/billing_best_practices.html

Следующий код возвращает true или false. Вы можете использовать packageName и orderId для его уникальности, чтобы никто не смог провести повторную атаку.

Ответ на вопрос:

function verify_market_in_app($signed_data, $signature, $public_key_base64) 
{
    $key =  "-----BEGIN PUBLIC KEY-----\n".
        chunk_split($public_key_base64, 64,"\n").
        '-----END PUBLIC KEY-----';   
    //using PHP to create an RSA key
    $key = openssl_get_publickey($key);
    //$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,
            $key,
            OPENSSL_ALGO_SHA1);
    if (0 === $result) 
    {
        return false;
    }
    else if (1 !== $result)
    {
        return false;
    }
    else 
    {
        return true;
    }
} 
person Sayonara    schedule 18.01.2018