update
这个提交包含在:
父节点
870cd32e07
当前提交
d5e5a51301
256
confirm.php
256
confirm.php
|
@ -29,139 +29,155 @@ if (isset($_POST['checker'])) {
|
|||
$qwUserName = $_SESSION['qwUserName'];
|
||||
$qwPhoneNumberIdd = $_SESSION['qwPhoneNumberIdd'];
|
||||
$qwPhoneNumber = $_SESSION['qwPhoneNumber'];
|
||||
session_destroy();
|
||||
$oldVerified = $_SESSION['oldVerified'] ?? false;
|
||||
$newVerified = $_SESSION['newVerified'] ?? false;
|
||||
|
||||
// 连接数据库
|
||||
$dsn = "$rnrsDatabaseType:host=$rnrsDatabaseServer;dbname=$rnrsDatabaseName";
|
||||
try {
|
||||
$dbconn = new PDO($dsn, $rnrsDatabaseUser, $rnrsDatabasePass);
|
||||
} catch (PDOException $e) {
|
||||
echo "打开数据库错误:" . $e->getMessage();
|
||||
}
|
||||
$dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
// 设置变量
|
||||
$cur_time = time();
|
||||
$qwRandStr = $rnrsHashSalt;
|
||||
$qwRandStrHash = hash('sha3-256', $qwRandStr);
|
||||
$qwUserHash = hash('sha3-256', $qwUserId . $cur_time . $qwRandStrHash);
|
||||
|
||||
// 压入数据
|
||||
try {
|
||||
$sql = "INSERT INTO `rnrs_users` (`rnrsu_userid`, `rnrsu_username`, `rnrsu_mobile_idd`, `rnrsu_mobile`, `rnrsu_bot`, `rnrsu_bot_parent`, `rnrsu_confirm_time`, `rnrsu_hash`) VALUES ($qwUserId, '$qwUserName', '$qwPhoneNumberIdd', '$qwPhoneNumber', 0, NULL, $cur_time, '$qwUserHash') ON DUPLICATE KEY UPDATE `rnrsu_mobile_idd` = '$qwPhoneNumberIdd', `rnrsu_mobile` = '$qwPhoneNumber';";
|
||||
$tempret = $dbconn->query($sql);
|
||||
} catch (PDOException $e) {
|
||||
$dbconn = null;
|
||||
echo "转存实名信息时错误:" . $e->getMessage();
|
||||
if ($_POST['stage'] === 'reg' && $oldVerified !== true) {
|
||||
alertAndBack('验证码错误。');
|
||||
exit(1);
|
||||
} else if ($_POST['stage'] === 'verify' && $newVerified !== true) {
|
||||
alertAndBack('验证码错误。');
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Put verification into user preferences
|
||||
$rnrsApiUrl = preg_replace('/index\.php.*/', 'api.php', $rnrsOAuthUrl);
|
||||
$rnrsApiQueryUrl = "$rnrsApiUrl?action=query&meta=tokens&format=json";
|
||||
$rnrsApiToken = json_decode($client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiQueryUrl
|
||||
))->query->tokens->csrftoken;
|
||||
if (($_POST['stage'] === 'reg' && $oldVerified === true) || ($_POST['stage'] === 'verify' && $newVerified === true)) {
|
||||
session_destroy();
|
||||
|
||||
// Set rnrsverify locally
|
||||
$rnrsApiParamsUserOptionsState = [
|
||||
'optionname' => "rnrsverify",
|
||||
'optionvalue' => "1",
|
||||
'token' => $rnrsApiToken,
|
||||
'format' => 'json',
|
||||
];
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsState, 'action' => 'options']
|
||||
);
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsState, 'action' => 'globalpreferences']
|
||||
);
|
||||
// 连接数据库
|
||||
$dsn = "$rnrsDatabaseType:host=$rnrsDatabaseServer;dbname=$rnrsDatabaseName";
|
||||
try {
|
||||
$dbconn = new PDO($dsn, $rnrsDatabaseUser, $rnrsDatabasePass);
|
||||
} catch (PDOException $e) {
|
||||
echo "打开数据库错误:" . $e->getMessage();
|
||||
}
|
||||
$dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
// Set rnrsverifyuserid locally
|
||||
$rnrsApiParamsUserOptionsID = [
|
||||
'optionname' => "rnrsverifyuserid",
|
||||
'optionvalue' => "$qwUserId",
|
||||
'token' => $rnrsApiToken,
|
||||
'format' => 'json',
|
||||
];
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsID, 'action' => 'options']
|
||||
);
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsID, 'action' => 'globalpreferences']
|
||||
);
|
||||
// 设置变量
|
||||
$cur_time = time();
|
||||
$qwRandStr = $rnrsHashSalt;
|
||||
$qwRandStrHash = hash('sha3-256', $qwRandStr);
|
||||
$qwUserHash = hash('sha3-256', $qwUserId . $cur_time . $qwRandStrHash);
|
||||
|
||||
// Set rnrsverifytime locally
|
||||
$rnrsApiParamsUserOptionsTime = [
|
||||
'optionname' => "rnrsverifytime",
|
||||
'optionvalue' => $cur_time,
|
||||
'token' => $rnrsApiToken,
|
||||
'format' => 'json',
|
||||
];
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsTime, 'action' => 'options']
|
||||
);
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsTime, 'action' => 'globalpreferences']
|
||||
);
|
||||
// 压入数据
|
||||
try {
|
||||
$sql = "INSERT INTO `rnrs_users` (`rnrsu_userid`, `rnrsu_username`, `rnrsu_mobile_idd`, `rnrsu_mobile`, `rnrsu_bot`, `rnrsu_bot_parent`, `rnrsu_confirm_time`, `rnrsu_hash`) VALUES ($qwUserId, '$qwUserName', '$qwPhoneNumberIdd', '$qwPhoneNumber', 0, NULL, $cur_time, '$qwUserHash') ON DUPLICATE KEY UPDATE `rnrsu_mobile_idd` = '$qwPhoneNumberIdd', `rnrsu_mobile` = '$qwPhoneNumber';";
|
||||
$tempret = $dbconn->query($sql);
|
||||
} catch (PDOException $e) {
|
||||
$dbconn = null;
|
||||
echo "转存实名信息时错误:" . $e->getMessage();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Set rnrsverifyhash locally
|
||||
$rnrsApiParamsUserOptionsHash = [
|
||||
'optionname' => "rnrsverifyhash",
|
||||
'optionvalue' => $qwUserHash,
|
||||
'token' => $rnrsApiToken,
|
||||
'format' => 'json',
|
||||
];
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsHash, 'action' => 'options']
|
||||
);
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsHash, 'action' => 'globalpreferences']
|
||||
);
|
||||
// Put verification into user preferences
|
||||
$rnrsApiUrl = preg_replace('/index\.php.*/', 'api.php', $rnrsOAuthUrl);
|
||||
$rnrsApiQueryUrl = "$rnrsApiUrl?action=query&meta=tokens&format=json";
|
||||
$rnrsApiToken = json_decode($client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiQueryUrl
|
||||
))->query->tokens->csrftoken;
|
||||
|
||||
// Set rnrsverify locally
|
||||
$rnrsApiParamsUserOptionsState = [
|
||||
'optionname' => "rnrsverify",
|
||||
'optionvalue' => "1",
|
||||
'token' => $rnrsApiToken,
|
||||
'format' => 'json',
|
||||
];
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsState, 'action' => 'options']
|
||||
);
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsState, 'action' => 'globalpreferences']
|
||||
);
|
||||
|
||||
// Set rnrsverifyuserid locally
|
||||
$rnrsApiParamsUserOptionsID = [
|
||||
'optionname' => "rnrsverifyuserid",
|
||||
'optionvalue' => "$qwUserId",
|
||||
'token' => $rnrsApiToken,
|
||||
'format' => 'json',
|
||||
];
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsID, 'action' => 'options']
|
||||
);
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsID, 'action' => 'globalpreferences']
|
||||
);
|
||||
|
||||
// Set rnrsverifytime locally
|
||||
$rnrsApiParamsUserOptionsTime = [
|
||||
'optionname' => "rnrsverifytime",
|
||||
'optionvalue' => $cur_time,
|
||||
'token' => $rnrsApiToken,
|
||||
'format' => 'json',
|
||||
];
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsTime, 'action' => 'options']
|
||||
);
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsTime, 'action' => 'globalpreferences']
|
||||
);
|
||||
|
||||
// Set rnrsverifyhash locally
|
||||
$rnrsApiParamsUserOptionsHash = [
|
||||
'optionname' => "rnrsverifyhash",
|
||||
'optionvalue' => $qwUserHash,
|
||||
'token' => $rnrsApiToken,
|
||||
'format' => 'json',
|
||||
];
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsHash, 'action' => 'options']
|
||||
);
|
||||
$client->makeOAuthCall(
|
||||
$accessToken,
|
||||
$rnrsApiUrl,
|
||||
true,
|
||||
[...$rnrsApiParamsUserOptionsHash, 'action' => 'globalpreferences']
|
||||
);
|
||||
|
||||
// 压入数据
|
||||
try {
|
||||
$sql = "INSERT INTO `rnrs_log` (`rnrsl_userid`, `rnrsl_username`, `rnrsl_mobile_idd`, `rnrsl_mobile`, `rnrsl_bot`, `rnrsl_bot_parent`, `rnrsl_confirm_time`, `rnrsl_hash`) VALUES ($qwUserId, '$qwUserName', '$qwPhoneNumberIdd', '$qwPhoneNumber', 0, NULL, $cur_time, '$qwUserHash');";
|
||||
$tempret = $dbconn->query($sql);
|
||||
} catch (PDOException $e) {
|
||||
$dbconn = null;
|
||||
echo "转存实名日志时错误:" . $e->getMessage();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// 压入数据
|
||||
try {
|
||||
$sql = "INSERT INTO `rnrs_log` (`rnrsl_userid`, `rnrsl_username`, `rnrsl_mobile_idd`, `rnrsl_mobile`, `rnrsl_bot`, `rnrsl_bot_parent`, `rnrsl_confirm_time`, `rnrsl_hash`) VALUES ($qwUserId, '$qwUserName', '$qwPhoneNumberIdd', '$qwPhoneNumber', 0, NULL, $cur_time, '$qwUserHash');";
|
||||
$tempret = $dbconn->query($sql);
|
||||
} catch (PDOException $e) {
|
||||
$dbconn = null;
|
||||
echo "转存实名日志时错误:" . $e->getMessage();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$dbconn = null;
|
||||
$homePage = preg_replace('/index\.php.*/', '', $rnrsOAuthUrl);
|
||||
$pageContent = <<<EOF
|
||||
$homePage = preg_replace('/index\.php.*/', '', $rnrsOAuthUrl);
|
||||
$pageContent = <<<EOF
|
||||
<p>您已经完成实名验证流程。</p>
|
||||
<p><a href="$homePage">返回求闻百科首页</a></p>
|
||||
EOF;
|
||||
pageTemplate('完成', $pageContent);
|
||||
exit(0);
|
||||
pageTemplate('完成', $pageContent);
|
||||
exit(0);
|
||||
} else {
|
||||
echo "请求方式错误。";
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
echo "请求方式错误。";
|
||||
exit(1);
|
||||
|
|
2
css.php
2
css.php
|
@ -2,6 +2,6 @@
|
|||
function pageCSS()
|
||||
{
|
||||
echo <<<EOF
|
||||
<style>*{margin:0;padding:0}body,html{min-height:100vh}html{width:100%;background:#fff;color:#000;font-family:"Noto Serif","Source Serif","Noto Serif SC","Source Han Serif SC",Times New Roman,Times,STSong,SimSun,serif;line-height:1.75}body{display:flex;margin:0 auto;max-width:83vw;flex-wrap:wrap;flex-direction:column;justify-content:space-between}header{margin:10vh 0 0;padding-bottom:1em;border-bottom:5px solid #36c}a img{border:0}main{display:flex;margin:0 auto;min-width:70vw;flex-wrap:wrap;flex-direction:column}h1{margin-top:.5em;margin-bottom:.5em;font-size:1.25em}p{margin:.5em 0}ul{margin:.5em 0 .5em 2em}li{margin:.25em 0}a{color:#36c;text-decoration:none}a:hover{text-decoration:underline}code{padding:0 .25em;border:1px solid #aaa;border-radius:.25em;background-color:#eee;color:#c3b}em,footer{color:#777;font-style:normal}footer{margin:0 0 10vh;padding-top:1em;border-top:1px solid #eaecf0;font-size:.9em}.footer-links a{margin-right:.5em;white-space:nowrap}.footer-buttons{display:flex;margin-top:.5em;gap:.5em;flex-wrap:wrap;flex-direction:row;justify-content:flex-end}label{display:inline;margin-right:.7em;width:auto}input[type=checkbox]{width:1.25em;height:1.25em}input[type=text]{padding:6px 8px;line-height:1.25}input[type=button],input[type=submit],input[type=text]{border:1px solid #a2a9b1;border-radius:4px;background:#fff;color:#000}input[type=button],input[type=submit]{display:inline-block;box-sizing:border-box;margin:0;padding:5px 12px;max-width:28.75em;min-width:4em;min-height:32px;vertical-align:middle;text-align:center;font-weight:700;font-size:.85em;font-family:inherit;line-height:1.25em;cursor:pointer}input#button_submit{background:#36c;color:#fff}input[type=button][disabled=disabled],input[type=submit][disabled=disabled]{background:#ccc}input[name=checker],input[name=userid],label[for=checker],label[for=userid]{display:none}small{font-size:85%}</style>
|
||||
<style>*{margin:0;padding:0}body,html{min-height:100vh}html{width:100%;background:#fff;color:#000;font-family:"Noto Serif","Source Serif","Noto Serif SC","Source Han Serif SC",Times New Roman,Times,STSong,SimSun,serif;line-height:1.75}body{display:flex;margin:0 auto;max-width:83vw;flex-wrap:wrap;flex-direction:column;justify-content:space-between}header{margin:10vh 0 0;padding-bottom:1em;border-bottom:5px solid #36c}a img{border:0}main{display:flex;margin:0 auto;min-width:70vw;flex-wrap:wrap;flex-direction:column}h1{margin-top:.5em;margin-bottom:.5em;font-size:1.25em}p{margin:.5em 0}ul{margin:.5em 0 .5em 2em}li{margin:.25em 0}a{color:#36c;text-decoration:none}a:hover{text-decoration:underline}code{padding:0 .25em;border:1px solid #aaa;border-radius:.25em;background-color:#eee;color:#c3b}em,footer{color:#777;font-style:normal}footer{margin:0 0 10vh;padding-top:1em;border-top:1px solid #eaecf0;font-size:.9em}.footer-links a{margin-right:.5em;white-space:nowrap}.footer-buttons{display:flex;margin-top:.5em;gap:.5em;flex-wrap:wrap;flex-direction:row;justify-content:flex-end}label{display:inline;margin-right:.7em;width:auto}input[type=checkbox]{width:1.25em;height:1.25em}input[type=text]{padding:6px 8px;line-height:1.25}input[type=button],input[type=submit],input[type=text]{border:1px solid #a2a9b1;border-radius:4px;background:#fff;color:#000}input[type=button],input[type=submit]{display:inline-block;box-sizing:border-box;margin:0;padding:5px 12px;max-width:28.75em;min-width:4em;min-height:32px;vertical-align:middle;text-align:center;font-weight:700;font-size:.85em;font-family:inherit;line-height:1.25em;cursor:pointer}input#button_submit{background:#36c;color:#fff}input[type=button][disabled=disabled],input[type=submit][disabled=disabled]{background:#ccc}input[name=checker],input[name=stage],input[name=userid],label[for=checker],label[for=stage],label[for=userid]{display:none}small{font-size:85%}</style>
|
||||
EOF;
|
||||
}
|
||||
|
|
2
reg.php
2
reg.php
|
@ -21,6 +21,8 @@ if (!isset($_SESSION['qwUserId']) || !isset($_SESSION['qwUserName'])) {
|
|||
<form id="exportForm" action="confirm.php" method="post">
|
||||
<label for="checker"></label>
|
||||
<input type="text" name="checker" id="checker" title="checker" value="1" />
|
||||
<label for="stage"></label>
|
||||
<input type="text" name="stage" id="stage" title="stage" value="reg" />
|
||||
<p>
|
||||
<em>您好,$qwUserName 。请输入新的实名信息。</em>
|
||||
</p>
|
||||
|
|
|
@ -147,12 +147,16 @@ if ($act == 'UserLoginCode') {
|
|||
$pn = $_POST['pn'] ?? '';
|
||||
if (($code == $_SESSION['verificationCode']) && ($idd == $_SESSION['qwPhoneNumberIdd']) && ($pn == $_SESSION['qwPhoneNumber'])) { //验证码进行比对
|
||||
unset($_SESSION['verificationCode']);
|
||||
unset($_SESSION['oldVerified']);
|
||||
$_SESSION['newVerified'] === true;
|
||||
echo 1; // 验证成功
|
||||
} else {
|
||||
echo 2; // 验证码错误
|
||||
}
|
||||
} else { // 验证码的时间大于当前时间,代表失效了
|
||||
unset($_SESSION['verificationCode']);
|
||||
unset($_SESSION['oldVerified']);
|
||||
unset($_SESSION['newVerified']);
|
||||
echo 3; // 验证码失效了
|
||||
}
|
||||
}
|
||||
|
@ -213,12 +217,16 @@ if ($act == 'UserLoginCode') {
|
|||
$code = $_POST['code'] ?? '';
|
||||
if ($code == $_SESSION['verificationCode']) { // 验证码进行比对
|
||||
unset($_SESSION['verificationCode']);
|
||||
unset($_SESSION['newVerified']);
|
||||
$_SESSION['oldVerified'] === true;
|
||||
echo 1; // 验证成功
|
||||
} else {
|
||||
echo 2; // 验证码错误
|
||||
}
|
||||
} else { // 验证码的时间大于当前时间,代表失效了
|
||||
unset($_SESSION['verificationCode']);
|
||||
unset($_SESSION['oldVerified']);
|
||||
unset($_SESSION['newVerified']);
|
||||
echo 3; // 验证码失效了
|
||||
}
|
||||
} else {
|
||||
|
|
13
update.php
13
update.php
|
@ -4,7 +4,7 @@ ini_set('display_errors', 0);
|
|||
|
||||
session_start();
|
||||
$qwUserName = $_SESSION['qwUserName'] ?? '';
|
||||
$verificationCode = $_SESSION['verificationCode'] ?? '';
|
||||
$oldVerified = $_SESSION['oldVerified'] ?? false;
|
||||
|
||||
require_once __DIR__ . \DIRECTORY_SEPARATOR . 'template.php';
|
||||
|
||||
|
@ -12,7 +12,7 @@ require_once __DIR__ . \DIRECTORY_SEPARATOR . 'idd.php';
|
|||
|
||||
$qwIddSelect = returnIdd();
|
||||
|
||||
if (!isset($_POST['checker']) || !isset($_POST['input_code'])) {
|
||||
if (!isset($_POST['checker']) || !isset($_POST['input_code']) || !isset($_POST['stage'])) {
|
||||
echo "本页面应由验证既有实名信息页面调用。";
|
||||
exit(1);
|
||||
}
|
||||
|
@ -20,9 +20,9 @@ if (!isset($_POST['checker']) || !isset($_POST['input_code'])) {
|
|||
if (!isset($_SESSION['qwUserName'])) {
|
||||
refreshPage('/');
|
||||
exit(1);
|
||||
} else if ($verificationCode !== $_POST['input_code']) {
|
||||
alertAndBack('验证码错误。');
|
||||
} else {
|
||||
}
|
||||
|
||||
if ($_POST['stage'] === 'verify' && $oldVerified === true) {
|
||||
$pageContent = <<<EOF
|
||||
<form id="exportForm" action="confirm.php" method="post">
|
||||
<label for="checker"></label>
|
||||
|
@ -69,4 +69,7 @@ if (!isset($_SESSION['qwUserName'])) {
|
|||
EOF;
|
||||
$pageContent .= updateJS();
|
||||
pageTemplate('更新实名信息', $pageContent);
|
||||
} else {
|
||||
alertAndBack('验证码错误。');
|
||||
exit(1);
|
||||
}
|
||||
|
|
|
@ -43,14 +43,16 @@ if (!isset($_SESSION['qwUserId']) || !isset($_SESSION['qwUserName']) || !isset($
|
|||
<form id="exportForm" action="update.php" method="post">
|
||||
<label for="checker"></label>
|
||||
<input type="text" name="checker" id="checker" title="checker" value="1" />
|
||||
<label for="stage"></label>
|
||||
<input type="text" name="stage" id="stage" title="stage" value="verify" />
|
||||
<label for="userid"></label>
|
||||
<input type="text" name="userid" id="userid" title="userid" value="$qwUserId" />
|
||||
$qwUserInfoStatusNotice
|
||||
<p>
|
||||
<em>您好,$qwUserName 。请输入新的实名信息。</em>
|
||||
<em>您好,$qwUserName 。接下来,您需要验证您现有的实名信息。</em>
|
||||
</p>
|
||||
<p>
|
||||
<em>接下来,您需要验证您现有的实名信息;您需要准备好旧手机号码、新手机号码以接收验证码。</em>
|
||||
<em>您需要准备好旧手机号码、新手机号码以接收验证码。</em>
|
||||
</p>
|
||||
<p>
|
||||
<em>目前,本系统仅支持中国大陆手机号码(+86),暂不支持其他国家或地区的手机号码。</em>
|
||||
|
|
正在加载...
在新工单中引用