Exemple #1
0
 protected function pay($params = array(), $mine = array())
 {
     global $_W;
     if (!$this->inMobile) {
         message('支付功能只能在手机上使用');
     }
     if (empty($_W['member']['uid'])) {
         checkauth();
     }
     $params['module'] = $this->module['name'];
     $pars = array();
     $pars[':uniacid'] = $_W['uniacid'];
     $pars[':module'] = $params['module'];
     $pars[':tid'] = $params['tid'];
     if ($params['fee'] <= 0) {
         $pars['from'] = 'return';
         $pars['result'] = 'success';
         $pars['type'] = 'alipay';
         $pars['tid'] = $params['tid'];
         $site = WeUtility::createModuleSite($pars[':module']);
         $method = 'payResult';
         if (method_exists($site, $method)) {
             exit($site->{$method}($pars));
         }
     }
     $sql = 'SELECT * FROM ' . tablename('core_paylog') . ' WHERE `uniacid`=:uniacid AND `module`=:module AND `tid`=:tid';
     $log = pdo_fetch($sql, $pars);
     if (!empty($log) && $log['status'] == '1') {
         message('这个订单已经支付成功, 不需要重复支付.');
     }
     $setting = uni_setting($_W['uniacid'], array('payment', 'creditbehaviors'));
     if (!is_array($setting['payment'])) {
         message('没有有效的支付方式, 请联系网站管理员.');
     }
     $pay = $setting['payment'];
     if (!empty($pay['credit']['switch'])) {
         $credtis = mc_credit_fetch($_W['member']['uid']);
     }
     $you = 0;
     if ($pay['card']['switch'] == 2) {
         if ($_W['card_permission'] == 1 && !empty($params['module'])) {
             $cards = pdo_fetchall('SELECT a.id,a.card_id,a.cid,b.type,b.title,b.extra,b.is_display,b.status,b.date_info FROM ' . tablename('coupon_modules') . ' AS a LEFT JOIN ' . tablename('coupon') . ' AS b ON a.cid = b.id WHERE a.acid = :acid AND a.module = :modu AND b.is_display = 1 AND b.status = 3 ORDER BY a.id DESC', array(':acid' => $_W['acid'], ':modu' => $params['module']));
             $flag = 0;
             if (!empty($cards)) {
                 foreach ($cards as $temp) {
                     $temp['date_info'] = iunserializer($temp['date_info']);
                     if ($temp['date_info']['time_type'] == 1) {
                         $starttime = strtotime($temp['date_info']['time_limit_start']);
                         $endtime = strtotime($temp['date_info']['time_limit_end']);
                         if (TIMESTAMP < $starttime || TIMESTAMP > $endtime) {
                             continue;
                         } else {
                             $param = array(':acid' => $_W['acid'], ':openid' => $_W['openid'], ':card_id' => $temp['card_id']);
                             $num = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename('coupon_record') . ' WHERE acid = :acid AND openid = :openid AND card_id = :card_id AND status = 1', $param);
                             if ($num <= 0) {
                                 continue;
                             } else {
                                 $flag = 1;
                                 $card = $temp;
                                 break;
                             }
                         }
                     } else {
                         $deadline = intval($temp['date_info']['deadline']);
                         $limit = intval($temp['date_info']['limit']);
                         $param = array(':acid' => $_W['acid'], ':openid' => $_W['openid'], ':card_id' => $temp['card_id']);
                         $record = pdo_fetchall('SELECT addtime,id,code FROM ' . tablename('coupon_record') . ' WHERE acid = :acid AND openid = :openid AND card_id = :card_id AND status = 1', $param);
                         if (!empty($record)) {
                             foreach ($record as $li) {
                                 $time = strtotime(date('Y-m-d', $li['addtime']));
                                 $starttime = $time + $deadline * 86400;
                                 $endtime = $time + $deadline * 86400 + $limit * 86400;
                                 if (TIMESTAMP < $starttime || TIMESTAMP > $endtime) {
                                     continue;
                                 } else {
                                     $flag = 1;
                                     $card = $temp;
                                     break;
                                 }
                             }
                         }
                         if ($flag) {
                             break;
                         }
                     }
                 }
             }
             if ($flag) {
                 if ($card['type'] == 'discount') {
                     $you = 1;
                     $card['fee'] = sprintf("%.2f", $params['fee'] * ($card['extra'] / 100));
                 } elseif ($card['type'] == 'cash') {
                     $cash = iunserializer($card['extra']);
                     if ($params['fee'] >= $cash['least_cost']) {
                         $you = 1;
                         $card['fee'] = sprintf("%.2f", $params['fee'] - $cash['reduce_cost']);
                     }
                 }
                 load()->classs('coupon');
                 $acc = new coupon($_W['acid']);
                 $card_id = $card['card_id'];
                 $time = TIMESTAMP;
                 $randstr = random(8);
                 $sign = array($card_id, $time, $randstr, $acc->account['key']);
                 $signature = $acc->SignatureCard($sign);
                 if (is_error($signature)) {
                     $you = 0;
                 }
             }
         }
     }
     $we_you = 0;
     if ($pay['card']['switch'] == 3) {
         if (!empty($params['module'])) {
             $cards = pdo_fetchall('SELECT a.id,a.couponid,b.type,b.title,b.discount,b.condition,b.starttime,b.endtime FROM ' . tablename('activity_coupon_modules') . ' AS a LEFT JOIN ' . tablename('activity_coupon') . ' AS b ON a.couponid = b.couponid WHERE a.uniacid = :uniacid AND a.module = :modu AND b.starttime <= :time AND b.endtime >= :time  ORDER BY a.id DESC', array(':uniacid' => $_W['uniacid'], ':modu' => $params['module'], ':time' => TIMESTAMP));
             if (!empty($cards) && $_W['member']['uid']) {
                 foreach ($cards as $card) {
                     $has = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename('activity_coupon_record') . ' WHERE uid = :uid AND uniacid = :aid AND couponid = :cid AND status = 1', array(':uid' => $_W['member']['uid'], ':aid' => $_W['uniacid'], ':cid' => $card['couponid']));
                     if ($has > 0) {
                         if ($card['type'] == '1') {
                             $we_you = 1;
                             $card['fee'] = sprintf("%.2f", $params['fee'] * $card['discount']);
                             break;
                         } elseif ($card['type'] == '2') {
                             if ($params['fee'] >= $cash['condition']) {
                                 $we_you = 1;
                                 $card['fee'] = sprintf("%.2f", $params['fee'] - $card['discount']);
                                 break;
                             }
                         }
                     }
                 }
             }
         }
     }
     include $this->template('common/paycenter');
 }