微信营销平台开发总结5P.docx
《微信营销平台开发总结5P.docx》由会员分享,可在线阅读,更多相关《微信营销平台开发总结5P.docx(8页珍藏版)》请在冰豆网上搜索。
微信营销平台开发总结5P
下面将一步步来实现微信公众平台的开发
设置了开发者模式的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){
returntrue;
}else{
returnfalse;
}
2、接受发送的消息
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。
我们可以在开发者手册上看到各个类型消息的xml格式,我们要做的就是获取xml中的信息。
实现代码如下:
xml=file_get_contents("php:
//input");//获得POST过来的xml
$xml=newSimpleXMLElement($xml);//创建xml对象
foreach($xmlas$key=>$value){
$data[$key]=strval($value);
}
将xml中的标签放到$data的键中内容放到值中
以文本信息为例
[CDATA[toUser]]>
[CDATA[fromUser]]>
1348831860
[CDATA[text]]>
[CDATA[thisisatest]]>
1234567890123456
如果我们想要的到用户发送的文本内容,使用$data[‘Content’]就可以得到
通过MsgType可以得到发送的信息类型有textimagevoicevideolinklocationevent
还有一些事件例如关注取消关注等xml中会有一个Event标签类型有:
包括subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单的点击事件)SCAN扫描
你可以通过判断$data[‘MsgType]和$data[‘Event‘]来根据自己的数据库或设计好的回复内容来进行操作
三、对于回复的信息你需要echo一个xml字符串回复的格式在文档中也可以找到
$retTMP="
[CDATA[%s]]>
[CDATA[%s]]>
%s
[CDATA[text]]>
[CDATA[%s]]>
0
";
//对消息模版中的通配符进行替换
$resultStr=sprintf($retTMP,$fromUserName,$toUserName,time(),$retMsg);
//输出XML中的描述
echo$resultStr;
四、调用接口
微信中有许多多接口例如发送客服消息获得用户信息列表分组等
这些怎么实现呢?
这些其实就是为了让我们得到自己粉丝的信息我们好存在自己的数据库中
首先我们看到这些接口链接都需要ACCESS_TOKEN,可能有些人不知道这个怎么获得。
其实这个有时通过接口请求获得一个ACCESS_TOKEN的,但是首先你要确定你的公众好是服务号有Appid和AppSecret
首先我们要有两个函数用来请求接口
functioncurlGet($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=$result,true);
return$return;
}
publicfunctioncurlPost($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:
',
'Origin:
',
'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(WindowsNT6.1;WOW64;rv:
23.0)Gecko/20100101Firefox/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=$result,true);
return$return;
}
这两个一个是get方式请求一个是post方式请求由于微信返回的信息基本都是json格式所以我们在函数内部已经将json变成了数组
获得ACCESS_TOKEN的方法
得到AppId和AppSecret$appid$appsecret
$url_get='
$result=$this->curlGet($url_get);
if(isset($result['errcode'])){
//请求出现错误可以查看手册中的基础支持中的全局返回码说明
}
$ACC_TOKEN=$result['access_token'];
得到token后我们就可以请求接口了以关注者列表或粉丝的详细信息为例:
我们可以把粉丝放到自己的数据库中这样以后操作就会方便很多
$getURL="
$list=$this->curlGet($getURL);
if(isset($list['errcode'])){//获取失败
}
if(isset($list['count'])&&!
$list['count']){
//未发现新的粉丝");
}
下面我们就可以根据列表来请求得到每个粉丝的具体信息
foreach($list['data']['openid']as$openid)
{
//获取用户信息
$url_info='
$indata[]=$this->curlGet($url_info);
}
$indata里面存储就是每个粉丝的信息,
然后我们在获得粉丝所在分组的信息
foreach($indataas$key=>$data){
$datagg=array();
$datagg["openid"]=$data['openid'];
$datagg=$datagg);//看手册接口的请求的POST参数要json格式
$refer='
$re_group=$this->curlPost($url_group,$refer,$datagg);
$data[$key]['group']=$re_group['groupid'];
}
这样就可以得到粉丝的所在分组
其他接口形式都是和上面差不多所区别的就是注意是GET还是POST以及参数的格式