435 行
17 KiB
PHP
可执行文件
435 行
17 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace SmallProgramApi\Controller;
|
|
|
|
//[1.7.15]
|
|
|
|
class PlusVipController extends BaseController
|
|
{
|
|
public function _initialize()
|
|
{
|
|
parent::_initialize();
|
|
if (empty(self::$store_id)) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '缺少门店参数';
|
|
$this->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);
|
|
}
|
|
|
|
|
|
} |