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
<?php
 
include_once '/Common/Signature.php';
 
/**
 * 发送通用接口给小7服务器
 * @param string $url 接口地址
 * @param array $bizParams 业务参数
 * @param string $appkey appkey
 * @param string $prikey 我方私钥
 * @param string $pubkey 对方公钥
 * @param string $apiMethod 接口名称
 * @param string $func 收到Response后要调用的函数,回调参数($response, $appkey, $prikey, $pubkey)
 */
function send_common_to_x7($url, $bizParams, $appkey, $prikey, $pubkey, $apiMethod, $func = "", $gameType = "client", $osType = "android")
{
    // Request字段    类型    必选    说明
    // bizParams    String    是    业务参数,值为每个接口对应业务参数的JSON字符串
    // apiMethod    String    是    接口名称
    // reqTime        String    是    请求时间,格式使用ISO8601规范,示例:2022-06-29T15:08:44+0800
    // appkey        String    是    游戏appkey,如果双端使用相同appkey接入,osType字段必传
    // gameType        String    是    游戏端类型,网游为client H5游戏为 h5
    // signature    String    是    请求签名(签名方式参见下文)
    // osType        String    否    系统类型,ios或android
 
    // Response字段    类型    必选    说明
    // bizResp        String    是    响应参数,值为每个接口对应响应参数的JSON字符串
    // apiMethod    String    是    接口名称
    // respTime        String    是    响应时间,格式使用ISO8601规范,示例:2022-06-29T15:08:44+0800
    // appkey        String    是    游戏appkey
    // gameType        String    是    游戏端类型,网游为client H5游戏为 h5
    // signature    String    是    响应签名(签名方式参见下文)
    // osType        String    否    系统类型,ios或android
 
    $reqTime = \CommFunc\StrDateTimeFormatConver("", DATE_ISO8601);
    $bizParams = \CommFunc\MyJson_encode($bizParams);
    $payload = Signature::genPayload($apiMethod, $appkey, $reqTime, $bizParams, $gameType);
    $signature = Signature::sign($payload, $prikey);
    $requestData = array(
        "bizParams" => $bizParams,
        "apiMethod" => $apiMethod,
        "reqTime" => $reqTime,
        "appkey" => $appkey,
        "gameType" => $gameType,
        "signature" => $signature,
        "osType" => $osType,
    );
 
    \Logging\LogInfo("url:" . $url);
    \Logging\LogInfo("requestData:" . print_r($requestData, true));
    $retStr = \CommFunc\curl_post($url, $requestData, 10, true);
    \Logging\LogInfo("retStr:" . $retStr);
 
    $response = json_decode($retStr, true);
    $bizResp = $response["bizResp"];
    $apiMethod = $response["apiMethod"];
    $respTime = $response["respTime"];
    $appkey = $response["appkey"];
    $gameType = $response["gameType"];
    $signature = $response["signature"];
    $osType = $response["osType"];
 
    // 验签
    $payload = Signature::genPayload($apiMethod, $appkey, $respTime, $bizResp, $gameType);
    $verifyRet = Signature::verify($payload, $signature, $pubkey);
    if ($verifyRet != 1) {
        \Logging\LogError("sign_data_verify_failed verifyRet:" . $verifyRet . " payload:" . $payload);
        return;
    }
 
    if ($func) {
        $func($response, $appkey, $prikey, $pubkey);
    }
}