概述
微信签到系统是一种新型的会务模式,主要应用在各种大中小型会议、活动上,从会前报名、信息确认到会上签到全部借助微信来完成,无须其他设备,用微信扫码的形式来完成报名和签到流程。微信自助报名签到会务系统具有低碳、环保、高效的优势。还会让所有参会者关注主办方的微信平台,便于会后的回访和关系维系。
背景
对于大型会议来说,信息的收集和身份确认是头等大事。随着智能手机的普及,如何让这两部分同时进行,减轻参会者和主办方的压力,成为第三方开发者的重要课题。微信公众号的出现让第三方开发看见了曙光;利用微信的优势,将微信与会议签到结合在一起,让用户可以通过微信报名,扫码完成签到。
简介
微信签到系统是示剑网络自主研发的一种新兴的会议管理模式,与会者需要先关注会议主办方的微信公众账号,然后邀请函就自动推送给与会者,通知会议主题、内容、时间、地点,参会者可以直接在微信内填写报名表,提交报名信息。报名页面可以在朋友圈转发,可以用任何订阅号接入,报名信息与微信号一一绑定,到会场后,参会者只需要扫描二维码即可完成签到。这种模式无论与会人数多少,都可以快速准确的统计出与会人数,更加高效环保节能,节省了大量的人力和时间。
特点
1、吸粉:保证所有参会人员关注大会官方微信公众号,是最有效的吸粉神器
2、收集信息:保证收集到所有参会人员的报名信息
3、报名审核开关:可以根据参会是否收费,设置报名是否需要审核
4、抽奖范围:如果设置抽奖环节,可以控制抽奖范围,系统可以在所有签到人员中随机抽取12个人,进行抽奖,保证公平公正。
5、信息统计:可以快速统计出报名信息、签到信息。
6、扩大宣传:利用微信朋友圈的宣传,可以扩大会议知名度,吸引更多人参会。
7、群发短信:可以用来会前确认信息,或者会后活动通知。
8、无须任何设备:只需要借助微信即可,无须购买其他验证设备。
9、多客服辅助签到:利用微信多客服功能,可以将签到与完善信息同步进行。
10、对接微支付:如果开通微支付,可以直接微信报名付款。
11、调查问卷:会后可以设置调查问卷,收集参会者的印象及对大会的意见。
应用
微信签到系统应用广泛,会议签到,上课签到,活动签到,工作签到均可。
应用条件
想实现微信报名签到,必须具备的先决条件:
1.必须是服务号且是认证的服务号;
2.如果是收费会议,需要报名的同时支付,还需要开通微支付,必须缴纳微信支付接口的两万元押金。
第二篇:微信营销平台开发总结
下面将一步步来实现微信公众平台的开发
设置了开发者模式的url和token后我们就可以进行开发了
Token你自己随便设置
一、 我们要先验证消息的是否来自微信 当然这部也可以省略 实现如下
开发者接收用户消息的时候,微信服务器将发送GET请求到填写的URL上,并且带上四个参数(signature、timestamp、nonce、echostr),开发者通过对签名(即signature)的效验,来判断此条消息的真实性。
Signatur:微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数
Timestamp:时间戳
Nonce:随机数
Echostr:随机字符串
验证代码:
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;//这个是你自己设置的token
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
二、接受发送的消息
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。我们可以在开发者手册上
http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E6%99%AE%E9%80%9A%E6%B6%88%E6%81%AF 看到各个类型消息的xml格式,我们要做的就是获取xml中的信息。实现代码如下:
xml = file_get_contents("php://input");//获得POST过来的xml
$xml = new SimpleXMLElement($xml); //创建xml对象
foreach ($xml as $key => $value) {
$data[$key] = strval($value);
}
将xml中的标签放到$data的键中 内容放到值中
以文本信息为例
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>123xxxxxxxxxxxx</MsgId>
</xml>
如果我们想要的到用户发送的文本内容,使用$data[‘Content’] 就可以得到
通过 MsgType可以得到发送的信息类型有 text image voice video link location event 还有一些事件 例如 关注 取消关注等 xml中会有一个Event 标签 类型有:
包括subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单的点击事件) SCAN扫描 你可以通过 判断$data[‘MsgType] 和 $data[‘Event‘] 来根据自己的数据库或设计好的回复内容来进行操作
三、对于回复的信息你需要echo 一个xml字符串 回复的格式在文档中也可以找到
$retTMP = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
//对消息模版中的通配符进行替换
$resultStr = sprintf($retTMP,$fromUserName,$toUserName,time(),$retMsg);
//输出XML中的描述
echo $resultStr;
四、 调用接口
微信中有许多多接口例如发送客服消息 获得用户信息 列表 分组等
这些怎么实现呢?
这些其实就是为了让我们得到自己粉丝的信息我们好存在自己的数据库中
首先我们看到这些接口链接都需要ACCESS_TOKEN,可能有些人不知道这个怎么获得。其实这个有时通过接口请求获得一个ACCESS_TOKEN的,但是首先你要确定你的公众好是服务号 有Appid和AppSecret
首先我们要有两个函数用来请求接口
function curlGet($url){
$result = file_get_contents($url);
if (empty($result)){
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
}
$return = json_decode($result,true);
return $return;
}
public function curlPost($url,$Referer,$data) {
$header = array(
'Accept:*/*',
'Accept-Charset:utf-8;q=0.7,*;q=0.3',
'Accept-Encoding:gzip,deflate,sdch',
'Accept-Language:zh-CN,zh;q=0.8',
'Connection:keep-alive',
'Host:mp.weixin.qq.com',
'Origin:https://mp.weixin.qq.com',
'Referer:'.$Referer,
'X-Requested-With:XMLHttpRequest'//,
// 'Content-Type:application/x-www-form-urlencoded'
);
$curl = curl_init(); //启动一个curl会话
curl_setopt($curl, CURLOPT_URL, $url); //要访问的地址
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置HTTP头字段的数组 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); //对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); //从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20xx0101 Firefox/23.0'); //模拟用户使用的浏览器
//curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); //自动设置Referer
curl_setopt($curl, CURLOPT_POST, 1); //发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); //Post提交的数据包
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //设置超时限制防止死循环
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //获取的信息以文件流的形式返回
curl_setopt($curl, CURLOPT_SSLVERSION,3);
$result = curl_exec($curl); //执行一个curl会话
curl_close($curl); //关闭curl
$return = json_decode($result,true);
return $return;
}
这两个一个是get方式请求一个是post方式请求 由于微信返回的信息基本都是json格式所以我们在函数内部已经将json变成了数组
获得ACCESS_TOKEN的方法
得到 AppId和 AppSecret $appid $appsecret
$url_get = 'https://api.weixin.qq.com/cgi-
bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;//请求的地址 $result=$this->curlGet($url_get);
if(isset($result['errcode'])){
//请求出现错误 可以查看手册中的 基础支持中的全局返回码说明
}
$ACC_TOKEN = $result['access_token'];
得到token后我们就可以请求接口了 以关注者列表或粉丝的详细信息为例:我们可以把粉丝放到自己的数据库中这样以后操作就会方便很多
$getURL="https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$ACC_TOKEN; $list=$this->curlGet($getURL);
if(isset($list['errcode'])){//获取失败
}
if(isset($list['count']) && !$list['count']){
//未发现新的粉丝");
}
下面我们就可以根据列表来请求得到每个粉丝的具体信息
foreach($list['data']['openid'] as $openid)
{
//获取用户信息
$url_info='https://api.weixin.qq.com/cgi-
bin/user/info?access_token='.$ACC_TOKEN.'&openid='.$openid.'&lang=zh_CN';
$indata[]=$this->curlGet($url_info);
}
$indata里面存储就是每个粉丝的信息,
然后我们在获得粉丝所在分组的信息
foreach($indata as $key=>$data){
$datagg=array();
$datagg["openid"]=$data['openid'];
$datagg=json_encode($datagg); //看手册接口的请求的POST参数要json格式 $refer='https://mp.weixin.qq.com/cgi-
bin/contactmanage?t=user/index&token='.$ACC_TOKEN.'&lang=zh_CN';
$re_group=$this->curlPost($url_group,$refer,$datagg);
$data[$key]['group']=$re_group['groupid'];
}
这样就可以得到粉丝的所在分组
其他接口形式都是和上面差不多 所区别的就是注意是GET还是POST以及参数的格式