微信公众测试号开发改进版---php
来源:互联网 发布:孩子学编程的优缺点 编辑:程序博客网 时间:2024/05/22 01:10
<?php
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
$wechatObj->valid();
}else{
$wechatObj->responseMsg();
}
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
header('content-type:text');
echo $echoStr;
exit;
}
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$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;
}
}
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取微信服务器推送的消息数据
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
//判断该数据包是否是订阅的事件推送
if (strtolower($postObj->MsgType)=='event') {
//如果是关注 subscribe 事件
if (strtolower($postObj->Event)=='subscribe') {
//回复用户消息(纯文本格式)
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$msgType = 'text';
$content = "欢迎关注我们的微信公众账号\n<a href='http://blog.csdn.net/zzz3112362088'>我的个人博客</a>";
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$info= sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
echo $info;
}
if (strtolower($postObj->Event)=='click') {
if (strtolower($postObj->EventKey)=='item1') {
$contentStr='此处为功能保留区,以便于后面的开发';
$this->responseText($postObj,$contentStr);
}
if (strtolower($postObj->EventKey=='songs')) { //回复音乐
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$time = time();
$musicTpl='<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
<Music>
<Title><![CDATA[最炫民族风]]></Title>
<Description><![CDATA[凤凰传奇]]></Description>
<MusicUrl><![CDATA[http://1.tianyu12345.applinzi.com/music/1.mp3]]></MusicUrl>
<HQMusicUrl><![CDATA[http://1.tianyu12345.applinzi.com/music/1.mp3]]></HQMusicUrl>
</Music>
<FuncFlag>0</FuncFlag>
</xml>';
$resultStr=sprintf($musicTpl,$fromUsername,$toUserName,$time);
echo $resultStr;
}
}
}
else if (strtolower($postObj->MsgType)=='text') {
$keyword = trim($postObj->Content);
switch ($keyword) {
case '?':
case '?':
$fromUsername=$postObj->FromUserName;
$toUsername=$postObj->ToUserName;
$contentStr=date("Y-m-d H:i:s");
$this->responseText($postObj,$contentStr);
break;
case 'hello':
$contentStr="我知道你是谁";
$this->responseText($postObj,$contentStr);
break;
case 'picture':
$arr=array(
array(
'title'=>'个人博客',
'description'=>'包含我所学知识的记录',
'picurl'=>'http://1.tianyu12345.applinzi.com/images/23.jpg',
'url'=>'http://blog.csdn.net/zzz3112362088',),
// array(
// 'title'=>'qq空间',
// 'description'=>'个人生活记录',
// 'picurl'=>'http://1.tianyu12345.applinzi.com/images/24.jpg',
// 'url'=>'http://user.qzone.qq.com/649832402/main',),
);
$this->responseImage($postObj,$arr);
break;
default:
$contentStr="本部分功能还未实现,快加入我们吧!";
$this->responseText($postObj,$contentStr);
break;
}
}
}else{ //数据包为空
echo "";
exit;
}
}
/**
* [responseText 回复文本消息]
* @param [type] $postObj [微信服务器推送的消息(xml)经过simplexml_load_string转换成的对象]
* @param [type] $contentText [回复的文本内容]
* @return [type] [description]
*/
public function responseText($postObj,$contentStr=''){
$fromUsername=$postObj->FromUserName;
$toUsername=$postObj->ToUserName;
$time=time();
$textTpl='<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($textTpl,$fromUsername,$toUsername,$time,$contentStr);
echo $resultStr;
}
/**
* [responseImage 图文回复]
* @param [type] $postObj [微信服务器推送的消息(xml)经过simplexml_load_string转换成的对象]
* @param array $arr [回复的图文信息]
* @return [type] [description]
*/
public function responseImage($postObj,$arr=''){
$fromUsername=$postObj->FromUserName;
$toUsername=$postObj->ToUserName;
$time=time();
$imageTpl="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>".count($arr)."</ArticleCount>
<Articles>";
foreach ($arr as $key => $value) {
$imageTpl.="<item>
<Title><![CDATA[".$value['title']."]]></Title>
<Description><![CDATA[".$value['description']."]]></Description>
<PicUrl><![CDATA[".$value['picurl']."]]></PicUrl>
<Url><![CDATA[".$value['url']."]]></Url>
</item>";
}
$imageTpl.="</Articles>
</xml>";
echo sprintf($imageTpl,$fromUsername,$toUsername,$time,'news');
}
// access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token
// 公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在微信公众平台官网-开发者中心页中获得
/**
* [getWXAccess_Token 获得access_token
* @return [type] [description]
*/
public function getWXAccess_Token(){
session_start();
if ($_SESSION['access_token']&&$_SESSION['expire_time']>time()) {
return $_SESSION['access_token'];
}
else
{
$appID='wx2cd45e202c124d6e';
$appsecret='12add95378046d862b5a71d6e84bf583';
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appID."&secret=".$appsecret;
$res=$this->http_curl($url,'get','json');
$access_token=$res['access_token'];
$_SESSION['access_token']=$access_token;
$_SESSION['expire_time']=time()+7000;
return $access_token;
}
}
/**
* 创建自定义菜单
* @return [type] [description]
*/
public function defineItem(){
$access_token=getWXAccess_Token();
$curl='https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$access_token;
$postArr=array(
'button'=>array(
array(
'name'=>urlencode('菜单一'),
'type'=>'click',
'key'=>'item1',
),
array(
'name'=>urlencode('菜单二'),
'sub_button'=>array(
array(
'name'=>urlencode('歌曲'),
'type'=>'click',
'key'=>'songs',
),
array(
'name'=>urlencode('电影'),
'type'=>'view',
'url'=>'http://1.tianyu12345.applinzi.com/images/23.jpg',
),
),
),
array(
'name'=>urlencode('菜单三'),
'type'=>'view',
'url'=>'http://blog.csdn.net/zzz3112362088'
),
),
);
$postJson=urldecode(json_encode($postArr));
$res=$this->http_curl($curl,'post','json',$postJson);
var_dump($res);
}
public function http_curl($curl,$type='get',$res='json',$arr=''){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$curl); //设置获取URL地址
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //
//出现SSL certificate problem: unable to get local issuer certificate问题的解决方法是添加以下两句
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
if ($type='post') {
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
}
$output=curl_exec($ch);
curl_close($ch);
if ($res=='json') {
return json_decode($output,true);
}else{
return $output;
}
}
}
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
$wechatObj->valid();
}else{
$wechatObj->responseMsg();
}
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
header('content-type:text');
echo $echoStr;
exit;
}
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$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;
}
}
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取微信服务器推送的消息数据
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
//判断该数据包是否是订阅的事件推送
if (strtolower($postObj->MsgType)=='event') {
//如果是关注 subscribe 事件
if (strtolower($postObj->Event)=='subscribe') {
//回复用户消息(纯文本格式)
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$msgType = 'text';
$content = "欢迎关注我们的微信公众账号\n<a href='http://blog.csdn.net/zzz3112362088'>我的个人博客</a>";
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$info= sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
echo $info;
}
if (strtolower($postObj->Event)=='click') {
if (strtolower($postObj->EventKey)=='item1') {
$contentStr='此处为功能保留区,以便于后面的开发';
$this->responseText($postObj,$contentStr);
}
if (strtolower($postObj->EventKey=='songs')) { //回复音乐
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$time = time();
$musicTpl='<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
<Music>
<Title><![CDATA[最炫民族风]]></Title>
<Description><![CDATA[凤凰传奇]]></Description>
<MusicUrl><![CDATA[http://1.tianyu12345.applinzi.com/music/1.mp3]]></MusicUrl>
<HQMusicUrl><![CDATA[http://1.tianyu12345.applinzi.com/music/1.mp3]]></HQMusicUrl>
</Music>
<FuncFlag>0</FuncFlag>
</xml>';
$resultStr=sprintf($musicTpl,$fromUsername,$toUserName,$time);
echo $resultStr;
}
}
}
else if (strtolower($postObj->MsgType)=='text') {
$keyword = trim($postObj->Content);
switch ($keyword) {
case '?':
case '?':
$fromUsername=$postObj->FromUserName;
$toUsername=$postObj->ToUserName;
$contentStr=date("Y-m-d H:i:s");
$this->responseText($postObj,$contentStr);
break;
case 'hello':
$contentStr="我知道你是谁";
$this->responseText($postObj,$contentStr);
break;
case 'picture':
$arr=array(
array(
'title'=>'个人博客',
'description'=>'包含我所学知识的记录',
'picurl'=>'http://1.tianyu12345.applinzi.com/images/23.jpg',
'url'=>'http://blog.csdn.net/zzz3112362088',),
// array(
// 'title'=>'qq空间',
// 'description'=>'个人生活记录',
// 'picurl'=>'http://1.tianyu12345.applinzi.com/images/24.jpg',
// 'url'=>'http://user.qzone.qq.com/649832402/main',),
);
$this->responseImage($postObj,$arr);
break;
default:
$contentStr="本部分功能还未实现,快加入我们吧!";
$this->responseText($postObj,$contentStr);
break;
}
}
}else{ //数据包为空
echo "";
exit;
}
}
/**
* [responseText 回复文本消息]
* @param [type] $postObj [微信服务器推送的消息(xml)经过simplexml_load_string转换成的对象]
* @param [type] $contentText [回复的文本内容]
* @return [type] [description]
*/
public function responseText($postObj,$contentStr=''){
$fromUsername=$postObj->FromUserName;
$toUsername=$postObj->ToUserName;
$time=time();
$textTpl='<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($textTpl,$fromUsername,$toUsername,$time,$contentStr);
echo $resultStr;
}
/**
* [responseImage 图文回复]
* @param [type] $postObj [微信服务器推送的消息(xml)经过simplexml_load_string转换成的对象]
* @param array $arr [回复的图文信息]
* @return [type] [description]
*/
public function responseImage($postObj,$arr=''){
$fromUsername=$postObj->FromUserName;
$toUsername=$postObj->ToUserName;
$time=time();
$imageTpl="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>".count($arr)."</ArticleCount>
<Articles>";
foreach ($arr as $key => $value) {
$imageTpl.="<item>
<Title><![CDATA[".$value['title']."]]></Title>
<Description><![CDATA[".$value['description']."]]></Description>
<PicUrl><![CDATA[".$value['picurl']."]]></PicUrl>
<Url><![CDATA[".$value['url']."]]></Url>
</item>";
}
$imageTpl.="</Articles>
</xml>";
echo sprintf($imageTpl,$fromUsername,$toUsername,$time,'news');
}
// access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token
// 公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在微信公众平台官网-开发者中心页中获得
/**
* [getWXAccess_Token 获得access_token
* @return [type] [description]
*/
public function getWXAccess_Token(){
session_start();
if ($_SESSION['access_token']&&$_SESSION['expire_time']>time()) {
return $_SESSION['access_token'];
}
else
{
$appID='wx2cd45e202c124d6e';
$appsecret='12add95378046d862b5a71d6e84bf583';
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appID."&secret=".$appsecret;
$res=$this->http_curl($url,'get','json');
$access_token=$res['access_token'];
$_SESSION['access_token']=$access_token;
$_SESSION['expire_time']=time()+7000;
return $access_token;
}
}
/**
* 创建自定义菜单
* @return [type] [description]
*/
public function defineItem(){
$access_token=getWXAccess_Token();
$curl='https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$access_token;
$postArr=array(
'button'=>array(
array(
'name'=>urlencode('菜单一'),
'type'=>'click',
'key'=>'item1',
),
array(
'name'=>urlencode('菜单二'),
'sub_button'=>array(
array(
'name'=>urlencode('歌曲'),
'type'=>'click',
'key'=>'songs',
),
array(
'name'=>urlencode('电影'),
'type'=>'view',
'url'=>'http://1.tianyu12345.applinzi.com/images/23.jpg',
),
),
),
array(
'name'=>urlencode('菜单三'),
'type'=>'view',
'url'=>'http://blog.csdn.net/zzz3112362088'
),
),
);
$postJson=urldecode(json_encode($postArr));
$res=$this->http_curl($curl,'post','json',$postJson);
var_dump($res);
}
public function http_curl($curl,$type='get',$res='json',$arr=''){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$curl); //设置获取URL地址
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //
//出现SSL certificate problem: unable to get local issuer certificate问题的解决方法是添加以下两句
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
if ($type='post') {
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
}
$output=curl_exec($ch);
curl_close($ch);
if ($res=='json') {
return json_decode($output,true);
}else{
return $output;
}
}
}
0 0
- 微信公众测试号开发改进版---php
- 微信公众号开发:PHP,对接微信公众账号的测试文档wx_sample.php的解析
- 微信公众号开发index.php
- 微信公众号开发分享 PHP
- 微信公众开发号-php
- 微信公众平台开发-PHP版
- 微信公众平台开发-PHP版
- 微信公众号开发原始初学版---php
- 公众号删除分组,php开发微信公众平台
- 公众获取用户地理位置-php开发微信公众号
- 微信公众号测试账号申请验证PHP
- 微信公众测试号
- 微信公众号测试
- 微信公众号用户分组,新建公众号用户分组,php开发公众号
- 微信公众平台开发[3] —— 微信公众号支付功能(PHP)
- 微信公众平台开发[3] —— 微信公众号支付功能(PHP)
- 自己的微信公众号开发测试1
- node js 微信公众号,模板消息开发测试
- PHP程序员的技术成长规划
- JAVA基础之线程
- Direct3D - Vertex Buffers
- CodeForces 75AFlea travel
- 人人都应该学习并成为优秀的产品经理,因为你要为《你自己》这个产品负责到底
- 微信公众测试号开发改进版---php
- 居民集会(分治法)
- 陶哲轩实分析-第8章-无限集合
- [推荐]OpenERP开发笔记(5) -- 自定义模块开发之一
- Android Studio系列教程与技巧目录
- 一些关于android屏幕的小知识
- 浅谈C语言中结构体的初始化
- 3种Java从文件路径中获取文件名的方法
- CodeForces 84AToy Army