<?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
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
2
3
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
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;}}}?>