<?php

/** 引入依赖 */
include_once './utils/MessageClient.php';
include_once './utils/Fwrite.php';
include_once './utils/Constant.php';
include_once './utils/Token.php';
include_once './utils/Common.php';

/** 解析 Token */
$token = Common::getToken($_REQUEST['token'], Constant::$Conf['encryptKey']);
if (empty($token['emailId']) || empty($token['agent'])) {
    Fwrite::flog("CLICK 事件发生错误\n\rOriginToken :: {$_REQUEST['token']}\n\rUser-Agent :: {$_SERVER['HTTP_USER_AGENT']}\n\rToken :: " . json_encode($token));
    return;
}

/** 设置响应头 */
header("Location: {$token['url']}");

$reportData = [
    'type' => 'click',
    'env' => $token['env'],
    'data' => $token
];

/** 发送消息队列 */
$retryCount = 0;
$client = new MessageClient();
$queue = $client->getQueue(Constant::$Conf['queueName']);
while (++$retryCount < 5) {
    try {
        $res = $queue->sendMessage($reportData);
        Fwrite::flog(json_encode($reportData));
        if ($res->isSucceed()) {
            break;
        }
    } catch (AliyunMNS\Exception\MnsException $e) {
        $errorCode = $e->getMnsErrorCode();
        Fwrite::flog($e->getFile() . PHP_EOL . $e->getLine() . PHP_EOL . $e->getCode()  . ':' .  $e->getMnsErrorCode() . PHP_EOL .  $e->getTraceAsString());
        Fwrite::flog("Click 原数据：{$_REQUEST['token']}");
        if ($errorCode == 'InternalError' || $errorCode == 'InternalServerError') {
            continue;
        } else {
            break;
        }
    }
}
