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
<?php
include_once '/Common/CommFunc.php';
include_once '/Common/Logging.php';
include_once '/Common/PayOrder.php';
include_once "/ProjComm/CfgReader.php";
 
header("Content-type: text/html; charset=utf-8");
 
// $_SERVER['PHP_SELF'] = /api/quick/payxxxxx.php
// strripos 最后一次出现 / 的位置,再+1得到 payxxxxx.php
// +3   从pay后面开始
// -4   去除最后的.php
$appid = substr($_SERVER['PHP_SELF'], strripos($_SERVER['PHP_SELF'], "/") + 1 + 3, -4);
\Logging\CreateLogging("quick.pay" . $appid . ".php");
\Logging\LogInfo("CONTENT_TYPE: " . $_SERVER["CONTENT_TYPE"]);
$postData = array();
foreach ($_POST as $key => $value) {
    $postData[strtolower($key)] = $value; // key统一转化为小写
}
 
\Logging\LogInfo("postData: " . print_r($postData, true));
 
$orderid = $postData['orderid'];
$gameid = $postData['gameid'];
$roleid = $postData['roleid']; // 玩家ID
$username = $postData['username']; // 玩家平台账号
$serverid = $postData['serverid'];
$paytype = $postData['paytype'];
$paytime = $postData['paytime']; //     用户支付时间,如2017-02-06 14:22:32
$attach = $postData['attach']; // 游戏下单时传递的扩展参数,将原样返回。
$amount = $postData['amount'];
$sign = $postData['sign'];
 
if (!$orderid || !$roleid || !$attach || !$amount || !$sign) {
    Ret("ParamError");
    exit;
}
 
if (
    !\CfgReader\ReadConfig()
    || !\CfgReader\GetConfigData("Quick", "Key_" . $appid . "_Callback_Key", $Callback_Key)
) {
    Ret("CfgError");
    exit;
}
 
$md5SignLocal = md5("orderid=" . $orderid . "&username=" . $username . "&gameid=" . $gameid . "&roleid=" . $roleid . "&serverid=" . $serverid .
    "&paytype=" . $paytype . "&amount=" . $amount . "&paytime=" . $paytime . "&attach=" . $attach . "&appkey=" . $Callback_Key);
if ($md5SignLocal != $sign) {
    Ret("SignError", " md5SignLocal:" . $md5SignLocal . " != sign:" . $sign);
    exit;
}
 
$extrasLen = 4;
$extrasParams = explode("_",  $attach, $extrasLen); // channelID_cp订单id_区服id_游戏充值编号
\Logging\LogInfo("extrasParams:" . print_r($extrasParams, true));
$extras_params = $extrasParams;
 
if (!isset($extras_params) || count($extras_params) != $extrasLen) {
    Ret("extras_params_error", " extras_params:" . print_r($extras_params, true));
    exit;
}
 
// 同步游戏服务器
$channelID = $extras_params[0];
$cpOrderID = $extras_params[1];
$serverID = intval($extras_params[2]);
$OrderInfo = $extras_params[3];
 
$AccountID = strtolower($username) . "@" . $channelID;
 
$result = "FAILED";
// 没有创建订单步骤,直接使用sdk订单号
$returnArr = \PayOrder\DoReceivePayOrder($appid, $cpOrderID, $orderid, $AccountID, $serverID, $OrderInfo, $amount, $payTime, false);
switch ($returnArr["errorcode"]) {
    case 1:
        $result = "success";
        break;
    case 2:
        $result = "success";
        break;
    default:
        if ($returnArr["errordesc"]) {
            $result = $returnArr["errordesc"];
        }
        break;
}
Ret($result);
exit;
 
function Ret($ret, $msg = "")
{
    echo $ret;
    $logMsg = $ret;
    if ($msg) {
        $logMsg .= " msg => " . $msg;
    }
    if ($ret != "success") {
        \Logging\LogError($logMsg);
    } else {
        \Logging\LogInfo($logMsg);
    }
}