公众平台接口API
<?php
/**
* Author: helen
* CreateTime: 2015/12/9 20:14
* description: 公众平台接口API
*/
class Wechat{
/**
* @FunctionDescription:验证开发者服务器url有效性
* @Param:token(令牌 用户手动输入的配置信息)
* @Return:echostr(随机字符串)
* @Description:
* @Author:helen zheng
*/
public function valid($token){
$echostr = $_GET['echostr'];
if($this->checkSignature($token)){
echo $echostr;
exit;
}
}
/**
* @FunctionDescription:检验signature函数
* @Param:token(令牌 用户手动输入的配置信息)
* @Return:true/false
* @Description:服务器发送get请求将signature、timestamp、nonce、echostr四个参数发送到开发者提供的url,利用接收到的参数进行验证。
* @Author:helen zheng
*/
function checkSignature($token){
/*获取发送确认的参数。*/
$signature = $_GET['signature']; /*加密签名,signature结合了开发者填写的token参
数和请求中的timestamp参数、nonce参数。*/
$timestamp = $_GET['timestamp']; /*时间戳 */
$nonce = $_GET['nonce']; /*随机数 */
$echostr = $_GET['echostr']; /*随机字符串*/
/*加密/校验流程*/
/*1. 将token、timestamp、nonce三个参数进行字典序排序*/
$array = array($token,$timestamp,$nonce);
sort($array,SORT_STRING);
/*2. 将三个参数字符串拼接成一个字符串进行sha1加密*/
$str = sha1( implode($array) );
/*3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于*/
if( $str==$signature && $echostr ){
return ture;
}else{
return false;
}
}
/**
* @FunctionDescription:获取access_token
* @Param:AppID(第三方用户唯一凭证 ),AppSecret(第三方用户唯一凭证密钥)
* @Return:access_token( string(length=117))
* @Description:access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
* @Author:helen zheng
*/
public function getToken($appid,$appsecret){
$url = 'api.weixin.qq/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
$result = $this->request_get($url);
$res = $this->resultProcess($result);
if($res==$result){ /*接口返回值*/
return($result);
}else{ /*接口调用错误信息*/
return($res);
}
}
/**
* @FunctionDescription:获取服务器的IP地址列表
* @Param:access_token(的access_token )
* @Return:
* @Description:安全验证
* @Author:helen zheng
*/
public function getWeixinIP($access_token){
$url = 'api.weixin.qq/cgi-bin/getcallbackip?access_token='.$access_token;
$result = $this->request_get($url);
$res = $this->resultProcess($result);
if($res==$result){ /*接口返回值*/
return($result);
}else{ /*接口调用错误信息*/
return($res);
}
}
/**
* @FunctionDescription:接收消息响应(回复)函数(可与自定义回复接口、语义理解接口、客服接口结合)
* @Param:
* @Return:接收消息类型
* @Description:?当普通用户向公众账号发消息时,服务器将POST消息的XML数据包到开发者填写的URL上。
* @Author:helen zheng
*/
public function responseMsg(){
/*1,获取到推送过来post数据(xml格式)*/
$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];
/
*2,处理消息类型,并设置回复类型和内容*/
$postObj = simplexml_load_string($postArr);
/*判断用户发送消息的类型(普通消息、事件推送)*/
$MsgType = strtolower($postObj->MsgType);
$Event = strtolower($postObj->Event);
if(isset($Event)){ /*事件推送*/
switch($Event){
case 'subscribe' : /*return '订阅事件(扫描带参数二维码事件(用户未关注))';*/
$template = '<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
</xml>';
break;
case 'unsubscribe' : /*return '取消订阅事件';*/
$template ='<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
梦见爬山艰难<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[unsubscribe]]></Event>
</xml>';
break;
case 'scan' : /*return '扫描带参数二维码事件(用户已关注)';*/
$template = '<xml>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论