微信公众平台开发接口PHP SDK
以前没接触过微信公众平台开发,前几天刚找到实习公司就要求我做一个微信公众平台的应用,于是乎开始学习微信公众平台开发接口的调用,看开发文档之后还是不知道从何入手,只好上网找入门资料,终于在方倍工作室找到了完整的SDK,理解了思路之后其实也挺简单的,无非就是进行用户、微信服务器、开发者服务器三者之间的通信。下面是我参考方倍工作室SDK之后之间写的一个SDK,主要是响应文本消息和CLICK按钮消息,获取用户基本信息,当然并没有包含所有的消息类型和事件。更完整的SDK请参考方倍工作室,链接:http://www.cnblogs.com/txw1958/p/weixin-php-sdk.html。
$token = 'qiduoyun';
$appid = 公众号appid;
$appsecret = 公众号appsecret;
$wechat = new Wechat($token,$appid,$appsecret);
if(!isset($_GET['echostr'])) {
$wechat->responseMsg();
} else {
$wechat->valid();
}
class Wechat
{
private $token;
private $appid;
private $appsecret;
public function __construct($token,$appid,$appsecret)
{
$this->token = $token;
$this->appid = $appid;
$this->appsecret = $appsecret;
}
//验证消息真实性
public function valid()
{
$echostr = $_GET['echostr'];
if($this->checkSignature()) {
echo $echostr;
exit;
}
}
//验证签名
private function checkSignature()
{
$token = $this->token;
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
$signature = $_GET['signature'];
$tmpArr = array($token,$timestamp,$nonce);
sort($tmpArr,SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if($tmpStr == $signature) {
return true;
} else {
return false;
}
}
//获取access_token
private function get_access_token($appid,$appsecret)
{
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" .
$appid . "&secret=" . $appsecret;
$output = file_get_contents($url);
$jsoninfo = json_decode($output,true);
$access_token = $jsoninfo['access_token'];
return $access_token;
}
//响应消息
public function responseMsg()
{
$postStr = $GLOBALS['HTTP_RAW_POST_DATA'];
if(!empty($postStr)) {
$postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);
switch($RX_TYPE)
{
case 'text':
$result = $this->receiveText($postObj);
break;
case 'event':
$result = $this->receiveEvent($postObj);
break;
default:
$result = "unknown message type: " . $RX_TYPE;
break;
}
echo $result;
} else {
echo '';
exit;
}
}
//接收文本消息
private function receiveText($object)
{
switch($object->Content)
{
case '猜猜我是谁': //发送单图文消息:用户基本信息
//获取access_token
$access_token = $this->get_access_token($this->appid,$this->appsecret);
//获取用户信息
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" .
$access_token . "&openid=" . $object->FromUserName . "&lang=zh_CN";
$output = file_get_contents($url);
$jsoninfo = json_decode($output,true);
if($jsoninfo['sex'] == 1) {
$sex = "男";
} else if($jsoninfo['sex'] == 2) {
$sex = "女";
} else {
$sex = "未知";
}
$content = array();
$content[] = array('Title' => "我知道你是谁!",'Description' => "昵称:" . $jsoninfo['nickname'] .
"\r\n" . "性别:" . $sex . "\r\n" . "国家:" . $jsoninfo['country'] . "\r\n" . "省份:" .
$jsoninfo['province'] . "\r\n" . "城市:" . $jsoninfo['city'],'PicUrl' => $jsoninfo['headimgurl'],
'Url' => '');
break;
default:
$content = '您发送的消息有误!';
break;
}
if(is_array($content)) {
if(isset($content[0]['PicUrl'])) {
$result = $this->transmitInfo($object,$content);
}
} else {
$result = $this->transmitText($object,$content);
}
return $result;
}
//接收事件推送
private function receiveEvent($object)
{
$content = "";
switch($object->Event)
{
case 'subscribe':
$content = "欢迎关注*****!";
break;
case 'unsubscribe':
$content = "取消关注";
break;
case 'CLICK':
switch($object->EventKey)
{
case '我是谁':
//获取access_token
$access_token = $this->get_access_token($this->appid,$this->appsecret);
//获取用户信息
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" .
$access_token . "&openid=" . $object->FromUserName . "&lang=zh_CN";
$output = file_get_contents($url);
$jsoninfo = json_decode($output,true);
if($jsoninfo['sex'] == 1) {
$sex = "男";
} else if($jsoninfo['sex'] == 2) {
$sex = "女";
} else {
$sex = "未知";
}
$content = array();
$content[] = array('Title' => "我知道你是谁!",'Description' => "昵称:" . $jsoninfo['nickname'] .
"\r\n" . "性别:" . $sex . "\r\n" . "国家:" . $jsoninfo['country'] . "\r\n" . "省份:" .
$jsoninfo['province'] . "\r\n" . "城市:" . $jsoninfo['city'],'PicUrl' => $jsoninfo['headimgurl'],
'Url' => '');
break;
default:
$content = "该按钮暂时尚未添加事件!";
break;
}
break;
default:
$content = "对不起,目前暂不受理此事件!";
break;
}
if(is_array($content)) {
if(isset($content[0]['PicUrl'])) {
$result = $this->transmitInfo($object,$content);
}
} else {
$result = $this->transmitText($object,$content);
}
return $result;
}
//发送文本消息
private function transmitText($object,$content)
{
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
return $result;
}
//发送单图文消息:用户基本信息
private function transmitInfo($object,$infoArray)
{
if(!is_array($infoArray)) {
return;
}
$itemTpl = "<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item> ";
$item_str = "";
foreach ($infoArray as $item){
$item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'],
$item['Url']);
}
$infoTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<Content><![CDATA[]]></Content>
<ArticleCount>%s</ArticleCount>
<Articles> $item_str</Articles>
</xml>";
$result = sprintf($infoTpl, $object->FromUserName, $object->ToUserName, time(),
count($infoArray));
return $result;
}
}
微信公众平台开发接口PHP SDK的更多相关文章
- 微信公众平台开发接口PHP SDK完整版(转载)
<?php/* 方倍工作室 http://www.fangbei.org/ CopyRight 2015 All Rights Reserved*/ define("TOK ...
- 微信公众平台开发接口PHP SDK完整版
<?php /* 方倍工作室 http://www.fangbei.org/ CopyRight 2015 All Rights Reserved */ define("TOKEN&q ...
- .Net实现微信公众平台开发接口(一) 之 “微信开发配置”
我们只要通过微信官方认证,成为开发者,才能实现微信提供的各种接口,否则即使调用了接口,微信也不会实现推送,功能也无法通过开发模式真正得到实现,所以需要正确配置微信信息,通过微信官方认证,成为开发者才可 ...
- .Net实现微信公众平台开发接口(二) 之 “获取access_token”
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token. 接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/ ...
- 170303、PHP微信公众平台开发接口 SDK完整版
<?php /* 方倍工作室 http://www.fangbei.org/ CopyRight 2015 All Rights Reserved */ define("TOKEN&q ...
- .Net实现微信公众平台开发接口(三) 之 “信息回复”
对于每一个POST请求,开发者在响应包(Get)中返回特定XML结构,对该消息进行响应(现支持回复文本.图片.图文.语音.视频.音乐).请注意,回复图片等多媒体消息时需要预先上传多媒体文件到微信服务器 ...
- php的微信公众平台开发接口类
<?php define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); if ...
- 微信公众平台开发教程--方培工作室,PHP语言版本
准备工作 微信公众平台的注册 介绍如何注册一个微信公众账号. 入门教程 微信公众平台开发入门教程 内容:1.申请SAE作为服务器; 2.启用开发模式; 3.微信公众平台PHP SDK; 4.接收发送消 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明
前不久微信上线了个性化菜单接口,Senparc.Weixin SDK也已经同步更新. 本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4 ...
随机推荐
- WebUtils复用代码【request2Bean、UUID】
request封装到Bean对象 public static <T> T request2Bean(HttpServletRequest httpServletRequest, Class ...
- Java学习笔记四---打包成双击可运行的jar文件
写笔记四前的脑回路是这样的: 前面的学习笔记二,提到3个环境变量,其中java_home好理解,就是jdk安装路径:classpath指向类文件的搜索路径:path指向可执行程序的搜索路径.这里的类文 ...
- Zabbix通过SNMP监控多核CPU使用率时, 计算CPU平均使用率
环境:没有Agent,只能通过SNMP监控时,需要获取多核CPU的平均使用率. ZABBIX的使用SNMP监控CPU使用率时,由于设备都是多核CPU,监控的都是单独某一核心的使用率,但单独某一核使用率 ...
- angular $observe() 和$watch的区别
1.$observe()是属性attributes的方法,只能在DOM属性的值发生变化时用,并且只用于directive内. 当需要监听一个包含变量的属性值时attr1="Name:{{na ...
- MySQL_日期函数汇总
如果转载,请注明博文来源: www.cnblogs.com/xinysu/ ,版权归 博客园 苏家小萝卜 所有.望各位支持! 关于MySQL日期时间函数,每回总 ...
- nmap扫描某段网络连通性
nmap -v -sP 10.0.10.0/24 进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测): nmap -sP 192.168.1.0/24 仅列出指 ...
- String的replace和replaceAll
replace(CharSequence target, CharSequence replacement) 这里CharSequence是一个接口 实现类包括CharBuffer, Segement ...
- vector 利用swap 函数进行内存的释放 vector<int>().swap
首先,vector与deque不同,其内存占用空间只会增长,不会减小.比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个.所有 ...
- Paint the Grid Reloaded ZOJ - 3781 图论变形
Paint the Grid Reloaded Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %lld & %ll ...
- E. Exposition
E. Exposition time limit per tes ...