Esempio n. 1
0
 public function isValid()
 {
     if ($this->device->isAndroid()) {
         $validator = new PlayValidator(['client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'refresh_token' => env('GOOGLE_REFRESH_TOKEN')]);
         $transaction_receipt = json_decode($this->transaction->receipt);
         try {
             $response = $validator->setPackageName($transaction_receipt->packageName)->setProductId($transaction_receipt->productId)->setPurchaseToken($transaction_receipt->purchaseToken)->validate();
         } catch (\Exception $e) {
             return false;
         }
         return true;
     } else {
         if ($this->device->isIos()) {
             $validator = new iTunesValidator(iTunesValidator::ENDPOINT_PRODUCTION);
             try {
                 $response = $validator->setReceiptData($this->transaction->transactionReceipt)->validate();
             } catch (Exception $e) {
                 return false;
             }
             return $response->isValid();
         }
     }
     return false;
 }
<?php

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
$root = realpath(dirname(dirname(__FILE__)));
$library = "{$root}/library";
$path = array($library, get_include_path());
set_include_path(implode(PATH_SEPARATOR, $path));
require_once $root . '/vendor/autoload.php';
use ReceiptValidator\iTunes\Validator as iTunesValidator;
$validator = new iTunesValidator(iTunesValidator::ENDPOINT_PRODUCTION);
$receiptBase64Data = 'ewoJInNpZ25hdHVyZSIgPSAiQXBNVUJDODZBbHpOaWtWNVl0clpBTWlKUWJLOEVkZVhrNjNrV0JBWHpsQzhkWEd1anE0N1puSVlLb0ZFMW9OL0ZTOGNYbEZmcDlZWHQ5aU1CZEwyNTBsUlJtaU5HYnloaXRyeVlWQVFvcmkzMlc5YVIwVDhML2FZVkJkZlcrT3kvUXlQWkVtb05LeGhudDJXTlNVRG9VaFo4Wis0cFA3MHBlNWtVUWxiZElWaEFBQURWekNDQTFNd2dnSTdvQU1DQVFJQ0NHVVVrVTNaV0FTMU1BMEdDU3FHU0liM0RRRUJCUVVBTUg4eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUtEQXBCY0hCc1pTQkpibU11TVNZd0pBWURWUVFMREIxQmNIQnNaU0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURXpNREVHQTFVRUF3d3FRWEJ3YkdVZ2FWUjFibVZ6SUZOMGIzSmxJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNU1CNFhEVEE1TURZeE5USXlNRFUxTmxvWERURTBNRFl4TkRJeU1EVTFObG93WkRFak1DRUdBMVVFQXd3YVVIVnlZMmhoYzJWU1pXTmxhWEIwUTJWeWRHbG1hV05oZEdVeEd6QVpCZ05WQkFzTUVrRndjR3hsSUdsVWRXNWxjeUJUZEc5eVpURVRNQkVHQTFVRUNnd0tRWEJ3YkdVZ1NXNWpMakVMTUFrR0ExVUVCaE1DVlZNd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNclJqRjJjdDRJclNkaVRDaGFJMGc4cHd2L2NtSHM4cC9Sd1YvcnQvOTFYS1ZoTmw0WElCaW1LalFRTmZnSHNEczZ5anUrK0RyS0pFN3VLc3BoTWRkS1lmRkU1ckdYc0FkQkVqQndSSXhleFRldngzSExFRkdBdDFtb0t4NTA5ZGh4dGlJZERnSnYyWWFWczQ5QjB1SnZOZHk2U01xTk5MSHNETHpEUzlvWkhBZ01CQUFHamNqQndNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqQkJnd0ZvQVVOaDNvNHAyQzBnRVl0VEpyRHRkREM1RllRem93RGdZRFZSMFBBUUgvQkFRREFnZUFNQjBHQTFVZERnUVdCQlNwZzRQeUdVakZQaEpYQ0JUTXphTittVjhrOVRBUUJnb3Foa2lHOTJOa0JnVUJCQUlGQURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQUVhU2JQanRtTjRDL0lCM1FFcEszMlJ4YWNDRFhkVlhBZVZSZVM1RmFaeGMrdDg4cFFQOTNCaUF4dmRXLzNlVFNNR1k1RmJlQVlMM2V0cVA1Z204d3JGb2pYMGlreVZSU3RRKy9BUTBLRWp0cUIwN2tMczlRVWU4Y3pSOFVHZmRNMUV1bVYvVWd2RGQ0TndOWXhMUU1nNFdUUWZna1FRVnk4R1had1ZIZ2JFL1VDNlk3MDUzcEdYQms1MU5QTTN3b3hoZDNnU1JMdlhqK2xvSHNTdGNURXFlOXBCRHBtRzUrc2s0dHcrR0szR01lRU41LytlMVFUOW5wL0tsMW5qK2FCdzdDMHhzeTBiRm5hQWQxY1NTNnhkb3J5L0NVdk02Z3RLc21uT09kcVRlc2JwMGJzOHNuNldxczBDOWRnY3hSSHVPTVoydG04bnBMVW03YXJnT1N6UT09IjsKCSJwdXJjaGFzZS1pbmZvIiA9ICJld29KSW05eWFXZHBibUZzTFhCMWNtTm9ZWE5sTFdSaGRHVXRjSE4wSWlBOUlDSXlNREV5TFRBMExUTXdJREE0T2pBMU9qVTFJRUZ0WlhKcFkyRXZURzl6WDBGdVoyVnNaWE1pT3dvSkltOXlhV2RwYm1Gc0xYUnlZVzV6WVdOMGFXOXVMV2xrSWlBOUlDSXhNREF3TURBd01EUTJNVGM0T0RFM0lqc0tDU0ppZG5KeklpQTlJQ0l5TURFeU1EUXlOeUk3Q2draWRISmhibk5oWTNScGIyNHRhV1FpSUQwZ0lqRXdNREF3TURBd05EWXhOemc0TVRjaU93b0pJbkYxWVc1MGFYUjVJaUE5SUNJeElqc0tDU0p2Y21sbmFXNWhiQzF3ZFhKamFHRnpaUzFrWVhSbExXMXpJaUE5SUNJeE16TTFOems0TXpVMU9EWTRJanNLQ1NKd2NtOWtkV04wTFdsa0lpQTlJQ0pqYjIwdWJXbHVaRzF2WW1Gd2NDNWtiM2R1Ykc5aFpDSTdDZ2tpYVhSbGJTMXBaQ0lnUFNBaU5USXhNVEk1T0RFeUlqc0tDU0ppYVdRaUlEMGdJbU52YlM1dGFXNWtiVzlpWVhCd0xrMXBibVJOYjJJaU93b0pJbkIxY21Ob1lYTmxMV1JoZEdVdGJYTWlJRDBnSWpFek16VTNPVGd6TlRVNE5qZ2lPd29KSW5CMWNtTm9ZWE5sTFdSaGRHVWlJRDBnSWpJd01USXRNRFF0TXpBZ01UVTZNRFU2TlRVZ1JYUmpMMGROVkNJN0Nna2ljSFZ5WTJoaGMyVXRaR0YwWlMxd2MzUWlJRDBnSWpJd01USXRNRFF0TXpBZ01EZzZNRFU2TlRVZ1FXMWxjbWxqWVM5TWIzTmZRVzVuWld4bGN5STdDZ2tpYjNKcFoybHVZV3d0Y0hWeVkyaGhjMlV0WkdGMFpTSWdQU0FpTWpBeE1pMHdOQzB6TUNBeE5Ub3dOVG8xTlNCRmRHTXZSMDFVSWpzS2ZRPT0iOwoJImVudmlyb25tZW50IiA9ICJTYW5kYm94IjsKCSJwb2QiID0gIjEwMCI7Cgkic2lnbmluZy1zdGF0dXMiID0gIjAiOwp9';
try {
    $response = $validator->setReceiptData($receiptBase64Data)->validate();
} catch (Exception $e) {
    echo 'got error = ' . $e->getMessage() . PHP_EOL;
}
if ($response->isValid()) {
    echo 'Receipt is valid.' . PHP_EOL;
    echo 'Receipt data = ' . print_r($response->getReceipt()) . PHP_EOL;
} else {
    echo 'Receipt is not valid.' . PHP_EOL;
    echo 'Receipt result code = ' . $response->getResultCode() . PHP_EOL;
}
// https://www.youtube.com/watch?v=jB5TvzzggWw
require_once 'vendor/autoload.php';
use ReceiptValidator\iTunes\Validator as ITunesValidator, ReceiptValidator\GooglePlay\Validator as PlayValidator;
$app = new \Slim\App();
$config = simplexml_load_file('config.xml');
function sendResponse($res, $message, $status = 200, $options = [])
{
    $options = array_merge(['success' => $status === 200, 'status' => $status, 'message' => $message], $options);
    $res = $res->withStatus($status)->withHeader('Content-type', 'application/json');
    $res->getBody()->write(json_encode($options));
    return $res;
}
$app->get('/validate/apple/{receiptId}', function ($req, $res, $args) use($config) {
    $endpoint = strtoupper("{$config->apple->environment}") === 'PRODUCTION' ? ITunesValidator::ENDPOINT_PRODUCTION : ITunesValidator::ENDPOINT_SANDBOX;
    $receipt = $args['receiptId'];
    $validator = new ITunesValidator($endpoint);
    try {
        $response = $validator->setReceiptData($receipt)->validate();
    } catch (\Exception $e) {
        return sendResponse($res, $e->getMessage(), 500);
    }
    if ($response->isValid()) {
        return sendResponse($res, 'This receipt is valid.', 200, ['receipt' => $response->getReceipt()]);
    } else {
        return sendResponse($res, 'This receipt is invalid.', 403, ['result_code' => $response->getResultCode()]);
    }
});
$app->get('/validate/google/product/{productId}/token/{purchaseToken}', function ($req, $res, $args) use($config) {
    $clientId = "{$config->google->clientId}";
    $clientSecret = "{$config->google->clientSecret}";
    $refreshToken = "{$config->google->refreshToken}";
 public function testValidateWithInvalidReceipt()
 {
     $response = $this->validator->setReceiptData($this->testInvaildReceiptData)->validate();
     $this->assertEquals(Response::RESULT_DATA_MALFORMED, $response->getResultCode());
     $this->assertFalse($response->isValid(), 'receipt must be invalid');
 }