hxp
2025-06-04 f4a514d5ac952110da846636ecbb9de951eaf3d2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
include_once '/Common/CommFunc.php';
include_once '/Common/Logging.php';
include_once "/db/DBOper.php";
include_once "/ProjComm/CfgReader.php";
 
header("Content-type: text/html; charset=utf-8");
 
// https://developer.shg.vn/article/view?id=150&lang=ch
 
\Logging\CreateLogging("yn.queryrole.php");
\Logging\LogInfo("_POST: " . print_r($_POST, true));
 
$server_id = $_POST["server_id"]; // cp方区服id
$role_id = $_POST["role_id"]; // cp方角色id
$timestamp = $_POST["timestamp"]; // 签名时间戳(秒)
$sign = $_POST["sign"];
 
$appid = "hyyngame";
$channelID = 1;
 
// 网页充值,17 18服特殊处理ID互换
if ($server_id == 17) {
    $server_id = 18;
    \Logging\LogInfo("17服18服查角色时特殊处理ServerID互换!");
} elseif ($server_id == 18) {
    $server_id = 17;
    \Logging\LogInfo("17服18服查角色时特殊处理ServerID互换!");
}
 
if (
    !\CfgReader\ReadConfig()
    || !\CfgReader\GetConfigData("Quick", "Key_" . $appid . "_Callback_Key", $Callback_Key)
) {
    retFail("CfgError");
    exit;
}
 
$md5SignLocal = make_sign($_POST, $Callback_Key);
if ($md5SignLocal != $sign) {
    retFail("ErrorSign", "md5SignLocal:" . $md5SignLocal . " != sign:" . $sign);
    exit;
}
 
$gameServerInfo = \CommFunc\GetGameServerInfo($appid, $server_id);
if (!isset($gameServerInfo)) {
    retFail("server_id error");
    exit;
}
 
$postUrl = str_replace("Server/Tool.php", "api/yn/queryPlayerID.php", $gameServerInfo["Page"]);
\Logging\LogInfo("postUrl: " . $postUrl);
$postData = array("PlayerID" => $role_id);
 
\Logging\LogInfo("postData: " . print_r($postData, true));
$retStr = \CommFunc\DoPost($postUrl, $postData);
\Logging\LogInfo("retStr: " . $retStr);
$ret = json_decode($retStr, true);
if (isset($ret)) {
    if ($ret["errorcode"] == 0) {
        if ($ret["data"]) {
            $playerData = $ret["data"];
            $accID = $playerData["AccID"];
            $accIDParts = explode("@", $accID);
            $user_id = implode("@", array_slice($accIDParts, 0, count($accIDParts) - 3));
            $retData = array(
                "user_id" => $user_id,
                "server_id" => $server_id,
                "server_name" => $gameServerInfo["Name"],
                "role_id" => $playerData["PlayerID"] . "",
                "role_name" => $playerData["PlayerName"],
                "role_level" => $playerData["LV"],
            );
            retOK($retData);
        } else {
            retOK(array());
        }
    } else {
        retFail($ret["errordesc"]);
    }
} else {
    retFail("fail");
}
 
exit;
 
 
function make_sign(array $data, $game_key)
{
    if (array_key_exists('sign', $data)) {
        unset($data['sign']);
    }
    ksort($data);
    $_data = [];
    foreach ($data as $k => $v) {
        $_data[] = $k . '=' . $v;
    }
    $str = implode('&', $_data) . '&' . $game_key;
    return sha1(md5($str));
}
 
function retOK($data)
{
    ret(0, "OK", $data);
}
 
function retFail($msg, $errMsg = "")
{
    \Logging\LogError("msg:" . $msg . " errMsg:" . $errMsg);
    ret(1, $msg);
}
function ret($code, $msg, $data = array())
{
    \Logging\LogInfo("code:" . $code . " msg:" . $msg);
    $retData = array("code" => $code, "msg" => $msg, "data" => $data);
    echo \CommFunc\MyJson_encode($retData);
}