今天试了试微信公众号的开发,整体下来都很简单,都坑在自己的不仔细上面了。
首先进行开发的服务器的基本配置
public function index(Request $request){
//获取timestamp nonce signature echostr
$timestamp = $request->get('timestamp','');
$nonce = $request->get('nonce','');
$signature = $request->get('signature','');
$echostr = $request->get('echostr','');
$token = 'wxgzh';
//形成字符串 字典排序
$array = array($timestamp,$nonce,$token);
sort($array,SORT_STRING);
//拼接成字符串 sha1加密 并于$signature比较
$tmp = implode('',$array);
$tmp = sha1($tmp);
if ($tmp == $signature && $echostr){
echo $echostr;
exit();
}else{
//关注自动回复
$this->responseMsg();
}
}
微信订阅号基本配置
点击提交即可。这样就完成了微信公众号的接入。完成之后别忘记点击启用服务器配置~ 查看微信微信关注取消事件。按照文档所示返回相应的数据即可。
文本消息回复事件
public function responseMsg(){
$postArr = file_get_contents("php://input");//不支持multipart/form-data类数据
// $postArr = $GLOBALS['HTTP_RAW_POST_DATA'];//需要开启对应的php扩展
$postObj = simplexml_load_string($postArr);
if (strtolower($postObj->MsgType) == 'event'){
if (strtolower($postObj->Event) == 'subscribe'){
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$MsgType = 'text';
$content = '欢迎关注ache的公众号';
$tmp = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$info = sprintf($tmp, $toUser, $fromUser, $time, $MsgType, $content);
echo $info;
}
}
echo '';
}
然后自己的公众号关注走一波。
最终效果
在编写测试过程中需要注意的是返回微信的数据是不能带空格的。在测试失败之后找了好久才发现。另外在接收关注事件的数据的时候因为是post请求关系,如果是使用框架开发的可能需要关闭csrf验证。我就是用laravel5.5来写的。死活就是收不到数据。看了文档是post请求,脑补了下才想到。
网友评论