验证服务器
准备
首先要有一个服务器,可以是租用也可以用免费空间.比如一个免费国外空间freevar.建个test.php,写上echo $_GET["echostr"];//这是微信服务器发来的随机数,能返回就证明这服务器能用.要验证的话可以加密然后和微信发过来的随机字符串匹配
然后在公众号后台的服务器配置里填上空间url(xxx.com/test.php),填上token(如'weixin').
EncodingAESKey随机生成
要安全就安全模式,不要安全要速度就明文
提交
过程
参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参 数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串
首先微信服务器会用token+timestamp+nonce经过加密计算得出一个结果signature,然后把时间戳,随机数,加密结果加上一个随机字符串echostr用get发过来,然后你可以在公众号服务器中用这个加密过程计算一次看能不能和signature对上.能对上就证明在微信服务器上的token和公众号服务器上的token是一致的,这个是微信发过来的信息没有错了.然后你可以把微信发过来的随机数也发过去,微信也知道这个公众号服务器的确是你的服务器了.
连接完成
提交URL后微信第一次调用一次服务器的php文件创建一个文件里的类,静态的话应该还在服务器保留有(?).之后应该每一次有消息都会调用一次服务器配置的php文件,
/**
* "拿post上的数据"
* 基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来 *接收, 比如 text/xml 或者 soap 等等。
* 另外还有一项 php://input 也可以实现此这个功能
* php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。
* php://input 不能用于 enctype="multipart/form-data"。
*/
post方法代码:
<?php
/**
想用post方法传递数据
*/
$data='
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
';
$url="localhost/b.php";
$header[]="Content-type:text/xml";//************
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//**********
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_exec($curl);
curl_close($curl);
?>