<?php
/**
* wechat php test
*/
//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if (!empty($postStr)){
/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
the best way is to check the validity of xml by yourself */
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$type=$postObj->MsgType;
$customevent=$postObj->Event;
$latitude=$postObj->Location_X;
$longitude=$postObj->Location_Y;
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
//发送位置回复
if($type=="location"){
$contentStr="你的纬度是($latitude),经度是($longitude),我已经锁定!";
$msgType = "text";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
//关键字回复
if(!empty( $keyword ))
{
$msgType = "text";
if($keyword=="1") {
$contentStr = "感谢关注泛IT!";}
if($keyword=="2") {
$contentStr = "联系QQ:,欢迎投稿以及提出宝贵意见";}
if($keyword=="3") {
$contentStr = "你的图片不错,还是输入文字吧!";}
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "Input something...";
}
//关注公众号后回复
if($type="event" and $customevent="subscribe"){
$contentStr="感谢关注泛IT\n您可以分别回复1、2、3";
$msgType = "text";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
//图片回复
if($type="image"){
$contentStr="你的图片很棒!";
$msgType = "text";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
//switch语句优化
<pre name="code" class="php"> /*
switch($type)
{
//处理文本
case "text":
//关键字回复
if(!empty( $keyword ))
{
//$msgType = "text";
if($keyword=="1") {
$contentStr = "回复1查看使用说明\n回复2查看联系方式\n回复3使用翻译字典\n回复4使用机器人聊天功能";}
if($keyword=="2") {
$contentStr = "联系QQ:,欢迎投稿以及提出宝贵意见";}
}else{
$contentStr="此项功能尚未开发"; }
break;
//处理图片信息
case "image":
$contentStr="你的图片不错,还是输入文字吧";
break;
//处理位置信息
case "location":
$contentStr="你的纬度是($latitude),经度是($longitude),我已经锁定!";
break;
//处理关注事件
case "event":
if($customevent=="subscribe")
{$contentStr="感谢关注泛IT\n回复1查看使用说明";}
break;
default:
$contentStr="此项功能尚未开发";
}
$msgType = "text";
$resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
echo $resultStr;
*/
}else { echo ""; exit; }
}
private function checkSignature()
{ // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN;$tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}}?>