中國移動 CMWAP 閘道在轉發 HTTP 請求時,會在請求頭中注入用戶手機號碼,Header 名稱為 x-up-calling-line-id。MIDlet 只需在建立 HttpConnection 後讀取該 Header 即可。
HttpConnection hc = (HttpConnection) Connector.open(url);
String msisdn = hc.getHeaderField("x-up-calling-line-id");
// 返回格式範例:"8613800138000" (含國家碼 86)
if (msisdn != null && msisdn.startsWith("86")) {
msisdn = msisdn.substring(2); // 去掉國家碼
}
System.out.println("用戶手機號:" + msisdn);
x-nokia-msisdn、x-up-subno 等非標準 Header,建議兼容多鍵值輪詢。private static final String[] MSISDN_HEADERS = {
"x-up-calling-line-id", "x-nokia-msisdn", "x-up-subno", "msisdn"
};
public static String extractMsisdn(HttpConnection hc) {
for (String h : MSISDN_HEADERS) {
String v = hc.getHeaderField(h);
if (v != null && !v.isEmpty()) return normalize(v);
}
return null;
}
private static String normalize(String raw) {
raw = raw.trim();
if (raw.startsWith("+86")) raw = raw.substring(3);
else if (raw.startsWith("86")) raw = raw.substring(2);
return raw;
}
若無法獲取 Header(如用戶使用 WiFi、CMNET、或虛擬運營商),可引導用戶手動輸入並發送驗證碼校驗,或接入運營商 OAuth/OneID 體系(需企業資質)。