本篇转自猪年大吉博客:地址 https://blog.csdn.net/qq_43638176
关于微信接入第三方域名进行业务开发的相关说明已在另外一篇做了说明,这里不做赘述,接入步骤请移步
https://blog.csdn.net/qq_43638176/article/details/88915436
本篇示范微信交互过程中的几个基础事件,主要判断标准参数为$postObj->MsgType,分别介绍当用户对公众号上传一个图片,回复一个文本以及关注事件的几个推送,其他诸如音乐回复将在下一篇做总结。
可以查看官方文档:
接受普通消息:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453
被动回复:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543
具体代码实现:
<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
header("Content-type: text/html; charset=utf-8");
define("TOKEN","token");//定义识别码 需要跟微信公众平台上保持一致
class Blog extends Controller
{
public function index(){
$this->valid();
}
//微信验证
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);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
public function responseMsg(){
$poststr = file_get_contents('php://input');
//如果推送消息 或者推送事件存在,进行处理
if(!empty($poststr)){
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($poststr, 'SimpleXMLElement', LIBXML_NOCDATA);
$msgType = $postObj->MsgType;
//判断事件类型,进行对应事件类型处理
switch ($msgType) {
//当回复公众号时
case 'text':
$resultStr = $this->handleText($postObj);
break;
case 'image':
$resultStr = $this->handleImage($postObj);
break;
case 'voice':
$resultStr = $this->handleVoice($postObj);
break;
case 'video':
$resultStr = $this->handleVideo($postObj);
break;
case 'shortvideo':
$resultStr = $this->handleShortVideo($postObj);
break;
case 'location':
$resultStr = $this->handleLocation($postObj);
break;
case 'link':
$resultStr = $this->handleLink($postObj);
break;
case 'event':
$resultStr = $this->handleEvent($postObj);
break;
default:
$resultStr = "Unknow msg type: ".$msgType;
break;
}
return $resultStr;
}
}
//
//回复消息
public function handleText($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$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(!empty( $keyword ))
{
$msgType = "text";
$contentStr = "Welcome to wechat world!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "Input something...";
}
}
}
su先生给你加油噢!!!