123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- <?php
- /**
- * 购买
- *
- *
- *
- *
- */
- //use Shopnc\Tpl;
- defined('InShopNC') or exit('Access Invalid!');
- require_once(BASE_HELPER_PATH . '/bonus_helper.php');
- require_once(BASE_HELPER_PATH . '/buy_first.php');
- require_once(BASE_HELPER_PATH . '/pay_helper.php');
- require_once(BASE_HELPER_PATH . '/fcode/operator.php');
- require_once(BASE_HELPER_PATH . '/fcode/send_manager.php');
- require_once(BASE_HELPER_PATH . '/user_session/fcode.php');
- require_once(BASE_HELPER_PATH . '/calc_helper.php');
- class member_buyControl extends mbMemberControl
- {
- private $mFcodeBannerID;
- public function __construct()
- {
- parent::__construct();
- global $config;
- $this->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, '密码错误');
- }
- }
- }
|