ajaxReturn($res); } } /*获取用户 *@param $uid 小程序用户id *@param $merchantid 商户id *@return array * */ public function getUser() { $uid = self::$uid; if (!$uid) { $res['status'] = 0; $res['msg'] = '用户id缺失'; $this->ajaxReturn($res); } $user_type = self::$user['user_type']; // 1.普通用户 2.付费会员 3.常规会员 $user_type = $user_type ? $user_type : 1; $res['status'] = 1; $res['user_type'] = $user_type; $this->ajaxReturn($res); } /* *根据付费会员还是会员展示不同的引导页面 * */ public function guidance() { $user_type = I('post.user_type'); $merchant_id = self::$merchant_id; $PlusSetModel = D('RetailPlusSet'); if ($user_type == 2) { //付费会员 $field = array( $PlusSetModel::ID, $PlusSetModel::RENEW_GALLERY_ID, $PlusSetModel::RENEW_TEXT . ' as text', $PlusSetModel::RENEW_RECHARGE_SWITCH_TYPE . ' as recharge_plus', $PlusSetModel::RENEW_PURCHASE_SWITCH_TYPE . ' as buy_plus', $PlusSetModel::RENEW_PURCHASE_MONEY . ' as buy_plus_money', ); } else { //普通用户和会员 $field = array( $PlusSetModel::ID, $PlusSetModel::GALLERY_ID, $PlusSetModel::TEXT, $PlusSetModel::RECHARGE_SWITCH_TYPE . ' as recharge_plus', $PlusSetModel::PURCHASE_SWITCH_TYPE . ' as buy_plus', $PlusSetModel::PURCHASE_MONEY . ' as buy_plus_money', $PlusSetModel::GOODS_SWITCH_TYPE . ' as buy_goods', ); } $data = $PlusSetModel->getFind(array($PlusSetModel::MERCHANT_ID => $merchant_id), $field); if (!$data) { $res['status'] = 0; $res['msg'] = '暂无会员设置'; $this->ajaxReturn($res); } if ($data[$PlusSetModel::SWITCH_TYPE] && $data[$PlusSetModel::SWITCH_TYPE] == 1) { //付费会员 $res['status'] = 0; $res['msg'] = '商户暂未启用付费会员'; $this->ajaxReturn($res); } if ($data[$PlusSetModel::GALLERY_ID]) { //付费会员 $background = $this->getGoodsImage($data[$PlusSetModel::GALLERY_ID]); $data['background'] = $background ? $background : $this->REQUEST_URL . '/Public/images/xcx_default_avatar.png'; } if ($data[$PlusSetModel::RENEW_RECHARGE_SWITCH_TYPE] && $data[$PlusSetModel::RENEW_RECHARGE_SWITCH_TYPE] == 1) { //普通用户和会员 $res['status'] = 0; $res['msg'] = '商户暂未启用续费付费会员'; $this->ajaxReturn($res); } if ($data[$PlusSetModel::RENEW_GALLERY_ID]) { //普通用户和会员 $background = $this->getGoodsImage($data[$PlusSetModel::RENEW_GALLERY_ID]); $data['background'] = $background ? $background : $this->REQUEST_URL . '/Public/images/xcx_default_avatar.png'; } $res['status'] = 1; $res['data'] = $data; $this->ajaxReturn($res); } /* 注册会员 绑定小程序用户 * * */ protected function register_vip($phone, $merchant_id, $store_id, $user) { $VipModel = D('RetailVip'); $where[$VipModel::MOBILE_PHONE] = array('in', $phone); $where[$VipModel::MERCHANT_ID] = $merchant_id; $where[$VipModel::STATUS] = array('neq', 2); $find = $VipModel->getFind($where); if ($find) { // 手机号已注册 $res['status'] = 0; $res['msg'] = '该手机号已被注册'; return $res; } // 注册会员 $time = time(); $CryptrModel = new \Addons\Api\Crypto (); // 加密 $password = substr($phone, -6); // 手机后6位 $cr[$VipModel::PASSWORD] = $CryptrModel->encrypt($password, date('YmdHis', intval($time))); $cr[$VipModel::MOBILE_PHONE] = $phone; $SPUModel = D('RetailSmallProgramUser'); $cr[$VipModel::AVATAR] = $user[$SPUModel::AVATAR]; $cr[$VipModel::NICK_NAME] = $user[$SPUModel::NICKNAME]; $cr[$VipModel::CARD_NUM] = $phone; $cr[$VipModel::STORE_ID] = $store_id; $cr[$VipModel::MERCHANT_ID] = $merchant_id; $cr[$VipModel::ADD_TIME] = $time; $add = $VipModel->addOrder($cr); if (!$add) { $res['status'] = 0; $res['msg'] = '会员注册失败'; return $res; } $save = $SPUModel->updateOrder(array($SPUModel::ID => $user[$SPUModel::ID]), array($SPUModel::VID => $add)); if (!$save) { $res['status'] = 0; $res['msg'] = '绑定失败'; } else { $res['status'] = 1; $res['vid'] = $add; $res['msg'] = '绑定成功'; } return $res; } /* * plus查找订单 */ public function searchOrder() { $pay_order_id = I('post.pay_order_id'); $merchant_id = self::$merchant_id; $store_id = self::$store_id; if (!$pay_order_id || !$merchant_id || !$store_id) { $res['status'] = 0; $res['msg'] = '参数缺失'; $this->ajaxReturn($res); } $PayOrderModel = D('RetailPayOrder'); $PlusRecordModel = D('RetailPlusRecord'); $where = array( 'r.' . $PlusRecordModel::ID => $pay_order_id, 'o.' . $PayOrderModel::ORDER_STATE => 'SUCCESS', 'o.' . $PayOrderModel::MERCHANT_ID => $merchant_id, 'o.' . $PayOrderModel::STORE_ID => $store_id, 'r.' . $PlusRecordModel::PAY_STATE => 1 ); $field = array( 'o.' . $PayOrderModel::OUT_TRADE_NO, 'o.' . $PayOrderModel::TRADE_AMOUNT, 'o.' . $PayOrderModel::ORDER_STATE, 'r.*' ); $find = $PlusRecordModel->getPlusOrder($where, $field); if (!$find) { $res['status'] = 2; $res['msg'] = '查询失败'; } else { $res['status'] = 1; $res['msg'] = '查询成功'; } $this->ajaxReturn($res); } /** * 根据付费会员还是会员展示不同的引导页面 */ public function guidance_v1() { $merchant_id = self::$merchant_id; $PlusSetModel = D('RetailPlusSet'); $vip = $this->getVipInfo(); if (!empty($vip['plus_id'])) { //续费 $fields = array( $PlusSetModel::ID, $PlusSetModel::RENEW_GALLERY_ID, $PlusSetModel::RENEW_TEXT . ' as text', $PlusSetModel::RENEW_RECHARGE_SWITCH_TYPE . ' as recharge_plus', $PlusSetModel::RENEW_PURCHASE_SWITCH_TYPE . ' as buy_plus', ); } else { //初次购买 $fields = array( $PlusSetModel::ID, $PlusSetModel::GALLERY_ID, $PlusSetModel::TEXT, $PlusSetModel::RECHARGE_SWITCH_TYPE . ' as recharge_plus', $PlusSetModel::PURCHASE_SWITCH_TYPE . ' as buy_plus', $PlusSetModel::GOODS_SWITCH_TYPE . ' as buy_goods', $PlusSetModel::GOODS_GROUP_SWITCH_TYPE . ' as buy_group_goods', ); } $plusSet = $PlusSetModel->getFind(array($PlusSetModel::MERCHANT_ID => $merchant_id), $fields); if (!$plusSet) { $res['status'] = 0; $res['msg'] = '暂无会员设置'; $this->ajaxReturn($res); } if ($plusSet[$PlusSetModel::SWITCH_TYPE] && $plusSet[$PlusSetModel::SWITCH_TYPE] == 1) { //付费会员 $res['status'] = 0; $res['msg'] = '商户暂未启用付费会员'; $this->ajaxReturn($res); } if ($plusSet[$PlusSetModel::GALLERY_ID]) { //付费会员 $background = $this->getGoodsImage($plusSet[$PlusSetModel::GALLERY_ID]); $plusSet['background'] = $background ? $background : $this->REQUEST_URL . '/Public/images/xcx_default_avatar.png'; } if ($plusSet[$PlusSetModel::RENEW_RECHARGE_SWITCH_TYPE] && $plusSet[$PlusSetModel::RENEW_RECHARGE_SWITCH_TYPE] == 1) { //普通用户和会员 $res['status'] = 0; $res['msg'] = '商户暂未启用续费付费会员'; $this->ajaxReturn($res); } if ($plusSet[$PlusSetModel::RENEW_GALLERY_ID]) { //普通用户和会员 $background = $this->getGoodsImage($plusSet[$PlusSetModel::RENEW_GALLERY_ID]); $plusSet['background'] = $background ? $background : $this->REQUEST_URL . '/Public/images/xcx_default_avatar.png'; } if ($plusSet['buy_plus'] == 2) { $PlusActivityModel = D('PlusActivity'); $cMap = array( $PlusActivityModel::MERCHANT_ID => $merchant_id, $PlusActivityModel::STATE => 1, $PlusActivityModel::TYPE => !empty($vip['plus_id']) ? 2 : 1, $PlusActivityModel::STATUS => 1, ); $fields = array( $PlusActivityModel::ID, $PlusActivityModel::TIME, $PlusActivityModel::TIME_NAME, $PlusActivityModel::PRICE, ); $actList = $PlusActivityModel->getSelect($cMap, $fields);//直接购买的套餐 } else { $actList = array(); } $plusSet['buy_goods'] = $plusSet['buy_goods'] == 2 || $plusSet['buy_group_goods'] == 2 ? 2 : 1; if(!empty($plusSet['text'])){ $plusSet['text'] = str_replace('img src="/', 'img src="' . $this->REQUEST_URL . '/', $plusSet['text']); $plusSet['text'] = str_replace("img src="/", "img src="" . $this->REQUEST_URL . '/', $plusSet['text']); $plusSet['text'] = str_replace("style=''", "", $plusSet['text']); $plusSet['text'] = str_replace('style=""', "", $plusSet['text']); $plusSet['text'] = str_replace('src="/Uploads/', 'src="' . $this->REQUEST_URL . '/Uploads/', $plusSet['text']); } $res['status'] = 1; $res['data'] = $plusSet; $res['activityList'] = $actList; $this->ajaxReturn($res); } /** * 用户成为付费会员(下单) */ public function placeOrder_v1() { $uid = self::$uid; $merchant_id = self::$merchant_id; $store_id = self::$store_id; $user = self::$user; $user_type = $user['user_type']; // 1.普通用户 2.plus会员 3.会员 $activity_id = I('post.activity_id'); //套餐id $phone = I('post.phone'); //会员手机号 if (empty($uid) || $user['login_state'] != 1) { $res['status'] = -1; $res['msg'] = '用户未登录'; $this->ajaxReturn($res); } if (!$activity_id) { $res['status'] = 0; $res['msg'] = '缺少套餐id'; $this->ajaxReturn($res); } $PlusSetModel = D('RetailPlusSet'); $field = array( $PlusSetModel::ID, $PlusSetModel::PURCHASE_SWITCH_TYPE, $PlusSetModel::RENEW_PURCHASE_SWITCH_TYPE, ); $become = $PlusSetModel->getFind(array($PlusSetModel::MERCHANT_ID => $merchant_id), $field); if (!$become) { $res['status'] = 0; $res['msg'] = '未查询到该商户设置的plus会员操作'; $this->ajaxReturn($res); } if(!empty($user['plus_id'])){ // 续费操作 if ($become[$PlusSetModel::RENEW_PURCHASE_SWITCH_TYPE] != 2) { $res['status'] = 0; $res['msg'] = '商家未开启续费Plus会员'; $this->ajaxReturn($res); } } else { // 购买操作 if ($become[$PlusSetModel::PURCHASE_SWITCH_TYPE] != 2) { $res['status'] = 0; $res['msg'] = '商家未开启购买Plus会员'; $this->ajaxReturn($res); } } $SPUModel = D('RetailSmallProgramUser'); $VipModel = D('RetailVip'); if (!$user[$SPUModel::VID]) { // 非会员 绑定会员 if (!$phone) { $res['status'] = 0; $res['msg'] = '请输入手机号'; $this->ajaxReturn($res); } $vip_res = $this->register_vip($phone, $merchant_id, $store_id, $user); if ($vip_res['status'] == 0) { $res['status'] = 0; $res['msg'] = $vip_res['msg']; $this->ajaxReturn($res); } $map[$VipModel::ID] = $vip_res['vid']; } else { $map[$VipModel::ID] = $user['vid']; } $map[$VipModel::STATUS] = array('in', '1,3,4'); /* 查询会员会员状态 */ $vip = $VipModel->getFind($map); if (empty($vip)) { $res['status'] = 0; $res['msg'] = '未查询到会员信息'; $this->ajaxReturn($res); } if ($vip[$VipModel::STATUS] == 3) { $res['status'] = 0; $res['msg'] = '该会员卡为冻结状态,请联系商家'; $this->ajaxReturn($res); } if ($vip[$VipModel::STATUS] == 4) { $res['status'] = 0; $res['msg'] = '该会员卡为遗失状态,请联系商家'; $this->ajaxReturn($res); } $PlusActivityModel = D('PlusActivity'); $cMap = array( $PlusActivityModel::MERCHANT_ID => $merchant_id, $PlusActivityModel::STATE => 1, $PlusActivityModel::ID => $activity_id, $PlusActivityModel::TYPE => !empty($vip['plus_id']) ? 2 : 1, ); $activity = $PlusActivityModel->getFind($cMap); if (empty($activity)) { $res['status'] = 0; $res['msg'] = '套餐不存在,请刷新重试'; $this->ajaxReturn($res); } $PayOrderModel = D('RetailPayOrder'); $orderItem = array( $PayOrderModel::VID => $vip[$VipModel::ID], $PayOrderModel::PAY_TYPE => 4, $PayOrderModel::ORDER_TYPE => 5, $PayOrderModel::TRADE_AMOUNT => $activity['price'], $PayOrderModel::MERCHANT_ID => $merchant_id, $PayOrderModel::STORE_ID => $store_id, $PayOrderModel::ORDER_STATE => 'WAIT_BUYER_PAY', $PayOrderModel::ADD_TIME => time(), $PayOrderModel::UID => $uid, ); $payOrder = $PayOrderModel->addPayOrder($orderItem); if (!$payOrder) { $res['status'] = 0; $res['msg'] = '下单失败'; return $res; } /* 生成订单 */ $PlusRecordModel = D('RetailPlusRecord'); $recordItem = array( $PlusRecordModel::PAY_ORDER_ID => $payOrder[$PayOrderModel::ID], $PlusRecordModel::MERCHANT_ID => $merchant_id, $PlusRecordModel::STORE_ID => $store_id, $PlusRecordModel::XCX_UID => $uid, $PlusRecordModel::VIP_ID => $vip[$VipModel::ID], $PlusRecordModel::MONEY => $activity['price'], $PlusRecordModel::PAY_TYPE => 0, // 支付类型 0 未支付 1.微信 2.会员 3支付宝 4现金 5其他 $PlusRecordModel::PAY_STATE => 0, // 支付状态 0.未支付 1.已支付 $PlusRecordModel::TYPE => $user_type == 2 ? 2 : 1, // 1.初始购买 2.续费购买 $PlusRecordModel::ADD_TIME => time(), $PlusRecordModel::ACTIVITY_ID => $activity_id, $PlusRecordModel::TIME => $activity['time'], ); $add = $PlusRecordModel->addOrder($recordItem); if ($add) { $res['status'] = 1; $res['pay_order_id'] = $add; $res['msg'] = '下单成功'; $notify_url = $this->REQUEST_URL . '/index.php/SmallProgramApi/WxPay/plus_notify_url_v2';//普通服务商支付回调地址 $notify_func = "PayApi/Pay/plus_continent_pay_v2";//新大陆回调函数 $payData = A('SmallProgramApi/Pay')->getWxPayData_v1($payOrder, $notify_url, $notify_func); if ($payData['status'] == 1) { $res['status'] = 1; $res['payData'] = $payData['data']; } else { $res = $payData; } } else { $res['status'] = 0; $res['msg'] = '下单失败'; } $this->ajaxReturn($res); } }