<?php
namespace Mp\Controller;
use Think\Controller;
$wechatObj = new IndexController();
$wechatObj->responseMsg();
class IndexController extends Controller
{
private $token;
public function index($id=''){
$mp = M('mp')->find($id);
$this->token = $mp['token'];
$echostr = I('get.echostr');
// echo $echostr;
// exit;
if(!empty($echostr)){
if($this->checkSignature()){
echo $echostr;
exit;
}
}
}
public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);
switch($RX_TYPE)
{
case "text":
$resultStr = $this->handleText($postObj);
break;
case "event":
$resultStr = $this->handleEvent($postObj);
break;
default:
$resultStr = "Unknow msg type: ".$RX_TYPE;
break;
}
echo $resultStr;
}else {
echo "";
exit;
}
}
public function handleText($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
if(!empty( $keyword ))
{
$msgType = "text";
// $contentStr = "Welcome to wechat world!";
$contentStr = $this->keyword($keyword);
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "Input something...";
}
}
public function handleEvent($object)
{
$contentStr = "";
switch ($object->Event)
{
case "subscribe":
//
// if (isset($object->EventKey)){
// $sceneid = str_replace("qrscene_","",$object->EventKey);
// $data=$this->hu($sceneid);
$contentStr = "微信开发考试现在报名了输入报名试试";
// $where['tag']=$sceneid;
// $data=M('tags')->where('tag="$sceneid"')->find();
// $tagid=$data['tag_id'];
// $contentStr=$tagid;
// $ret=$this->fansGroup($object->FromUserName,$sceneid);
// if($ret==true){
// $contentStr ='你的openid为'.$sceneid;
// }else{
// $contentStr ="失败了,".$object->FromUserName;
// }
// }
break;
case 'SCAN':
if(isset($object->EventKey)){
$scene_str=$object->EventKey;
$ret=$this->fansGroup($object->FromUserName,$scene_str);
if($ret==true){
$contentStr='你的openid为'.$object->EventKey.'分配到'.$scene_str;
}else{
$contentStr='失败了,'.json_encode($ret);
}
}else{
$contentStr='您扫描过了哦~';
}
break;
default :
$contentStr = "Unknow Event: ".$object->Event;
break;
}
$resultStr = $this->responseText($object, $contentStr);
return $resultStr;
}
// // public function hu($ii){
// return $ii;
// }
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = $this->token;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
public function fansGroup($openid="",$tagname=""){
//当前请求公众号
// $id = $_GET['id'];
$mp=getCurrentMp();
$where['mp_id'] = $mp['id'];
$where['tag'] = $tagname;
$data = M('tags')->where($where)->find();
// print_r($data);
// exit;
if(!empty($data)){
$accessToken = getAccess_token();
$api = "https://api.weixin.qq.com/cgi-bin/tags/members/batchtagging?access_token=" . $accessToken;
$arr = array();
$arr = ['openid_list'=>array($openid),'tagid'=>(int)$data['tag_id']];
// $arr['openid_list'] = array($openid);
// $arr['tagid'] = 109;
$arr = json_encode($arr,JSON_UNESCAPED_UNICODE);
// dump($arr);
// exit;
$ret = request_post($api,$arr);
// print_r($ret);
// exit;
if($ret['errcode']==0){
return '您被分配到' . $tagname;
}else{
return '分配失败';
}
}else{
return array('无此标签' . $tagname);
}
}
public function responseText($object, $content, $flag=0)
{
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>%d</FuncFlag>
</xml>";
$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
return $resultStr;
}
}
处理微信公众号带参数二维码的事件
猜你喜欢
转载自blog.csdn.net/mo3408/article/details/80861765
今日推荐
周排行