<?php
/* *
 * 支付宝同步通知页面
 */

require_once(__DIR__ . '/inc.php');

@header('Content-Type: text/html; charset=UTF-8');

// 从订单加载接口配置
$out_trade_no_tmp = isset($_GET['out_trade_no']) ? daddslashes($_GET['out_trade_no']) : '';
if($out_trade_no_tmp){
	$pay_row = $DB->getRow("SELECT interface_id FROM pre_pay WHERE trade_no='{$out_trade_no_tmp}' LIMIT 1");
	$interface_id = isset($pay_row['interface_id']) ? intval($pay_row['interface_id']) : 0;
	if($interface_id > 0){
		$interface = $DB->getRow("SELECT config FROM pre_pay_interface WHERE id='{$interface_id}' LIMIT 1");
		if($interface){
			$interface_config = json_decode($interface['config'], true);
			if($interface_config){
				if(isset($interface_config['appid'])) $conf['alipay_appid'] = $interface_config['appid'];
				if(isset($interface_config['publickey'])) $conf['alipay_publickey'] = $interface_config['publickey'];
				if(isset($interface_config['privatekey'])) $conf['alipay_privatekey'] = $interface_config['privatekey'];
			}
		}
	}
}

require_once(SYSTEM_ROOT."alipay/AlipayTradeService.php");

//计算得出通知验证结果
$alipaySevice = new AlipayTradeService($config); 
//$alipaySevice->writeLog(var_export($_POST,true));
$verify_result = $alipaySevice->check($_GET);

if($verify_result) {//验证成功
	$out_trade_no = daddslashes($_GET['out_trade_no']);
	$trade_no = daddslashes($_GET['trade_no']);
	$trade_status = $_GET['trade_status'] ?? '';

	$srow = $DB->getRow("SELECT * FROM pre_pay WHERE trade_no='{$out_trade_no}' LIMIT 1");
	if (!$srow) {
		showalert('订单不存在', 4, 'shop');
		exit;
	}

	// 仅 TRADE_SUCCESS 且原子更新（防异步/同步重复回调导致 processOrder 执行两次）
	if ($trade_status == 'TRADE_SUCCESS' || $trade_status == 'TRADE_FINISHED') {
		$aff = $DB->exec("UPDATE `pre_pay` SET `status`='1',`endtime`='{$date}',`api_trade_no`='{$trade_no}' WHERE `trade_no`='{$out_trade_no}' AND `status`='0'");
		if ($aff > 0) {
			processOrder($srow);
		}
	}
	showalert('您所购买的商品已付款成功，感谢购买！',1,$out_trade_no,$srow['tid']);

}
else {
    //验证失败
	showalert('验证失败！',4,'shop');
}
?>