<?php
    
    // 获取URL传过来的param
    @$param = $_GET['param'];
    
    // 获取到支付回调中的chatroom_id
    $param_openid = explode("|", $param)[0];
    
    // 获取到支付回调中的chatroom_id
    $param_chatroom_id = explode("|", $param)[1];
    
    // 接收其它回调参数
    $money = $_GET['money'];
    $name = $_GET['name'];
    $out_trade_no = $_GET['out_trade_no']; // 订单号
    $pid = $_GET['pid'];
    $trade_no = $_GET['trade_no'];
    $trade_status = $_GET['trade_status'];
    $type = $_GET['type'];
    
    // 参与签名的参数
    $sign_params = [
        'money' => $money,
        'name' => $name,
        'out_trade_no' => $out_trade_no,
        'param' => $param,
        'pid' => $pid,
        'trade_no' => $trade_no,
        'trade_status' => $trade_status,
        'type' => $type
    ];
    
    // 数据库配置
	include '../../console/Db.php';

	// 实例化类
	$db = new DB_API($config);
    
    // 获取支付配置
    $getChatroomPayConfig = $db->set_table('ylb_ChatroomPayConfig')->find(['id' => 1]);
    
    if($getChatroomPayConfig) {
        
        // 易支付的商户密钥	
        $payapi_merchant_key = $getChatroomPayConfig['payapi_merchant_key'];
    }else {
        
        // 支付配置获取失败
        // 写入日志
        write_log($out_trade_no,'通知失败，原因是：支付配置获取失败');
    }
    
    // 生成的签名
    $sign = generate_sign($sign_params, $payapi_merchant_key);
    
    // 回调的签名
    $sign_form_url = $_GET['sign'];
    
    // 验证签名
    if($sign_form_url == $sign) {
        
        // 签名正确
        // 生成备注码
        $order_bzCode = rand(100,500);
        
        // 验证备注码是否重复
        $check_bzCode = $db->set_table('ylb_ChatroomPayOrders')->find(['order_bzCode' => $order_bzCode]);
        if($check_bzCode) {
        
            // 重新生成
            $order_bzCode = rand(200,400);
        }
        
        // 修改支付结果
        $updatePayResult = $db->set_table('ylb_ChatroomPayOrders')->update(
            ['order_num' => $out_trade_no], 
            [
                'order_status' => '1',
                'order_time' => date('Y-m-d H:i:s'),
                'order_bzCode' => $param_chatroom_id.$order_bzCode
            ]
        );
        
        if($updatePayResult) {
            
            // 修改成功
            // 写入日志
            write_log($out_trade_no,'回调通知成功！收款'.$money.'元');
            echo 'success';
        }else {
            
            // 修改失败
            // 写入日志
            write_log($out_trade_no,'修改支付结果失败，原因是：操作数据库失败');
        }
    }else {
        
        // 签名错误
        // 写入日志
        write_log($out_trade_no,'修改支付结果失败，原因是：签名错误');
    }
    
    // 生成签名
    function generate_sign($data, $payapi_merchant_key) {
        
        // 移除sign和sign_type参数以及空值
        unset($data['sign']);
        unset($data['sign_type']);
        foreach ($data as $k => $v) {
            if ($v == '') {
                unset($data[$k]);
            }
        }
    
        // 按键名排序
        ksort($data);
    
        // 拼接成URL键值对的格式
        $string = '';
        foreach ($data as $k => $v) {
            $string .= "$k=$v&";
        }
    
        // 移除最后一个&符号并添加密钥
        $string = rtrim($string, '&');
        $string .= $payapi_merchant_key;
    
        // 计算MD5签名
        return md5($string);
    }
    
    // 写入日志
    function write_log($out_trade_no,$text) {
        
        // 写入本地日志文件
        file_put_contents('notify_log.txt', date('Y-m-d H:i:s') . '，订单号' . $out_trade_no . $text . "\n", FILE_APPEND);
    }
    
?>
