<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;

$options = Mirai_opt();
$f2fAppId = $options->f2fAppId;
$f2fPrivateKey = $options->f2fPrivateKey;
$f2fPublicKey = $options->f2fPublicKey;

if (empty($f2fAppId) || empty($f2fPrivateKey) || empty($f2fPublicKey)) {
    header('Location: ' . rtrim($options->siteUrl, '/'));
    exit;
}

$f2fPrivateKey = Mirai_payFormatRsaKey($f2fPrivateKey, 'private');
$f2fPublicKey = Mirai_payFormatRsaKey($f2fPublicKey, 'public');

$aopDir = __DIR__ . '/aop';
$includePath = get_include_path();
if (strpos($includePath, $aopDir) === false) {
    set_include_path($includePath . PATH_SEPARATOR . $aopDir);
}
require_once $aopDir . '/AopClient.php';

$aop = new \AopClient();
$aop->appId = $f2fAppId;
$aop->rsaPrivateKey = $f2fPrivateKey;
$aop->alipayrsaPublicKey = $f2fPublicKey;
$aop->signType = 'RSA2';

$verified = $aop->rsaCheckV1($_GET, NULL, "RSA2");

if ($verified) {
    $out_trade_no = isset($_GET['out_trade_no']) ? (string)$_GET['out_trade_no'] : '';
    $trade_no = isset($_GET['trade_no']) ? (string)$_GET['trade_no'] : '';
    $trade_status = isset($_GET['trade_status']) ? (string)$_GET['trade_status'] : '';
    $total_amount = isset($_GET['total_amount']) ? (float)$_GET['total_amount'] : 0;

    if ($out_trade_no === '') {
        header('Location: ' . rtrim($options->siteUrl, '/'));
        exit;
    }

    $order = Mirai_payGetOrder($out_trade_no);
    if (empty($order)) {
        header('Location: ' . rtrim($options->siteUrl, '/'));
        exit;
    }

    if ($trade_status === 'TRADE_SUCCESS' || $trade_status === 'TRADE_FINISHED') {
        $orderAmount = (float)$order['amount'];
        $orderAmountCents = (int)round($orderAmount * 100);
        $paidAmountCents = (int)round($total_amount * 100);
        if ($orderAmountCents !== $paidAmountCents) {
            header('Location: ' . rtrim($options->siteUrl, '/'));
            exit;
        }

        Mirai_payMarkOrderPaid($out_trade_no, $trade_no);
    }

    $url = Mirai_api_payOrderTargetUrl($order);
    header('Location: ' . $url);
    exit;
}

header('Location: ' . $options->siteUrl);
exit;
