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); }