Skip to content

签名实现示例

PHP 签名实现示例

PHP
<?php

namespace Utils;

class SignUtils {
    public static function SignMsgEncode($secret, $message) {
        $hmac = hash_hmac('sha256', $message, $secret);
        return $hmac;
    }

    public static function LoopQueryParams($queryParams) {
        unset($queryParams['sign']);
        unset($queryParams['mid']);
        unset($queryParams['ts']);

        ksort($queryParams);
        return json_encode($queryParams);
    }

    public static function AppendSignParams($params, $mid, $ts) {
        $signPrams = json_encode(["mid" => $mid, "ts" => $ts]);
        $signMsg = $params . $signPrams;

        return $signMsg;
    }
}

// Usage
$secret = "r5VTsXcAC6IfwwqbAVYdu9dtmdApRj3f";
$GET["ts"] = "1693798918";
$GET["mid"] = "10001";

// POST EXAMPLE
// curl --request POST \
//   --url 'http://192.168.4.251:10001/game/start?mid=10001&ts=1693798918&sign=014d93d8c01ff3989f8c71fa22c6d32a7cf1f94918b3d65e3bbfb5413a64cf4e' \
//   --header 'content-type: application/json' \
//   --data '{"user_id":"64d9c2c9e339629378e5bd52","game_id":7,"currency":"MXN","lang":"en"}'

$postBody = '{"user_id":"64d9c2c9e339629378e5bd52","game_id":7,"currency":"MXN","lang":"en"}';

$message = SignUtils::AppendSignParams($postBody, $GET["mid"], $GET["ts"]);
echo "POST Before Encrypt: " . $message . PHP_EOL;
$encodedMessage = SignUtils::SignMsgEncode($secret, $message);
echo "POST Sign: " . $encodedMessage . PHP_EOL;



// GET EXAMPLE
// curl --request GET \
//   --url 'http://192.168.4.251:10001/game/list?mid=10001&ts=1693798918&sign=014d93d8c01ff3989f8c71fa22c6d32a7cf1f94918b3d65e3bbfb5413a64cf4e&page=1'
$queryString["page"] = "1";
$message = SignUtils::AppendSignParams(SignUtils::LoopQueryParams($queryString), $GET["mid"], $GET["ts"]);
echo "GET Before Encrypt: " . $message . PHP_EOL;
$encodedMessage = SignUtils::SignMsgEncode($secret, $message);
echo "GET Sign: " . $encodedMessage . PHP_EOL;