426 行
16 KiB
PHP
可执行文件
426 行
16 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Vip\Controller;
|
||
|
||
use Think\Controller;
|
||
use Addons\Api\CommonApi;
|
||
use Think\Jssdk;
|
||
use Think\Jssdks;
|
||
|
||
//[1.8.91]
|
||
class IndexController extends BaseController
|
||
{
|
||
Public function index()
|
||
{
|
||
$merchantid = session('merchantid');
|
||
//会员充值页面跳转
|
||
$map['merchantid'] = $merchantid;
|
||
$wechat = M('wxconfig')->where($map)->find();
|
||
if ($wechat['type'] == 1) {
|
||
$jssdk = new Jssdk($wechat['appid'], self::$_wxappsecret);
|
||
} else if ($wechat['type'] == 2) {
|
||
$access_token = get_authorizer_access_token($map['merchantid']);
|
||
$jssdk = new Jssdks($wechat['authorizer_appid'], $access_token);
|
||
} else {
|
||
$this->error('微信配置参数有误');
|
||
}
|
||
$signPackage = $jssdk->GetSignPackage();
|
||
$this->assign('signPackage', $signPackage);
|
||
|
||
$vid = session('vid');
|
||
$where['id'] = $vid;
|
||
$vip = D('Vip')->getFind($where);
|
||
$grade = A('Api/Vipintegral')->getGrade($merchantid, $vip['grade_integral']);//查找会员等级
|
||
$grade['cardname'] = $grade['cardname'] ? $grade['cardname'] : "平民卡";
|
||
if ($vip['plus_type'] == 2) {//plus会员
|
||
$vip['cardname'] = 'Plus会员';
|
||
} else {
|
||
$vip['cardname'] = $grade['cardname'] ? $grade['cardname'] : '普通会员';
|
||
}
|
||
$vip['gradeimgurl'] = $grade['gradeimgurl'] ? $grade['gradeimgurl'] : '/Public/vip/images/top_name_grade.png';
|
||
if ($vip['cardnum']) {
|
||
$vip['cardnum1'] = substr($vip['cardnum'], 0, 4) . "****" . substr($vip['cardnum'], -(strlen($vip['cardnum']) - 8));
|
||
}
|
||
//查看是否完善资料
|
||
if ($vip['is_perfect'] == 0) {
|
||
$where1['id'] = $merchantid;
|
||
$vipConfig = M('vip_config')->where($where1)->find();
|
||
if (intval($vipConfig['infoscore']) > 0) {
|
||
$this->assign('canPerfect', 1);
|
||
$this->assign('score', $vipConfig['infoscore']);
|
||
}
|
||
}
|
||
// 所有隐藏的默认菜单
|
||
$hidedefaultindex = M('retail_vipcardmenu_config')
|
||
->where(array('merchantid' => $merchantid, 'type' => 1, 'hide' => 2))
|
||
->getField('defaultindex', true);
|
||
$hidedefaultindex = $hidedefaultindex ? $hidedefaultindex : array(0);
|
||
$this->assign('defaultindex1', 1);
|
||
$this->assign('defaultindex2', 2);
|
||
$this->assign('defaultindex3', 3);
|
||
$this->assign('defaultindex4', 4);
|
||
$this->assign('defaultindex5', 5);
|
||
$this->assign('hidedefaultindex', $hidedefaultindex);
|
||
// 所有隐藏的插件菜单
|
||
$hideplugarr = M('retail_vipcardmenu_config')
|
||
->where(array('merchantid' => $merchantid, 'type' => 2, 'hide' => 2))->getField('plugid', true);
|
||
$hideplugarr = $hideplugarr ? $hideplugarr : array(0);
|
||
$this->assign('hideplugarr', $hideplugarr);
|
||
unset($map);
|
||
$map['pm.merchant_id'] = $vip['merchantid'];
|
||
$map['pm.m_status'] = 1;
|
||
$map['pm.status'] = 1;
|
||
$map['p.type'] = 1;
|
||
$map['p.status'] = 1;
|
||
$map['p.id'] = 38;//积分商城
|
||
$plug = M('plug_merchant as pm')
|
||
->join('ls_plug as p on p.id=pm.plug_id')
|
||
->where($map)
|
||
->Field('p.id')
|
||
->find();
|
||
$this->assign('is_score_mall', $plug);
|
||
unset($map);
|
||
$map = array();
|
||
$map['pm.merchant_id'] = $vip['merchantid'];
|
||
$map['pm.m_status'] = 1;
|
||
$map['pm.status'] = 1;
|
||
$map['p.type'] = 1;
|
||
$map['p.status'] = 1;
|
||
$map['p.id'] = 41;//优惠券
|
||
$couponplug = M('plug_merchant as pm')
|
||
->join('ls_plug as p on p.id=pm.plug_id')
|
||
->where($map)
|
||
->find();
|
||
$this->assign('is_coupon', $couponplug);
|
||
unset($map);
|
||
$map = array();
|
||
$map['pm.merchant_id'] = $vip['merchantid'];
|
||
$map['pm.m_status'] = 1;
|
||
$map['pm.status'] = 1;
|
||
$map['p.type'] = 1;
|
||
$map['p.status'] = 1;
|
||
$map['p.id'] = 44;//次卡
|
||
$subCardPlug = M('plug_merchant as pm')
|
||
->join('ls_plug as p on p.id=pm.plug_id')
|
||
->where($map)
|
||
->find();
|
||
$this->assign('is_sub_card', $subCardPlug);
|
||
$turntable = $this->getTurntable($vid, $merchantid);//大转盘
|
||
$reward = getRewardActivity(1, $merchantid, '', $vid);//红包
|
||
$notices = M('vipcard_notice')
|
||
->where(array('merchantid' => $merchantid, 'status' => 1, 'state' => 1))
|
||
->order('id desc')
|
||
->select();
|
||
$noticeArr = array();
|
||
foreach ($notices as $n) {
|
||
switch ($n['plug_id']) {
|
||
// case '36':
|
||
// //大转盘
|
||
// if ($activity['code'] == 0 && $activity['activity_type'] == 1) {
|
||
// $n['url'] = "/index.php/Vip/Turntable/index?turntable_id={$activity['activity_id']}";
|
||
// $noticeArr[] = $n;
|
||
// }
|
||
// break;
|
||
case '36':
|
||
//大转盘
|
||
if ($turntable==1) {
|
||
$n['url'] = "/index.php/Vip/Activity/turntable";
|
||
$noticeArr[] = $n;
|
||
}
|
||
break;
|
||
case '39':
|
||
//红包
|
||
if ($reward['status'] == 1) {
|
||
$n['url'] = "/index.php/Vip/Reward/reward.html";
|
||
$noticeArr[] = $n;
|
||
}
|
||
break;
|
||
default:
|
||
$noticeArr[] = $n;
|
||
}
|
||
}
|
||
$this->assign('notices', $noticeArr);
|
||
|
||
$merchant_name = M('retail_merchant')->where(array('id' => $merchantid))->getField('name');
|
||
$this->assign('merchant_name', $merchant_name);
|
||
|
||
//获取会员签名包
|
||
$info = $this->storeCardInfo();
|
||
if (!empty($info)) {
|
||
$mem_signPackage = $this->getHuiYuanSignPackage();
|
||
$this->assign('nocard', 0);
|
||
} else {
|
||
$this->assign('nocard', 1);
|
||
}
|
||
$this->assign('mem_signPackage', $mem_signPackage);
|
||
$this->assign('vip', $vip);
|
||
//如果设置了分享设置
|
||
$shareinfo = M('retail_vipshare')->where(array('merchantid' => $merchantid))->find();
|
||
if ($shareinfo) {
|
||
$http = C('shop_http');
|
||
if (!empty($shareinfo['image_id'])) {
|
||
$shareinfo['image'] = D('ImageGallery')->getFieldPath(array('id' => $shareinfo['image_id']));
|
||
} else {
|
||
$shareinfo['image'] = C('shop_http') . $shareinfo['image'];
|
||
}
|
||
$this->assign('shareinfo', $shareinfo);
|
||
$this->assign('http', $http);
|
||
}
|
||
$userInfo = session('userinfo');
|
||
if ($userInfo['style_model'] == 2) {
|
||
$this->display('index2');
|
||
} else if ($userInfo['style_model'] == 3) {
|
||
$this->display('index3');
|
||
} else {
|
||
$this->display();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 判断是否有大转盘的机会
|
||
* @param $vid 会员ID
|
||
* @param $merchant_id 商户ID
|
||
* @param $money 支付金额
|
||
* @return int
|
||
*/
|
||
private function getTurntable($vid, $merchant_id)
|
||
{
|
||
$map['pm.merchant_id'] = $merchant_id;
|
||
$map['pm.m_status'] = 1;
|
||
$map['p.id'] = 36;
|
||
$turntable_plug = M('plug_merchant as pm')
|
||
->join("ls_plug as p on p.id=pm.plug_id")
|
||
->where($map)
|
||
->find();
|
||
if (!empty($turntable_plug)) {
|
||
$tMap = [
|
||
'merchantid' => $merchant_id,
|
||
'status' => 1,
|
||
'type' => 1,
|
||
'start_time' => ['elt',time()],
|
||
'end_time' => ['egt',time()],
|
||
];
|
||
$turntable = M('turntable')
|
||
->where($tMap)
|
||
->find();
|
||
if(empty($turntable)){
|
||
return 0;
|
||
}
|
||
$us['vid'] = $vid;
|
||
$us['turntableid'] = $turntable['id'];
|
||
$us['type'] = array('neq', 5);
|
||
if ($turntable['maxnum']) {
|
||
$user_max_num = M('turntable_use')->where($us)->count();//用户总中奖次数
|
||
if (intval($turntable['maxnum']) <= $user_max_num) {
|
||
return 0;
|
||
}
|
||
}
|
||
if ($turntable['playnum']) {
|
||
unset($us['type']);
|
||
$user_play_num = M('turntable_use')->where($us)->count();//用户已抽奖次数
|
||
if (intval($turntable['playnum']) <= $user_play_num) {
|
||
return 0;
|
||
}
|
||
}
|
||
if ($turntable['daymaxnum']) {
|
||
//限制每日中奖次数
|
||
$us['type'] = array('neq', 5);
|
||
$us['_string'] = 'addtime <' . time() . ' AND addtime >' . strtotime(date('Y-m-d'));
|
||
$turntable_number = M('turntable_use')->where($us)->count();
|
||
if ($turntable_number >= intval($turntable['daymaxnum'])) {
|
||
$where['type'] = 5;
|
||
$where['turntableid'] = $turntable['id'];
|
||
$prize = M('turntable_prize')->where($where)->find();
|
||
if (empty($prize)) {
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
return 1;
|
||
} else {
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
public function card()
|
||
{
|
||
$merchantid = session('merchantid');
|
||
//会员充值页面跳转
|
||
$map['merchantid'] = $merchantid;
|
||
$wechat = M('wxconfig')->where($map)->find();
|
||
if ($wechat['type'] == 1) {
|
||
$jssdk = new Jssdk($wechat['appid'], self::$_wxappsecret);
|
||
} else if ($wechat['type'] == 2) {
|
||
$access_token = get_authorizer_access_token($map['merchantid']);
|
||
$jssdk = new Jssdks($wechat['authorizer_appid'], $access_token);
|
||
} else {
|
||
$this->error('微信配置参数有误');
|
||
}
|
||
$signPackage = $jssdk->GetSignPackage();
|
||
$this->assign('signPackage', $signPackage);
|
||
//获取会员签名包
|
||
$info = $this->storeCardInfo();
|
||
if (!empty($info)) {
|
||
$mem_signPackage = $this->getHuiYuanSignPackage();
|
||
$this->assign('mem_signPackage', $mem_signPackage);
|
||
} else {
|
||
$this->tipsMsg(0, '商户未创建会员卡');
|
||
}
|
||
$this->display();
|
||
}
|
||
|
||
function clearsessionandcookie()
|
||
{
|
||
foreach ($_COOKIE as $key => $value) {
|
||
setcookie($key, null);
|
||
}
|
||
session_unset();
|
||
$data['cookie'] = $_COOKIE;
|
||
$data['session'] = $_SESSION;
|
||
$this->ajaxReturn($data);
|
||
}
|
||
|
||
//获取token
|
||
public function getToKen()
|
||
{
|
||
//获取会员卡信息
|
||
//获取token
|
||
if (self::$SET['type'] == 1) {
|
||
|
||
$appid = self::$_wxappid;
|
||
$secret = self::$_wxappsecret;
|
||
$json_token = http_request('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $secret);
|
||
$escape_token = json_decode($json_token);//转义
|
||
$token = $escape_token->{'access_token'};//2个小时换一次,一天2000次
|
||
return $token;//返回token值
|
||
} elseif (self::$SET['type'] == 2) {
|
||
$tokens = get_authorizer_access_token(session('merchantid'));
|
||
return $tokens;
|
||
}
|
||
|
||
}
|
||
|
||
//拉去卡券信息
|
||
public function getApiTicket()
|
||
{
|
||
$token = $this->getToKen();//获取token
|
||
$ticket = http_request('https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' . $token . '&type=wx_card');
|
||
$ticket_success = json_decode($ticket);
|
||
if ($ticket_success->{'errmsg'} == 'ok') {
|
||
return $ticket_success->{'ticket'};
|
||
|
||
} else {
|
||
return false;
|
||
}
|
||
|
||
}
|
||
|
||
//获取会员卡信息
|
||
public function storeCardInfo()
|
||
{
|
||
//获取会员卡信息
|
||
$where['merchantid'] = session('merchantid');
|
||
$cardinfo = M('wx_membercard')->Field('id,card_id')->where($where)->find();
|
||
return $cardinfo;
|
||
}
|
||
|
||
//获取会员卡签名包
|
||
public function getHuiYuanSignPackage()
|
||
{
|
||
$apiTicket = $this->getApiTicket();
|
||
// 注意 URL 一定要动态获取,不能 hardcode.(获取当前网页的url)
|
||
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
|
||
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
|
||
//时间戳
|
||
$CardInfo = $this->storeCardInfo();
|
||
$data['timestamp'] = time();
|
||
$data['card_id'] = $CardInfo['card_id'];
|
||
$data['api_ticket'] = $apiTicket;
|
||
/* print_r($data);
|
||
exit;*/
|
||
//字典排序
|
||
$datas = $data;
|
||
sort($data, SORT_STRING);
|
||
$signature = sha1(implode($data));
|
||
$data['signature'] = $signature;
|
||
$mem_signPackage = array(
|
||
"timestamp" => $datas['timestamp'],
|
||
"signature" => $signature,
|
||
'card_id' => $CardInfo['card_id']
|
||
);
|
||
return $mem_signPackage;
|
||
}
|
||
|
||
public function zidian($str)
|
||
{
|
||
$arr = array();
|
||
for ($i = 0; $i < strlen($str); $i++) {
|
||
array_push($arr, substr($str, $i, 1));
|
||
}
|
||
sort($arr);
|
||
return $arr;
|
||
}
|
||
|
||
//随机字符串
|
||
private function createNonceStr($length = 16)
|
||
{
|
||
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||
$str = "";
|
||
for ($i = 0; $i < $length; $i++) {
|
||
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
|
||
}
|
||
return $str;
|
||
}
|
||
|
||
/*
|
||
* 这里通过post
|
||
*/
|
||
function curl_post($url, array $params = array(), $timeout)
|
||
{
|
||
$ch = curl_init();//初始化
|
||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
||
curl_setopt($ch, CURLOPT_URL, $url);//抓取指定网页
|
||
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
|
||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
|
||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
|
||
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
|
||
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
|
||
$data = curl_exec($ch);//运行curl
|
||
curl_close($ch);
|
||
return ($data);
|
||
}
|
||
|
||
private function http_post($url, $param, $post_file = false)
|
||
{
|
||
$oCurl = curl_init();
|
||
if (stripos($url, "https://") !== FALSE) {
|
||
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
|
||
curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
|
||
}
|
||
if (is_string($param) || $post_file) {
|
||
$strPOST = $param;
|
||
} else {
|
||
$aPOST = array();
|
||
foreach ($param as $key => $val) {
|
||
$aPOST[] = $key . "=" . urlencode($val);
|
||
}
|
||
$strPOST = join("&", $aPOST);
|
||
}
|
||
curl_setopt($oCurl, CURLOPT_URL, $url);
|
||
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
|
||
curl_setopt($oCurl, CURLOPT_POST, true);
|
||
curl_setopt($oCurl, CURLOPT_POSTFIELDS, $strPOST);
|
||
$sContent = curl_exec($oCurl);
|
||
$aStatus = curl_getinfo($oCurl);
|
||
curl_close($oCurl);
|
||
// dump($aStatus);
|
||
// exit;
|
||
if (intval($aStatus["http_code"]) == 200) {
|
||
return $sContent;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
} |