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
118
<?php
include_once "../../../Common/Logging.php";
include_once '../../../Common/CommFunc.php';
include_once '../../../Common/MongoDB7.php';
include_once "wxfunc.php";
include_once "GamePlayer.php";
 
function doGameServerGMLogic($openid, $gameconfig, $cmd, $paramList)
{
    $ret = array();
    // 设置 货币
    if ($cmd == "setMoney") {
        if (!$paramList || count($paramList) != 2) {
            return ["help" => "setMoney 货币类型 货币值"];
        }
        $gamePlayer = new GamePlayer($openid, $gameconfig["db"]);
        $ret = $gamePlayer->SetMoney($paramList[0], $paramList[1]);
    }
    // 设置 本周最高分
    else if ($cmd == "setWeekScore") {
        if (!$paramList || count($paramList) != 1) {
            return ["help" => "setWeekScore 本周最高分"];
        }
        $gamePlayer = new GamePlayer($openid, $gameconfig["db"]);
        $ret = $gamePlayer->UpdateFieldValue("weekScore", (int) $paramList[0]);
    }
    // 设置 历史最高分
    else if ($cmd == "setHighestScore") {
        if (!$paramList || count($paramList) != 1) {
            return ["help" => "setHighestScore 历史最高分"];
        }
        $gamePlayer = new GamePlayer($openid, $gameconfig["db"]);
        $ret = $gamePlayer->UpdateFieldValue("highestScore", (int) $paramList[0]);
    }
    // 设置 已过关关卡
    else if ($cmd == "setMissionNum") {
        if (!$paramList || count($paramList) != 1) {
            return ["help" => "setMissionNum 关卡"];
        }
        $gamePlayer = new GamePlayer($openid, $gameconfig["db"]);
        $ret = $gamePlayer->UpdateFieldValue("missionNum", (int) $paramList[0]);
    }
    return $ret;
}
 
function doPlatformServerGMLogic($appid, $secret, $openid, $gameconfig, $cmd, $paramList)
{
    // 以下是需要与微信服务器交互的命令,需要 session_key
    $ret = array();
    $dbOpt = new \MongoDB7\MongoDb("session", $gameconfig["db"]);
    $where = ['openid' => $openid];
    $result = $dbOpt->query($where);
    if (!$result) {
        Logging\LogError("找不到玩家session_key!" . $openid);
        return ["error" => "no session_key"];
    }
    $sessionKey = $result[0]["session_key"];
 
    $wx = new WXFunc();
    // 删除已经上报到微信的key-value数据
    if ($cmd == "removeUserStorage") {
        if (!$paramList) {
            return ["help" => "removeUserStorage 普通托管数据key"];
        }
        $ret = $wx->removeUserStorage($appid, $secret, $openid, $sessionKey, $paramList);
    }
 
    // 上报用户数据后台接口。小游戏可以通过本接口上报key-value数据到用户的CloudStorage。
    else if ($cmd == "setUserStorage") {
        if (!$paramList) {
            return ["help" => "setUserStorage 普通托管数据key"];
        }
    }
 
    // 写用户关系链互动数据存储
    else if ($cmd == "setUserInteractiveData") {
        if (!$paramList || count($paramList) != 2) {
            return ["help" => "setUserInteractiveData 互动数据key1~50 设置值"];
        }
        $kv_list = [[
            'key' => $paramList[0],
            'value' => $paramList[1]
        ]];
        $ret = $wx->setUserInteractiveData($appid, $secret, $openid, $sessionKey, $kv_list);
    }
    return json_decode($ret, true);
}
 
function filter_null($v)
{
    return str_replace(" ", "", $v) != "";
}
 
\Logging\CreateLogging("wx.gm.php");
 
$openid = $_POST['openid'];
$gamename = $_POST['gamename'];
$gmCmdInfo = explode(" ", $_POST['cmd']);
Logging\LogInfo("_POST: " . print_r($_POST, true));
 
$gameconfig = parse_ini_file("config/" . $gamename . ".ini", true);
$appid = $gameconfig["app"]["appid"];
$secret = $gameconfig["app"]["appSecret"];
 
$ret = array();
$cmd = $gmCmdInfo[0];
$paramList = array_slice($gmCmdInfo, 1);
$paramList = array_filter($paramList, "filter_null"); // 去除空元素
Logging\LogInfo("cmd: " . $cmd);
Logging\LogInfo("paramList: " . print_r($paramList, true));
 
$ret = doGameServerGMLogic($openid, $gameconfig, $cmd, $paramList);
if (count($ret) == 0) {
    $ret = doPlatformServerGMLogic($appid, $secret, $openid, $gameconfig, $cmd, $paramList);
}
$ret = json_encode($ret);
Logging\LogInfo("ret: " . $ret);
echo $ret;