mFcodeBannerID = $config['autosend_fcodes']['payconfirm_spid']; } public function calc_cashOp() { $cart_ids = explode(',', urldecode($_POST['cart_id'])); if (empty($cart_ids)) { return self::outerr(errcode::ErrParamter); } $logic_buy = Logic('buy'); $id_num = $this->pay_goods($cart_ids); //得到购买数据 $result = $logic_buy->buyStep1($id_num, $_POST['ifcart'], $_SESSION['member_id'], $_SESSION['store_id']); if (!$result['state']) { return self::outerr(errcode::ErrOrder, $result['msg']); } else { $result = $result['data']; } $buy_helper = new buy_first($result, $this->price_calcer()); if ($buy_helper->check_fcode($error) == false) { return self::outerr(errcode::ErrPayment, $error); } else { $result = $buy_helper->format(); $cash_amount = $result['payinfo']['pay_car_pred']; $total_amonut = $result['payinfo']['pay_car_nopred']; return self::outsuccess(['cash_amount' => $cash_amount, 'goods_amount' => $total_amonut, 'payinfo' => $result['payinfo']]); } } public function step_firstOp() { $cart_ids = explode(',', urldecode($_POST['cart_id'])); if (empty($cart_ids)) { return self::outerr(errcode::ErrParamter); } $virtual_goods = $this->virtual_goods($_POST, $cart_ids); if ($virtual_goods == false) { $logic_buy = Logic('buy'); $id_num = $this->pay_goods($cart_ids); $result = $logic_buy->buyStep1($id_num, $_POST['ifcart'], session_helper::memberid(), $_SESSION['store_id']); $fVirual = false; } else { #虚拟商品 $logic_buy = Logic('buy_virtual'); $result = $logic_buy->getBuyStep2Data($virtual_goods['goods_id'], $virtual_goods['num'], session_helper::memberid()); $fVirual = true; } if (!$result['state']) { return self::outerr(errcode::ErrOrder, $result['msg']); } else { $result = $result['data']; } if ($fVirual) { $buy_helper = new buyv_first($result, $this->price_calcer()); } else { $buy_helper = new buy_first($result, $this->price_calcer()); } if ($buy_helper->check_fcode($error) == false) { return self::outerr(errcode::ErrPayment, $error); } else { $result = $buy_helper->format(); return self::outsuccess($result); } } private function virtual_goods($input, $cart_id) { if (boolval($input['ifcart']) == true) return false; //存放所购商品ID和数量组成的键值对 $buy_items = []; if (is_array($cart_id)) { foreach ($cart_id as $value) { if (preg_match_all('/^(\d{1,10})\|(\d{1,6})$/', $value, $match)) { if (intval($match[2][0]) > 0) { $buy_items[$match[1][0]] = $match[2][0]; } } } } if (count($buy_items) != 1) return false; foreach ($buy_items as $key => $val) { $goods_id = intval($key); $num = intval($val); } $mod_goods = Model('goods'); $info = $mod_goods->getGoodsInfoByID($goods_id); if ($info['is_virtual'] != 1) return false; return ['goods_id' => $goods_id, 'num' => $num]; } public function step_secondOp() { $cart_ids = explode(',', urldecode($_POST['cart_id'])); if (empty($cart_ids)) { return self::outerr(errcode::ErrParamter); } $param = []; $param['ifcart'] = $_POST['ifcart']; $param['cart_id'] = $this->pay_goods($cart_ids); $param['address_id'] = $_POST['address_id']; $param['invoice_id'] = $_POST['invoice_id']; $param['vat_hash'] = $_POST['vat_hash']; $param['offpay_hash'] = $_POST['offpay_hash']; $param['offpay_hash_batch'] = $_POST['offpay_hash_batch']; $param['voucher'] = []; $param['pd_pay'] = 0; $param['rcb_pay'] = 0; $param['password'] = ""; $param['fcode'] = ""; $param['order_from'] = 2; //从手机来 $param['pay_name'] = "online"; $param['usebonus'] = $_POST['usebonus']; $param['pd_pay'] = empty($_POST['usepred']) ? 0 : 1; $param['room_id'] = $_POST['room_id']; $logic_buy = Logic('buy'); $result = $logic_buy->buyStep2($param, $_SESSION['member_id'], $_SESSION['member_name'], $_SESSION['member_email']); if (!$result['state']) { return self::outerr(errcode::ErrOrder, $result['msg']); } else { $pay_sn = $result['data']['pay_sn']; $payment = $_POST['payment']; $payer = new pay_helper($pay_sn); $out_put = $payer->pay($payment, $err); if ($out_put == false) { return self::outerr($err['code'], $err['msg']); } else { $out_put['payment'] = $payment; $out_put['pay_sn'] = $pay_sn; return self::outsuccess($out_put); } } } private function check_time() { $start_tm = localtime(strtotime('2020-09-28'),true); $end_tm = localtime(strtotime('2020-10-08'),true); $tm = localtime(time(), true); // return ($tm['tm_hour'] > 8 && $tm['tm_hour'] < 21) && ($tm['tm_yday'] < $start_tm['tm_yday'] || $tm['tm_yday'] > $end_tm['tm_yday']); return ($tm['tm_hour'] > 8 && $tm['tm_hour'] < 21 && $tm['tm_wday'] > 0 && $tm['tm_wday'] < 6); } public function step_vsecondOp() { if(!$this->check_time()) { return self::outerr(errcode::ErrInputParam, '目前充值时间段为9:00--21:00,本周六周日运营商系统维护,请下周再来~'); // return self::outerr(errcode::ErrInputParam, '国庆节期间系统维护,其余充值时间段为9:00--21:00~'); // return self::outerr(errcode::ErrInputParam, '系统正在维护,请稍后再试~'); } $cart_ids = explode(',', urldecode($_POST['cart_id'])); $virtual_goods = $this->virtual_goods($_POST, $cart_ids); $logic_buy_virtual = Logic('buy_virtual'); $input = []; $input['goods_id'] = $virtual_goods['goods_id']; $input['quantity'] = $virtual_goods['num']; $input['buyer_phone'] = $_POST['buyer_phone'] ?? session_helper::mobile(); $input['buyer_name'] = $_POST['buyer_name'] ?? session_helper::nickname(); $input['buyer_msg'] = $_POST['buyer_msg'] ?? ''; [$fExtra, $extra_info, $order_check] = $this->extra_info($input['goods_id'], $_POST); if (!$fExtra) { Log::record("step_vsecond error", Log::ERR); return self::outerr(errcode::ErrInputParam, '缺少虚拟商品额外指定参数.'); } if(array_key_exists('phone_no',$extra_info['input']) && empty($extra_info['input']['phone_no'])) { return self::outerr(errcode::ErrInputParam, '一个手机号只能绑定一张油卡,请换卡.'); } if(!empty($order_check)) { $logic = Logic('queue'); $ret = $logic->$order_check(['extra_info' => $extra_info,'goods_id' => $input['goods_id']]); if(!$ret['state']) { return self::outerr(errcode::ErrInputParam, $ret['msg']); } } $input['order_from'] = 2; $calctor = new CalcPrice(session_helper::memberid()); $result = $logic_buy_virtual->buyStep3($input, session_helper::memberid(),[$calctor,'calc_vorder_amount']); if (!$result['state']) { return self::outerr(errcode::ErrOrder, $result['msg']); } else { $calctor->deduct_order($result['data']['order_id']); $payment = $_POST['payment']; $order_sn = $result['data']['order_sn']; $payer = new pay_helper($order_sn); $out_put = $payer->pay($payment, $err); if ($out_put == false) { return self::outerr($err['code'], $err['msg']); } else { $out_put['payment'] = $payment; $out_put['pay_sn'] = $order_sn; if (!empty($extra_info)) { Model('vr_order')->editOrder(['extra_info' => json_encode($extra_info, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)], ['order_sn' => $order_sn]); } QueueClient::push('OnVrOrderSuccess', ['order_sn' => $order_sn]); return self::outsuccess($out_put); } } } public function extra_info($goods_id, $input) { global $config; $handlers = $config['vgoods_handlers']; if (array_key_exists($goods_id, $handlers)) { $handler = $handlers[$goods_id]; $extra = []; $types = $handler['input_params']; foreach ($types as $item) { if (isset($input[$item])) { $extra['input'][$item] = $input[$item]; } elseif(session_helper::version_code() <= 171 && $item == "phone_no") { $extra['input'][$item] = ""; } else { Log::record("{$goods_id}号商品,在提交订单中,缺少{$item}字段.", Log::ERR); return [false, [], '']; } } if (!empty($handler['additional'])) { $extra['additional'] = $handler['additional']; } if(array_key_exists('phone_no',$extra['input'])) { $phone_no = $this->check_oilmobile($extra['input']); $extra['input']['phone_no'] = $phone_no; } return [true, $extra, $handler['order_check']]; } return [true, [], '']; } private function check_oilmobile($params) { $phone_no = $params['phone_no']; $card_no = $params['card_no']; if(empty($card_no)) { return ""; } $find_card = function ($topcard,$card_no) { $items = $topcard->table('topcard')->field('*')->where(['card_no' => $card_no])->select(); if(empty($items)) { return ""; } else { return $items[0]['bind_phone']; } }; $find_phone = function ($topcard,$phone_no) { $items = $topcard->table('topcard')->field('*')->where(['bind_phone' => $phone_no])->select(); if(empty($items)) { return ""; } else { return $items[0]['card_no']; } }; $topcard = Model('topcard'); $phone = $find_card($topcard,$card_no); if(!empty($phone)) { return $phone; } $card = $find_phone($topcard,$phone_no); if(empty($card)) { return $phone_no; } else { return ""; } } public function pay_confirmOp() { $pay_sn = $_GET['pay_sn']; if (empty($pay_sn)) { return self::outerr(errcode::ErrParamter, "支付号或者支付类型错误"); } $payer = new pay_helper($pay_sn); $paied = $payer->confirm($err, $amount, $fcode_state); if ($paied == false) { return self::outerr($err['code'], $err['msg']); } else { session_helper::add_order(); if ($fcode_state == 1) { return self::outsuccess(['special_list' => null, 'summary' => null, 'groupbuy' => null, 'limitime' => null, 'bundling' => null, 'mobile_page' => mobile_page(1)]); } else { $result = fcode\send_manager::instance()->fetch($amount, $pay_sn, session_helper::mobile(), session_helper::session_id()); if ($result != false) { $order_pay = Model('order_pay'); $order_pay->where(['pay_sn' => $pay_sn])->update(['fcode_state' => 1]); $fcode = new user_session\fcode(); $fcode->onStatus(); if ($this->mFcodeBannerID > 0) { $blocks = special_manager::instance()->special($this->mFcodeBannerID, $unused_gids); } else { $blocks = []; } foreach ($result['banner'] as $block) { $blocks[] = $block; } $fcodes = []; $gids = []; foreach ($result['fcode'] as $item) { $fcoder = new fcode\mfcode($item); $fcode = $fcoder->format(); if ($fcode != false) { $gids[] = intval($fcode['goods_id']); $fcodes[] = $fcode; } } $fcode_blocks = $this->fcode_blocks($fcodes); foreach ($fcode_blocks as $fblock) { $blocks[] = $fblock; } $helper = new goods_helper($this->price_calcer(), false); $ret = $helper->cart_summary($gids, $related_goods); return self::outsuccess(['special_list' => $blocks, 'fcodes' => $fcodes, 'summary' => $ret['summary'], 'groupbuy' => $ret['groupbuy'], 'limitime' => $ret['limitime'], 'bundling' => $ret['bundling'], 'mobile_page' => mobile_page(1)]); } else { return self::outsuccess(['special_list' => null, 'summary' => null, 'groupbuy' => null, 'limitime' => null, 'bundling' => null, 'mobile_page' => mobile_page(1)]); } } } } private function fcode_blocks($fcodes) { $blocks = []; foreach ($fcodes as $fcode) { $block = []; $block['item_title'] = ''; $block['item_type'] = 'home1'; $block['scale'] = 3.224299; $item['image'] = ''; $item['show_type'] = "fcode"; $item['show_data'] = strval($fcode['fcode_id']); $item['type'] = "goods"; $item['data'] = strval($fcode['goods_id']);; $item['title'] = ''; $block['items'][] = $item; $blocks[] = $block; } return $blocks; } public function change_addrexOp() { $logic_buy = Logic('buy'); $data = $logic_buy->changeAddr($_POST['freight_hash'], $_POST['city_id'], $_POST['area_id'], $_SESSION['member_id']); if (!empty($data) && $data['state'] == 'success') { $result['offpay_hash'] = $data['offpay_hash']; $result['offpay_hash_batch'] = $data['offpay_hash_batch']; $freight = 0.00; foreach ($data['content'] as $value) { $freight += $value['value']; } $result['freight'] = $freight; return self::outsuccess($result); } else { return self::outerr(errcode::ErrOrder, '地址修改失败'); } } private function pay_goods($cart_ids) { if (boolval($_POST['ifcart']) == true) { $mod_cart = Model('cart'); $items = $mod_cart->listCart('db', ['cart_id' => ['in', $cart_ids]], false); $id_num = []; foreach ($items as $val) { $cart_id = $val['cart_id']; $goods_num = $val['goods_num']; $id_num[] = "{$cart_id}|{$goods_num}"; } return $id_num; } else { $id_num = $cart_ids; return $id_num; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public function check_passwordOp() { if (empty($_POST['password'])) { return self::outerr(errcode::ErrOrder, '参数错误'); } $model_member = Model('member'); $member_info = $model_member->getMemberInfoByID($_SESSION['member_id']); if ($member_info['member_paypwd'] == md5($_POST['password'])) { return self::outsuccess(['result' => '1']); } else { return self::outerr(errcode::ErrOrder, '密码错误'); } } }