public function sync() { $wx_info = $this->WX->getUserInfo($this->user_info['openid']); $data = array('user_id' => $this->user_info['user_id'], 'user_name' => remove_emoji($wx_info['nickname']), 'user_avatar' => $wx_info['headimgurl'], 'update_time' => NOW_TIME); M('User')->save($data); $this->redirect('User/index'); }
protected function _init() { //cookie('user_id', null); $user_id = cookie('user_id'); $user_id = 1; if ($user_id) { cookie('user_id', $user_id); $user_info = M('User')->find($user_id); if (!$user_info) { cookie('user_id', null); $this->redirect(__SELF__); } $user_info['area'] = json_decode($user_info['area'], true); } else { if (empty($_GET['code'])) { $callback = C('WEB_SITE_URL') . __SELF__; $url = $this->WX->getOauthRedirect($callback, '123456', 'snsapi_userinfo'); redirect($url); } $access_data = $this->WX->getOauthAccessToken(); $wx_info = $this->WX->getOauthUserinfo($access_data['access_token'], $access_data['openid']); if (empty($wx_info['openid'])) { $this->redirect(__SELF__); } $user_info = M('User')->where(array('openid' => $wx_info['openid']))->find(); if (!$user_info) { $wx_info['nickname'] = remove_emoji($wx_info['nickname']); $user_info = array('openid' => $wx_info['openid'], 'user_name' => $wx_info['nickname'], 'user_avatar' => $wx_info['headimgurl'], 'sex' => $wx_info['sex'], 'create_time' => NOW_TIME, 'update_time' => NOW_TIME, 'status' => 1); $user_info['user_id'] = M('User')->add($user_info); } cookie('user_id', $user_info['user_id']); } $this->user_info = $user_info; $this->assign('user_info', $user_info); // 微信JSJDK // echo '<pre>'; // print_r($this->WX->getJsSign('http://wwb.sypole.com' . __SELF__)); exit('</pre>'); $this->assign('wx_config', $this->WX->getJsSign(C('WEB_SITE_URL') . __SELF__)); }
function cleanName($str) { $str = utf8_bad_strip_improved($str); $str = strtolower($str); $str = str_replace("\n", ' ', $str); $str = remove_emoji($str); $str = str_replace(";", ' ', $str); //remove anything that is not letter, digit or slash $str = preg_replace('/[^a-z\\d\\/]+/i', '', $str); return $str; }
/** * 微信消息接口入口 * 所有发送到微信的消息都会推送到该操作 * 所以,微信公众平台后台填写的api地址则为该操作的访问地址 * 在mp.weixin.qq.com 开发者中心配置的 URL(服务器地址) http://域名/index.php/home/weixin/index/id/member_public表的id.html */ public function index() { $this->WX->valid(); $type = $this->WX->getRev()->getRevType(); if (C('DEVELOP_MODE')) { addWeixinLog($GLOBALS['HTTP_RAW_POST_DATA']); } //与微信交互的中控服务器逻辑可以自己定义,这里实现一个通用的 switch ($type) { //事件 case TPWechat::MSGTYPE_EVENT: //先处理事件型消息 $event = $this->WX->getRevEvent(); switch ($event['event']) { //关注l case TPWechat::EVENT_SUBSCRIBE: //二维码关注 if (isset($event['eventkey']) && isset($event['ticket'])) { } else { //普通关注 } $openid = $this->WX->getRevFrom(); $User = M('User'); $user_info = $User->where(array('openid' => $openid))->find(); if ($user_info) { $map = array('openid' => $this->WX->getRevFrom()); $User->where($map)->setField('is_subscribe', 1); } else { $wx_info = $this->WX->getUserInfo($this->WX->getRevFrom()); $wx_info['nickname'] = remove_emoji($wx_info['nickname']); $data = array('openid' => $openid, 'user_name' => $wx_info['nickname'], 'user_avatar' => $wx_info['headimgurl'], 'is_subscribe' => 1, 'status' => 1, 'create_time' => NOW_TIME, 'update_time' => NOW_TIME); $User->add($data); } $this->WX->text(html_entity_decode(C('SUBSCRIBE_MSG')))->reply(); break; //扫描二维码 //扫描二维码 case TPWechat::EVENT_SCAN: break; //地理位置 //地理位置 case TPWechat::EVENT_LOCATION: break; //自定义菜单 - 点击菜单拉取消息时的事件推送 //自定义菜单 - 点击菜单拉取消息时的事件推送 case TPWechat::EVENT_MENU_CLICK: switch ($event['key']) { case 'MENU_KEY_NEWS': break; default: # code... break; } break; //自定义菜单 - 点击菜单跳转链接时的事件推送 //自定义菜单 - 点击菜单跳转链接时的事件推送 case TPWechat::EVENT_MENU_VIEW: $this->WX->text('//自定义菜单 - 点击菜单跳转链接时的事件推送')->reply(); break; //自定义菜单 - 扫码推事件的事件推送 //自定义菜单 - 扫码推事件的事件推送 case TPWechat::EVENT_MENU_SCAN_PUSH: break; //自定义菜单 - 扫码推事件且弹出“消息接收中”提示框的事件推送 //自定义菜单 - 扫码推事件且弹出“消息接收中”提示框的事件推送 case TPWechat::EVENT_MENU_SCAN_WAITMSG: break; //自定义菜单 - 弹出系统拍照发图的事件推送 //自定义菜单 - 弹出系统拍照发图的事件推送 case TPWechat::EVENT_MENU_PIC_SYS: break; //自定义菜单 - 弹出拍照或者相册发图的事件推送 //自定义菜单 - 弹出拍照或者相册发图的事件推送 case TPWechat::EVENT_MENU_PIC_PHOTO: break; //自定义菜单 - 弹出微信相册发图器的事件推送 //自定义菜单 - 弹出微信相册发图器的事件推送 case TPWechat::EVENT_MENU_PIC_WEIXIN: break; //自定义菜单 - 弹出地理位置选择器的事件推送 //自定义菜单 - 弹出地理位置选择器的事件推送 case TPWechat::EVENT_MENU_LOCATION: break; //取消关注 //取消关注 case TPWechat::EVENT_UNSUBSCRIBE: $openid = $this->WX->getRevFrom(); $User = M('User'); $user_info = $User->where(array('openid' => $openid))->find(); if ($user_info) { $map = array('openid' => $this->WX->getRevFrom()); $User->where($map)->setField('is_subscribe', 0); } else { $wx_info = $this->WX->getUserInfo($this->WX->getRevFrom()); $data = array('openid' => $openid, 'user_name' => $wx_info['nickname'], 'user_avatar' => $wx_info['headimgurl'], 'is_subscribe' => 0, 'status' => 1, 'create_time' => NOW_TIME, 'update_time' => NOW_TIME); $User->add($data); } break; //群发接口完成后推送的结果 //群发接口完成后推送的结果 case TPWechat::EVENT_SEND_MASS: break; //模板消息完成后推送的结果 //模板消息完成后推送的结果 case TPWechat::EVENT_SEND_TEMPLATE: break; default: break; } break; //文本 //文本 case TPWechat::MSGTYPE_TEXT: $keyword = trim($this->WX->getRevContent()); switch ($keyword) { case '1': $this->WX->text(html_entity_decode(C('SUBSCRIBE_MSG')))->reply(); break; case '2': $data = array(array('Title' => '最新新闻', 'Description' => '测试description1', 'PicUrl' => 'http://shop.zlsgx.com/images/201508/goods_img/3_G_1440030087739.jpg', 'Url' => ''), array('Title' => '最新新闻', 'Description' => '测试description2', 'PicUrl' => 'http://shop.zlsgx.com/images/201508/goods_img/5_G_1440028482068.jpg', 'Url' => ''), array('Title' => '最新新闻', 'Description' => '测试description3', 'PicUrl' => 'http://shop.zlsgx.com/images/201508/goods_img/5_G_1440028482068.jpg', 'Url' => ''), array('Title' => '最新新闻', 'Description' => '测试description4', 'PicUrl' => 'http://shop.zlsgx.com/images/201508/goods_img/5_G_1440028482068.jpg', 'Url' => '')); $this->WX->news($data)->reply(); break; default: //$this->WX->text("默认信息...")->reply(); //接入客服 $this->WX->transfer_customer_service()->reply(); break; } break; //图像 //图像 case TPWechat::MSGTYPE_IMAGE: break; //语音 //语音 case TPWechat::MSGTYPE_VOICE: break; //视频 //视频 case TPWechat::MSGTYPE_VIDEO: break; //位置 //位置 case TPWechat::MSGTYPE_LOCATION: break; //链接 //链接 case TPWechat::MSGTYPE_LINK: break; default: break; } }