<?php

require_once __DIR__ . '/../../../../main.php';                                 # 导入game utils
include_once __DIR__ . '/../../Mo/resp.php';                                    # 导入通用返回值结构
include_once __DIR__ . '/../../Mo/payRequest.php';                              # 导入通用返回值结构
require_once __DIR__ . '/../../Mo/OrderNotice.php';                             # 导入通知数据接收模型
require_once __DIR__ . '/AopSdk.php';                                           # 导入alipay库
require_once __DIR__ . '/config_alipay.php';                                    # 导入配置文件

use loyalsoft\CLog;
use loyalsoft\HttpUtil;

HttpUtil::PostOnly();
CLog::pay("[notify.zfb] [收到通知]: " . HttpUtil::getQueryString());            # 日志

$params = \loyalsoft\HttpUtil::getQueryParas();                                 # 提取请求参数
$cfg = loyalsoft\config_alipay::Inst();
$aop = new AopClient();
$aop->alipayrsaPublicKey = $cfg->alipayrsaPublicKey;                            # 支付宝公钥
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");

if ($flag) {                                                                    # 身份校验通过,确认为Alipay发送的通知
    $order = loyalsoft\pay\OrderNotice::Parse_alipayOrder($params);
    if ($order != null) {
        if ($order->Check()) {                                                  # 订单校验, 1代表支付成功
            if ($order->status == 1) {                                          # 订单状态是成功
                $order->UpdateOrderStatus();                                    # 更新订单状态,->已付款
                CLog::pay("[notify.zfb] [发货] " . $order->cpOrderId . " >>> " . $order->amount);
            } else if ($order->status == 2) {                                   # status为2(failed)的情况
                $order->UpdateOrderStatus();                                    # 直接更新订单状态,->支付失败
                CLog::pay("[notify.zfb] [不发货] " . $order->cpOrderId);
            } else {
                echo 'FAILURE';
                CLog::pay("[notify.zfb][处理结果]: FAILURE (未知的支付状态)");      # 日志
                return;
            }
            echo 'success';                                                     # 返回给sdk server的响应内容
            CLog::pay("[notify.zfb][处理结果]: SUCCESS");                       # 日志
            return;
        }
    }
    CLog::pay("[notify.zfb] [处理结果]: FAILURE (提取参数失败)");                # 日志
    echo 'faild!'; // 返回给sdk server的响应内容 ,对于重复多次通知失败的订单,请参考文档中通知机制。
} else {
    echo 'faild!';
    CLog::pay("[notify.zfb] 签名验证失败!");
}
