Пример #1
0
 public function callbackAlipay()
 {
     $order_no = Input::get('out_trade_no', 0);
     $ali_trade_no = Input::get('trade_no', '');
     $ali_trade_status = Input::get('trade_status', '');
     $amount = Input::get('total_fee', 0);
     $via_id = Input::get('buyer_id', '');
     $refund_account = Input::get('buyer_email', '');
     DB::beginTransaction();
     try {
         $alipay = new Alipay();
         $alipay->verifyNotify();
         $transaction_id = $ali_trade_no;
         $orders = Order::getGroupOrdersByNo($order_no);
         if ($ali_trade_status == 'TRADE_FINISHED' || $ali_trade_status == 'TRADE_SUCCESS') {
             $u_id = 0;
             foreach ($orders as $key => $order) {
                 $u_id = $order->u_id;
                 $o_id = $order->o_id;
                 $order->pay(Alipay::PAYMENT_TAG);
                 $order->checkoutCarts();
             }
             $cart = Cart::where('o_id', '=', $o_id)->where('c_status', '<>', 0)->first();
             if ($cart->c_type == Cart::$TYPE_REGULAR_PRODUCT || $cart->c_type == Cart::$TYPE_FLEA_PRODUCT) {
                 $log_cate = LogTransaction::$CATE_PRODUCT;
             } elseif ($cart->c_type == Cart::$TYPE_CROWD_FUNDING) {
                 $log_cate = LogTransaction::$CATE_CROWDFUNDING;
             } elseif ($cart->c_type == Cart::$TYPE_AUCTION) {
                 $log_cate = LogTransaction::$CATE_AUCTION;
             } else {
                 $log_cate = 0;
             }
             //add transaction log
             $log = new LogTransaction();
             $log->l_type = LogTransaction::$TYPE_TRADE;
             $log->l_cate = $log_cate;
             $log->l_amt = $amount;
             $log->from_type = LogTransaction::$OPERATOR_USER;
             $log->from_id = $u_id;
             $log->to_type = LogTransaction::$OPERATOR_QNCK;
             $log->to_id = 1;
             $log->via_type = LogTransaction::$PAYMENT_ALIPAY;
             $log->via_id = $via_id;
             $log->transaction_id = $transaction_id;
             $log->addLog();
             if (empty($log->l_id)) {
                 throw new Exception("添加交易记录失败", 2001);
             }
             $log_order = new LogTransactionOrders();
             $log_order->l_id = $log->l_id;
             $log_order->o_group_number = $order_no;
             $log_order->refund_account = $refund_account;
             $log_order->save();
         }
         DB::commit();
         echo "success";
         die;
     } catch (Exception $e) {
         DB::rollback();
         echo "fail";
         die;
     }
     exit;
 }
Пример #2
0
 public function actionAlipayNotify()
 {
     //		error_log("ok");
     //		error_log(print_r($_POST,true));
     //ali验证不允许有多余参数
     if (isset($_GET['r'])) {
         unset($_GET['r']);
     }
     global $sysSettings;
     $alipay = new Alipay($sysSettings['payment']['aliPartner'], $sysSettings['payment']['aliKey']);
     if ($alipay->verifyNotify()) {
         //验证成功
         //商户订单号
         $out_trade_no = $_POST['out_trade_no'];
         //支付宝交易号
         $trade_no = $_POST['trade_no'];
         //交易状态
         $trade_status = $_POST['trade_status'];
         $order = Order::model()->findByPk($out_trade_no);
         $course = Course::model()->findByAttributes(array('entityId' => $order->produceEntityId));
         $user = UserInfo::model()->findByPk($order->userId);
         if ($trade_status == 'WAIT_BUYER_PAY') {
             //该判断表示买家已在支付宝交易管理中产生了交易记录,但没有付款
             echo "success";
             //请不要修改或删除
         } else {
             if ($trade_status == 'WAIT_BUYER_CONFIRM_GOODS' || $trade_status == 'WAIT_BUYER_CONFIRM_GOODS' || $trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
                 $order->status = Order::ORDER_PAID;
                 $order->tradeNo = $trade_no;
                 $order->save();
                 $member = CourseMember::model()->findByAttributes(array('userId' => Yii::app()->user->id, 'courseId' => $course->id));
                 if (!$member) {
                     $member = new CourseMember();
                     $member->userId = $user->id;
                     $member->courseId = $course->id;
                     $member->arrRoles = array('student');
                     $member->startTime = time();
                     $member->save();
                 } else {
                     $member->startTime = time();
                     $member->save();
                 }
                 echo "success";
                 //请不要修改或删除
             } else {
                 //其他状态判断
                 echo "success";
             }
         }
     } else {
         //验证失败
         echo "fail";
     }
 }