基于微捷cms的开发
1.生成有推荐关系的二维码
//推广Action
public function tuiguang()
{
//推广图片
$shareImg = './uploads/share/mingpian_'.$_SESSION['wap_uid'].'.jpg';
//if( true )
if( false == file_exists($shareImg) )
{
$rs = D('Share')->mptuiguangimg($_SESSION['wap_uid']);
if( !$rs )
{
$this->error('生成二维码失败');
}
}
$this->assign('shareImg',$shareImg);
$this->display();
}
//生成二维码的Model
<?php
class ShareModel extends Model
{
//生成二维码图片
public function mptuiguangimg($uid)
{
set_time_limit(0);
$user_info = M('userinfo')->where(array('id'=>$uid))->find();
$nickname = $user_info['truename']?$user_info['truename']:$user_info['nickname'];
$user_image = $user_info['headimgurl'];
//echo "<img src='{$user_image}'>";die;
$dst_path = './Public/erwei/bg.jpg';
//获取头像图片的高和宽
list($src_w, $src_h) = getimagesize($user_image);
$imgWidth = '140';
$imgHeight = '140';
//改变图片大小
$image_news = imagecreatetruecolor($imgWidth, $imgHeight);
$user_image = imagecreatefromjpeg($user_image);
imagecopyresized($image_news, $user_image, 0, 0, 0, 0,$imgWidth,$imgHeight,$src_w, $src_h);
$erwema_url=$this->getUserQrcode($uid);
//改变图片大小
$imgWidth_ewm = '250';
$imgHeight_ewm = '250';
list($ewm_w, $ewm_h) = getimagesize($erwema_url);
$image_news_ewm = imagecreatetruecolor($imgWidth_ewm, $imgHeight_ewm);
$erwema_url = imagecreatefromjpeg($erwema_url);
imagecopyresized($image_news_ewm, $erwema_url, 0, 0, 0, 0,$imgWidth_ewm,$imgHeight_ewm,$ewm_w, $ewm_h);
$dst = imagecreatefromstring(file_get_contents($dst_path));
imagecopymerge($dst, $image_news, 122, 15, 0, 0, $imgWidth, $imgHeight, 100);//头像定位
imagecopymerge($dst, $image_news_ewm, 175, 572, 0, 0, 250, 250, 100);//二维码
//打上文字
$font = './Public/erwei/msyh.ttf';//字体
$black = imagecolorallocate($dst, 255, 255, 255);//字体颜色
imagefttext($dst,20,0,340,70, $black, $font, $nickname);
//输出图片
list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
$filename_mp = './uploads/share/mingpian_'.$uid;
$user_type='.jpg';
switch ($dst_type) {
case 1://GIF
header('Content-Type: image/gif');
$user_type='.gif';
imagegif($dst,$filename_mp.'.gif');
break;
case 2://JPG
//header('Content-Type: image/jpeg');
$user_type='.jpg';
imagejpeg($dst,$filename_mp.'.jpg');
break;
case 3://PNG
header('Content-Type: image/png');
$user_type='.png';
imagepng($dst,$filename_mp.'.png');
break;
default:
break;
}
imagedestroy($dst);
imagedestroy($image_news_ewm);
imagedestroy($image_news);
return $filename_mp.$user_type;
}
//获取有推广关系的关注二维码
private function getUserQrcode($uid)
{
//写入数据库
$saveImg = './uploads/share/u_'.$uid.'.jpg';
if( false !== file_exists($saveImg) )
{
return $saveImg;
}
$rs = M('wxuser_recognition')->where( array('scene_id'=>$uid) )->getField('code_url');
if( !$rs )
{
$scene_id = $uid;
$api = M('Diymen_set')->where(array('token'=>session('token')))->find();
$url_get='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$api['appid'].'&secret='.$api['appsecret'];
$json=json_decode(curlGet($url_get));
//dump($json);die;
$url='https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$json->access_token;
if( true )
{
$data ='{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$scene_id.'}}}';
}
else
{
$data ='{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": '.$scene_id.'}}} ';
}
$p = json_decode(api_group_increment($url,$data));
if( !$p->ticket )
{
return false;
}
else
{
$data = array();
$data['scene_id'] = $uid;
$data['code_url'] = $p->ticket;
$data['status'] = 1;
$data['codetype'] = 2;
$data['createtime'] = time();
M('wxuser_recognition')->add( $data );
$urlImg = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$p->ticket;
saveimg($urlImg,$saveImg);
return $saveImg;
}
}
else
{
$urlImg = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$rs;
saveimg($urlImg,$saveImg);
return $saveImg;
}
}
}
//效果如下
空白为微信用户头像和关注二维码
2.同关注事件写入微信用户临时表(已锁定关系)
CREATE TABLE `tp_userwx` (
`id` int(30) NOT NULL AUTO_INCREMENT,
`wecha_id` varchar(60) NOT NULL COMMENT '微信用户wecha_id',
`token` varchar(60) NOT NULL,
`sex` tinyint(1) NOT NULL COMMENT '性别',
`address` varchar(100) NOT NULL COMMENT '地址',
`nickname` varchar(32) NOT NULL COMMENT '昵称',
`city` varchar(32) NOT NULL COMMENT '城市',
`province` varchar(32) NOT NULL COMMENT '省',
`country` varchar(32) NOT NULL COMMENT '乡镇',
`headimgurl` varchar(200) NOT NULL COMMENT '头像',
`language` varchar(32) NOT NULL COMMENT '语言',
`add_time` int(11) NOT NULL COMMENT '添加时间',
`pid` int(11) NOT NULL COMMENT '父级用户的id',
`subscribe_time` varchar(32) NOT NULL COMMENT '关注时间',
PRIMARY KEY (`id`),
UNIQUE KEY `wecha_id` (`wecha_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
if ('subscribe' == $data['Event'])
{
M('userinfo') -> where(array('wecha_id' => $this -> data['FromUserName'])) -> save(array('subscribe'=>1));
$this->requestdata('follownum');
$this->behaviordata('Subscribe', '');
//$this -> adddUserInfo();//注册新会员 userinfo
//通知推荐人
//$this->noticeTuijianren($data['FromUserName']);
//M('userinfo') -> where(array('wecha_id' => $this -> data['FromUserName'])) -> save(array('subscribe'=>1));
if(strtolower(substr($data['EventKey'], 0, 8)) == 'qrscene_'){
$scene_id=substr($data['EventKey'],8);
//自动写入临时表
$_SESSION['tj_uid'] = $scene_id;
//$this->test($_SESSION['tj_uid']);
$this->addUserwx();
}
else
{
//自动写入临时表
$this->addUserwx();
}
}
function addUserwx()
{
$openid = $this -> data['FromUserName'];
$access_token = $this -> _getAccessToken();
//是否临时表已有数据
$map = array();
$map['wecha_id'] = $openid;
$wxuserInfo = M('userwx')->where($map)->find();
//用户是否存在
if( $wxuserInfo && !$wxuserInfo['wechaname'] )
{
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid;
$userinfo = curlGet( $url );
$jsongp=json_decode($userinfo);
if( $jsongp->openid )
{
$data = array();
$data['wechaname'] = $jsongp->nickname;
$data['sex'] = $jsongp->sex;
$data['portrait'] = $jsongp->headimgurl;
$data['nickname'] = $jsongp->nickname;
$data['language'] = $jsongp->language;
$data['city'] = $jsongp->city;
$data['province'] = $jsongp->province;
$data['country'] = $jsongp->country;
$data['headimgurl'] = $jsongp->headimgurl;
$data['add_time'] = time() ;
M('userwx')->where( array('id'=>$wxuserInfo['id']) )->save($data);
}
}
else
{
$data = array();
$data['wecha_id'] = $openid;
$data['token'] = 'cfxfgw1415328336';
$data['pid'] = D('Userinfo')->getPid($_SESSION['tj_uid']);
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid;
//$this->test($url);
$userinfo = curlGet( $url );
$jsongp=json_decode($userinfo);
if( $jsongp->openid )
{
$data['wechaname'] = $jsongp->nickname;
$data['sex'] = $jsongp->sex;
$data['portrait'] = $jsongp->headimgurl;
$data['nickname'] = $jsongp->nickname;
$data['language'] = $jsongp->language;
$data['city'] = $jsongp->city;
$data['province'] = $jsongp->province;
$data['country'] = $jsongp->country;
$data['headimgurl'] = $jsongp->headimgurl;
$data['add_time'] = time() ;
M('userwx')->add($data);
}
}
}
3.用户注册写入会员表