首先,先去微信公众平台注册一个账号(注册要填的东西挺多的),注册好之后,登录进去。可以看到左侧的“开发者中心”,开启开发者中心前好像还要你完善一些资料,按照步骤完善即可。进入开发者中心之后,先去编辑
修改配置,修改配置的时候,注意:
URL是你自己的域名下的PHP脚本(往下读有该脚本的demo),该脚本用于和微信接口对接。比如http://www.example.com/weixin.php
Token是上述脚本里的定义的一个常量,比如你的PHP脚本里定义了:
define("TOKEN", "my_weixin");
那么,在填写Token时,你就填abcdefgh
EncodingAESKey是消息加密用。你可以自己写一个43为的数字和字母的组合,也可以选择“随机生成”,一般选择随机生成即可。
填好之后,保存(如果保存时,提示Token验证失败,那么请确认token一致并多点几次保存试试)。
保存好之后,点击修改配置旁的:“开启”。
然后,就可以编辑你的PHP脚本了。(如果你没有自己的域名,可以使用新浪云的免费的SAE,并最好完成实名认证)
header(
'content-type:text/html;charset=utf-8'
);
define(
"TOKEN"
,
"my_weixin"
);
//define your token
$wx
=
new
wechatCallbackapiTest();
if
(
$_GET
[
'echostr'
]){
$wx
->valid();
//如果发来了echostr则进行验证
}
else
{
$wx
->responseMsg();
//如果没有echostr,则返回消息
}
class
wechatCallbackapiTest{
public
function
valid(){
//valid signature , option
$echoStr
=
$_GET
[
"echostr"
];
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"
];
//接收微信发来的XML数据
//extract post data
if
(!
empty
(
$postStr
)){
//解析post来的XML为一个对象$postObj
$postObj
= simplexml_load_string(
$postStr
,
'SimpleXMLElement'
, LIBXML_NOCDATA);
$fromUsername
=
$postObj
->FromUserName;
//请求消息的用户
$toUsername
=
$postObj
->ToUserName;
//"我"的公众号id
$keyword
= trim(
$postObj
->Content);
//消息内容
$time
= time();
//时间戳
$msgtype
=
'text'
;
//消息类型:文本
$textTpl
= "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
if
(
$keyword
==
'hehe'
){
$contentStr
=
'hello world!!!'
;
$resultStr
= sprintf(
$textTpl
,
$fromUsername
,
$toUsername
,
$time
,
$msgtype
,
$contentStr
);
echo
$resultStr
;
exit
();
}
else
{
$contentStr
=
'输入hehe试试'
;
$resultStr
= sprintf(
$textTpl
,
$fromUsername
,
$toUsername
,
$time
,
$msgtype
,
$contentStr
);
echo
$resultStr
;
exit
();
}
}
else
{
echo
""
;
exit
;
}
}
//验证字段
private
function
checkSignature(){
$signature
=
$_GET
[
"signature"
];
$timestamp
=
$_GET
[
"timestamp"
];
$nonce
=
$_GET
[
"nonce"
];
$token
= TOKEN;
$tmpArr
=
array
(
$token
,
$timestamp
,
$nonce
);
sort(
$tmpArr
);
$tmpStr
= implode(
$tmpArr
);
$tmpStr
= sha1(
$tmpStr
);
if
(
$tmpStr
==
$signature
){
return
true;
}
else
{
return
false;
}
}
}