Exemplo n.º 1
0
function _amazon_verify_token($user_id, $product_sku, $subs_sku, $token, $base_url, $amazonSecret, $proxy_server = '', $proxy_port = '')
{
    // see https://developer.amazon.com/sdk/in-app-purchasing/documentation/rvs.html
    $comments = array();
    $url = _amazon_build_endpoint_url('verify', $user_id, $token, $base_url, $amazonSecret);
    $comments[] = "Base URL: {$base_url}";
    $status = 'UNKNOWN';
    $result = curl_get_json($url, $proxy_server, $proxy_port);
    $http_code = $result['info']['http_code'];
    $comments[] = "HTTP code: {$http_code}";
    $comments[] = 'HTTP error: ' . $result['error'];
    switch ($http_code) {
        case 400:
            $status = 'SUBSCRIPTIONEXPIRED';
            break;
        case 499:
            $token = _amazon_renew_token($user_id, $product_sku, $subs_sku, $token, $base_url, $amazonSecret);
            if (isset($token) && strlen($token) > 0) {
                return _amazon_verify_token($user_id, $product_sku, $subs_sku, $token, $base_url, $amazonSecret);
            }
            break;
        case 200:
            $status = 'SUBSCRIPTIONEXPIRED';
            $response_json = $result['json'];
            $itemType = $response_json->itemType;
            $sku = $response_json->sku;
            if ($itemType == 'ENTITLED' && $sku == $product_sku) {
                $status = 'OK';
            } else {
                if ($itemType == 'SUBSCRIPTION' && $sku == $subs_sku) {
                    $endDate = $response_json->endDate;
                    if (!isset($endDate) || $endDate == null || $endDate == '') {
                        $status = 'OK';
                    }
                }
            }
            break;
    }
    return array('status' => $status, 'comments' => $comments);
}
function _amazon_verify_token($user_id, $product_sku, $subs_sku, $token, $base_url, $amazonSecret, $proxy_server = '', $proxy_port = '', $amazon_rvs = '2.0')
{
    // see https://developer.amazon.com/sdk/in-app-purchasing/documentation/rvs.html
    $comments = array();
    $url = _amazon_build_endpoint_url('verify', $user_id, $token, $base_url, $amazonSecret, $amazon_rvs);
    $comments[] = 'RVS: ' . $amazon_rvs;
    $comments[] = "Base URL: {$base_url}";
    $status = 'UNKNOWN';
    $result = curl_get_json($url, $proxy_server, $proxy_port);
    $http_code = $result['info']['http_code'];
    $comments[] = "HTTP code: {$http_code}";
    $comments[] = 'HTTP error: ' . $result['error'];
    switch ($http_code) {
        case 400:
            $status = 'SUBSCRIPTIONEXPIRED';
            break;
        case 498:
            $status = 'SUBSCRIPTIONEXPIRED';
            if (isset($token) && strlen($token) > 0) {
                $comments[] = "Error: Invalid token.";
            } else {
                $comments[] = "Error: No token.";
            }
            break;
        case 499:
            $token = _amazon_renew_token($user_id, $product_sku, $subs_sku, $token, $base_url, $amazonSecret, $amazon_rvs);
            if (isset($token) && strlen($token) > 0) {
                return _amazon_verify_token($user_id, $product_sku, $subs_sku, $token, $base_url, $amazonSecret, $amazon_rvs);
            }
            break;
        case 200:
            $status = 'SUBSCRIPTIONEXPIRED';
            $response_json = $result['json'];
            if (empty($response_json)) {
                $comments[] = "Error: Did not receive valid JSON from the response.";
            } else {
                if ($amazon_rvs == '1.0') {
                    //IAP v2 is RVS v1
                    $productType = $response_json->productType;
                    $productId = $response_json->productId;
                    if ($productType == 'ENTITLED' && $productId == $product_sku) {
                        $status = 'OK';
                    } elseif ($productType == 'SUBSCRIPTION' && $productId == $subs_sku) {
                        $endDate = $response_json->cancelDate;
                        if (!isset($cancelDate) || $cancelDate == null || $cancelDate == '') {
                            $status = 'OK';
                        }
                    }
                } else {
                    //IAP v1 is RVS v2
                    if (!empty($response_json->itemType)) {
                        $itemType = $response_json->itemType;
                        $sku = $response_json->sku;
                        if ($itemType == 'ENTITLED' && $sku == $product_sku) {
                            $status = 'OK';
                        } elseif ($itemType == 'SUBSCRIPTION' && $sku == $subs_sku) {
                            $endDate = $response_json->endDate;
                            if (!isset($endDate) || $endDate == null || $endDate == '') {
                                $status = 'OK';
                            }
                        }
                    }
                }
            }
            break;
    }
    return array('status' => $status, 'comments' => $comments);
}