diff --git a/index.html b/index.html new file mode 100644 index 0000000..56fdbe6 --- /dev/null +++ b/index.html @@ -0,0 +1,669 @@ + + + + + + استعلام بيانات IMEI لهواتف Motorola + + + +
+

استعلام بيانات Motorola عبر IMEI

+ + +

يمكنك إدخال عدة IMEI مفصولين بمسافة، فاصلة، أو سطر جديد.

+
+ + +
+
+ + +
+ + + + diff --git a/proxy.php b/proxy.php new file mode 100644 index 0000000..2c8086a --- /dev/null +++ b/proxy.php @@ -0,0 +1,183 @@ + $imei]; + +if (!preg_match('/^\d{15}$/', $imei)) { + echo json_encode($baseResponse + ['error' => 'imei parameter must be a 15-digit number.']); + exit; +} + +function extractDeviceResult(string $xml): ?array +{ + libxml_use_internal_errors(true); + $simple = @simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); + if ($simple === false) { + return null; + } + + $nodes = $simple->xpath('//*[local-name()="device_unlock_code_result"]'); + if (!$nodes || !isset($nodes[0])) { + return null; + } + + return json_decode(json_encode($nodes[0]), true) ?? null; +} + +function fieldValue(array $source, string $key): ?string +{ + if (!array_key_exists($key, $source)) { + return null; + } + $value = $source[$key]; + + if (is_array($value)) { + $value = array_filter($value, static function ($item) { + if (is_array($item)) { + return !empty(array_filter($item, static fn($nested) => $nested !== null && $nested !== '' && $nested !== [])); + } + return $item !== null && $item !== '' && $item !== []; + }); + + if (empty($value)) { + return null; + } + + $value = reset($value); + } + + if ($value === null) { + return null; + } + + $value = trim((string)$value); + + return $value === '' ? null : $value; +} + +function orNo(?string $value): string +{ + return $value === null ? 'NO' : $value; +} + +function normalizeRawValue($value) +{ + if (is_array($value)) { + if (empty($value)) { + return 'NO'; + } + $normalized = []; + foreach ($value as $k => $v) { + $normalized[$k] = normalizeRawValue($v); + } + return $normalized; + } + + $value = trim((string)$value); + return $value === '' ? 'NO' : $value; +} + +$soapPayload = << + + + MST + NS1xpq#Y + IMEI + {$imei} + + Y + + + + + +XML; + +$ch = curl_init('https://wsgw.motorola.com/IQS_WARRANTY_CHECK_1.0'); +curl_setopt_array($ch, [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_TIMEOUT => 30, + CURLOPT_CONNECTTIMEOUT => 12, + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => $soapPayload, + CURLOPT_HTTPHEADER => [ + 'Authorization: Basic bGVub3ZvMjAxODpMZW5vdm9AMjAxOA==', + 'Content-Type: text/xml; charset=utf-8', + 'Accept: text/xml', + 'Host: wsgw.motorola.com', + 'Content-Length: ' . strlen($soapPayload), + ], +]); + +$response = curl_exec($ch); +$errno = curl_errno($ch); +$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); +curl_close($ch); + +if ($errno !== 0 || $httpCode !== 200 || empty($response)) { + echo json_encode($baseResponse + ['error' => 'Motorola service is unavailable right now.']); + exit; +} + +$resultNode = extractDeviceResult($response); + +if (!is_array($resultNode)) { + echo json_encode($baseResponse + ['error' => 'Unable to parse Motorola response.']); + exit; +} + +$model = fieldValue($resultNode, 'carrier_model_info') ?? fieldValue($resultNode, 'external_marketing_name'); +$carrier = fieldValue($resultNode, 'ship_to_cust_name') + ?? fieldValue($resultNode, 'sold_to_cust_name') + ?? fieldValue($resultNode, 'direct_ship_cust_name') + ?? $model; +$country = fieldValue($resultNode, 'country_to_ship') + ?? fieldValue($resultNode, 'direct_ship_country_code') + ?? fieldValue($resultNode, 'warranty_country_code'); + +$rawUnlock = fieldValue($resultNode, 'master_service_lock') + ?? fieldValue($resultNode, 'master_lock_code') + ?? fieldValue($resultNode, 'deviceunlockcode'); + +if ($rawUnlock !== null && strpos($imei, $rawUnlock) === 0 && strlen($rawUnlock) === 8) { + $rawUnlock = 'No Code'; +} + +$lock4 = fieldValue($resultNode, 'lock_4') ?? $rawUnlock; +$lock5 = fieldValue($resultNode, 'lock_5'); + +$derived = [ + 'imei' => orNo(fieldValue($resultNode, 'serial_no') ?? $imei), + 'serial_no_type' => orNo(fieldValue($resultNode, 'serial_no_type') ?? 'IMEI'), + 'model' => orNo($model), + 'carrier' => orNo($carrier), + 'country' => orNo($country), + 'unlock_code' => orNo($rawUnlock), + 'lock_4' => orNo($lock4), + 'lock_5' => orNo($lock5), + 'status' => orNo(fieldValue($resultNode, 'status') ?? fieldValue($resultNode, 'status_code')), + 'device_type' => orNo(fieldValue($resultNode, 'device_type')), + 'apc' => orNo(fieldValue($resultNode, 'apc')), + 'message' => orNo(fieldValue($resultNode, 'response_message')), +]; + +$payload = array_merge($derived, [ + 'customer' => [ + 'ship_to' => orNo(fieldValue($resultNode, 'ship_to_cust_name')), + 'sold_to' => orNo(fieldValue($resultNode, 'sold_to_cust_name')), + 'direct_ship' => orNo(fieldValue($resultNode, 'direct_ship_cust_name')), + ], + 'country_codes' => [ + 'ship' => orNo(fieldValue($resultNode, 'country_to_ship')), + 'direct' => orNo(fieldValue($resultNode, 'direct_ship_country_code')), + 'warranty' => orNo(fieldValue($resultNode, 'warranty_country_code')), + ], + 'raw' => normalizeRawValue($resultNode), +]); + +echo json_encode($payload, JSON_UNESCAPED_UNICODE);