Example #1
0
 public function actionNotify()
 {
     $alipayconf = new AlipayConfig();
     $this->alipay_config = $alipayconf->getAlipayConfig();
     $alipayNotify = new AlipayNotify($this->alipay_config);
     $verify_result = $alipayNotify->verifyNotify();
     if ($verify_result) {
         //验证成功
         /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         //请在这里加上商户的业务逻辑程序代
         //订单厨打、收银和结单
         //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
         //商户订单号
         $out_trade_no = $_POST['out_trade_no'];
         //支付宝交易号
         $trade_no = $_POST['trade_no'];
         //交易状态
         $trade_status = $_POST['trade_status'];
         //WAIT_BUYER_PAY交易创建,等待买家付款。
         //TRADE_CLOSED 在指定时间段内未支付时关闭的交易;在交易完成全额退款成功时关闭的交易。
         //TRADE_SUCCESS 交易成功,且可对该交易做操作,如:多级分润、退款等。
         //TRADE_PENDING 等待卖家收款(买家付款后,如果卖家账号被冻结)。
         //TRADE_FINISHED 交易成功且结束,即不可再做任何操作
         if ($_POST['trade_status'] == 'TRADE_FINISHED') {
             //判断该笔订单是否在商户网站中已经做过处理
             //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
             //如果有做过处理,不执行商户的业务程序
             //注意:
             //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
             //调试用,写文本函数记录程序运行情况是否正常
             //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
             //厨打、收款/退款、结单
             $this->notifyTrade($out_trade_no, $trade_no, $trade_no);
         } else {
             if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
                 //判断该笔订单是否在商户网站中已经做过处理
                 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                 //如果有做过处理,不执行商户的业务程序
                 //注意:
                 //付款完成后,支付宝系统发送该交易状态通知
                 //调试用,写文本函数记录程序运行情况是否正常
                 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
                 //厨打、收款/退款、结单
                 $this->notifyTrade($out_trade_no, $trade_no, $trade_no);
             }
         }
         //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
         echo "success";
         //请不要修改或删除
         /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     } else {
         //验证失败
         echo "fail";
         //调试用,写文本函数记录程序运行情况是否正常
         //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
     }
 }
Example #2
0
    /**
     * 支付宝调用回调方法
     */
    public static function paying_notify()
    {
        /**
         * 功能:支付宝服务器异步通知页面
         *************************页面功能说明*************************
         * 创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。
         * 该页面不能在本机电脑测试,请到服务器上做测试。请确保外部可以访问该
         *   页面。
         * 该页面调试工具请使用写文本函数logResult,该函数已被默认关闭,见
         *      alipay_notify_class.php中的函数verifyNotify
         * 如果没有收到该页面返回的 success 信息,支付宝会在24小时内按一定的
         *    时间策略重发通知
         */
        //require_once("alipay.config.php");
        //require_once("lib/alipay_notify.class.php");
        //计算得出通知验证结果
        $alipay_config = AlipayConfig::config();
        $alipayNotify = new AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyNotify();
        if (!$verify_result) {
            die('error:verify_result_failed');
        }
        //验证成功
        //商户订单号
        $out_trade_no = $_POST['out_trade_no'];
        //支付宝交易号
        $trade_no = $_POST['trade_no'];
        //交易状态
        $trade_status = $_POST['trade_status'];
        $time = time();
        if (!in_array($_POST['trade_status'], array('TRADE_FINISHED', 'TRADE_SUCCESS'))) {
            die('error:trade_status_error');
        }
        //判断该笔订单是否在商户网站中已经做过处理
        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订
        //  单系统中查到该笔订单的详细,并执行商户的业务程序
        //如果有做过处理,不执行商户的业务程序
        $db = Fn::db();
        $row = TransactionRecordModel::transactionRecordInfoByTrNo($out_trade_no);
        if (!$row) {
            die('error:out_trade_no_not_exist');
        }
        if ($row['tr_flag'] == 1) {
            // 已处理过
            echo 'success';
            exit;
        }
        if (!$db->beginTransaction()) {
            die('error:start_transaction_failed');
        }
        $param = array('tr_flag' => 1, 'tr_finishtime' => $time);
        TransactionRecordModel::setTransactionRecordByTrNo($out_trade_no, $param);
        $sql = <<<EOT
UPDATE rd_student SET account = account + ({$row['tr_trade_amount']}) 
WHERE uid = {$row['tr_uid']}
EOT;
        $flag = $db->exec($sql);
        if (!$db->commit()) {
            $db->rollBack();
            die('error:commit_transaction_failed');
        }
        //注意:
        //付款完成后,支付宝系统发送该交易状态通知
        echo "success";
        exit;
    }
Example #3
0
 function __construct()
 {
     $alipayConfig = new AlipayConfig();
     $this->alipay_config = $alipayConfig->getConfig();
 }