<!--?php
define(
"TOKEN"
,
"weixin"
);
$wechatObj
=
new
wechatCallbackapiTest();
if
(!isset(
$_GET
['echostr'])) {
$wechatObj
--->responseMsg();
}
else
{
$wechatObj
->valid();
}
class
wechatCallbackapiTest
{
public
function
valid()
{
$echoStr
=
$_GET
[
"echostr"
];
if
(
$this
->checkSignature()){
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
)){
$this
->logger(
"R "
.
$postStr
);
$postObj
= simplexml_load_string(
$postStr
,
'SimpleXMLElement'
, LIBXML_NOCDATA);
$RX_TYPE
= trim(
$postObj
->MsgType);
switch
(
$RX_TYPE
)
{
case
"event"
:
$result
=
$this
->receiveEvent(
$postObj
);
break
;
case
"text"
:
$result
=
$this
->receiveText(
$postObj
);
break
;
}
$this
->logger(
"T "
.
$result
);
echo
$result
;
}
else
{
echo
""
;
exit
;
}
}
private
function
receiveEvent(
$object
)
{
switch
(
$object
->Event)
{
case
"subscribe"
:
$content
[] =
array
(
"Title"
=>
"欢迎关注方倍工作室"
,
"Description"
=>
"使用方法:\n1.发送快递单号,例如6367532560,可查询快递详情"
,
"PicUrl"
=>
"http://www.3856.cc/weixin/weixin/logo.jpg"
,
"Url"
=>
""
);
break
;
default
:
$content
=
"receive a new event: "
.
$object
->Event;
break
;
}
if
(
is_array
(
$content
)){
if
(isset(
$content
[0])){
$result
=
$this
->transmitNews(
$object
,
$content
);
}
else
if
(isset(
$content
[
'MusicUrl'
])){
$result
=
$this
->transmitMusic(
$object
,
$content
);
}
}
else
{
$result
=
$this
->transmitText(
$object
,
$content
);
}
return
$result
;
}
private
function
receiveText(
$object
)
{
$keyword
= trim(
$object
->Content);
if
(
$keyword
==
"时间"
||
$keyword
==
"测试"
){
$content
=
date
(
"Y-m-d H:i:s"
,time());
$result
=
$this
->transmitText(
$object
,
$content
);
}
else
if
(
strstr
(
$keyword
,
"您好"
) ||
strstr
(
$keyword
,
"你好"
) ||
strstr
(
$keyword
,
"在吗"
) ||
strstr
(
$keyword
,
"有人吗"
)){
$result
=
$this
->transmitService(
$object
);
return
$result
;
}
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
transmitNews(
$object
,
$newsArray
)
{
if
(!
is_array
(
$newsArray
)){
return
;
}
$itemTpl
= " <item>
<title><![CDATA[%s]]></title>
<description><!--[CDATA[%s]]--></description>
<picurl><!--[CDATA[%s]]--></picurl>
<url><!--[CDATA[%s]]--></url>
</item>
";
$item_str
=
""
;
foreach
(
$newsArray
as
$item
){
$item_str
.= sprintf(
$itemTpl
,
$item
[
'Title'
],
$item
[
'Description'
],
$item
[
'PicUrl'
],
$item
[
'Url'
]);
}
$newsTpl
= "<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(
$newsTpl
,
$object
->FromUserName,
$object
->ToUserName, time(),
count
(
$newsArray
));
return
$result
;
}
private
function
transmitMusic(
$object
,
$musicArray
)
{
$itemTpl
= "<music>
<title><![CDATA[%s]]></title>
<description><!--[CDATA[%s]]--></description>
<musicurl><!--[CDATA[%s]]--></musicurl>
<hqmusicurl><!--[CDATA[%s]]--></hqmusicurl>
</music>";
$item_str
= sprintf(
$itemTpl
,
$musicArray
[
'Title'
],
$musicArray
[
'Description'
],
$musicArray
[
'MusicUrl'
],
$musicArray
[
'HQMusicUrl'
]);
$textTpl
= "<xml>
<tousername><!--[CDATA[%s]]--></tousername>
<fromusername><!--[CDATA[%s]]--></fromusername>
<createtime>%s</createtime>
<msgtype><!--[CDATA[music]]--></msgtype>
$item_str
</xml>";
$result
= sprintf(
$textTpl
,
$object
->FromUserName,
$object
->ToUserName, time());
return
$result
;
}
private
function
transmitService(
$object
)
{
$xmlTpl
= "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[transfer_customer_service]]></MsgType>
</xml>";
$result
= sprintf(
$xmlTpl
,
$object
->FromUserName,
$object
->ToUserName, time());
return
$result
;
}
private
function
logger(
$log_content
)
{
if
(isset(
$_SERVER
[
'HTTP_APPNAME'
])){
sae_set_display_errors(false);
sae_debug(
$log_content
);
sae_set_display_errors(true);
}
else
if
(
$_SERVER
[
'REMOTE_ADDR'
] !=
"127.0.0.1"
){
$max_size
= 10000;
$log_filename
=
"log.xml"
;
if
(
file_exists
(
$log_filename
)
and
(
abs
(
filesize
(
$log_filename
)) >
$max_size
)){unlink(
$log_filename
);}
file_put_contents
(
$log_filename
,
date
(
'H:i:s'
).
" "
.
$log_content
.
"\r\n"
, FILE_APPEND);
}
}
}
?>