<?php

/**
 * 接收1SDK后台通知(支付)
 * @version
 *          1.0.0 Created at 2017-12-30. by --gwang
 * @author gwang (mail@wanggangzero.cn)
 * @copyright ? 2017-12-30, SJZ LoyalSoft Corporation & gwang. All rights reserved.
 *
 */
include_once __DIR__ . '/../../../main.php';                                    # 导入game utils
include_once __DIR__ . '/../Mo/payResp.php';                                       # 导入通用返回值结构
include_once __DIR__ . '/../Mo/payRequest.php';                                 # 导入通用返回值结构
require_once __DIR__ . '/../Mo/OrderNotice.php';
require_once __DIR__ . '/config.1sdk.php';                                      # 配置文件, Ps. 里面用到了object

use loyalsoft\CLog;
use loyalsoft\HttpUtil;
use loyalsoft\pay\OrderNotice;

try {
    CLog::pay("[notify.易接] 收到支付回调请求: " . HttpUtil::getQueryString());
    $cfg = new config_for_1sdk();                                               # 配置信息
    $params = HttpUtil::getQueryParas();                                        # 提取参数
    $sign = $params['sign'];                                                    # 提取签名
    if ($sign != $cfg->getSign_1sdk($params)) {                                 # 验证签名
        CLog::pay("[notify.易接] 验签失败");
        CLog::pay("[notify.易接]" . "[签名原文]:" . $sign);
        CLog::pay("[notify.易接]" . "[签名结果]:" . $cfg->getSign_1sdk($params));
        exit('{"err":1001,"msg":"Invalied sign!"}');                            # 退出
    }
    $order = OrderNotice::Parse_1SDKOrder($params);                             # 将参数归一化到order
    if ($order != null) {
        if ($order->Check()) {                                                  # 订单校验, 1代表支付成功
            if ($order->status == 1) {                                          # 订单状态是成功
                $order->UpdateOrderStatus();                                    # 更新订单状态,->已付款
                CLog::pay("[notify.易接] [发货] 订单: " . $order->cpOrderId . ", 金额: " . $order->amount);
            } else if ($order->status == 2) {                                   # status为2(failed)的情况
                $order->UpdateOrderStatus();                                    # 直接更新订单状态,->支付失败
                CLog::pay("[notify.易接] [不发货] 订单: " . $order->cpOrderId);
            } else {
                echo 'FAILURE';
                CLog::pay("[notify.易接][处理结果]: FAILURE (未知的支付状态)"); # 日志
                return;
            }
            echo 'SUCCESS'; //返回给sdk server的响应内容
            CLog::pay("[notify.易接][处理结果]:" . "SUCCESS");                # 日志
            return;
        }
    }
    CLog::pay("[notify.易接][处理结果]:" . "FAILURE");                        # 日志
    echo 'FAILURE'; //返回给sdk server的响应内容 ,对于重复多次通知失败的订单,请参考文档中通知机制。
    return;
} catch (Exception $e) {
    CLog::pay("[notify.易接]" . $e->getMessage());                           # 日志
    throw new exception($e->getMessage());
}