首页 新闻 搜索 专区 学院

微信公众号回复消息里面的视频,短视频,location,link,好友event,不会写,大佬能不能教教我?

0
[待解决问题]

<?php
// 定义函数, 配置微信公众号服务器
function checkSignature(){
// 获取微信平台通过 get 方式发送过来的 四个参数
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$echostr = $_GET["echostr"];

$token = 'maria';
// token, timestamp, nonce 合并成一个数组
$tmpArr = array($token, $timestamp, $nonce);
// token, timestamp, nonce 字典序排序
sort($tmpArr, SORT_STRING);
// 拼接成 字符串
$tmpStr = implode( $tmpArr );
// sha1 加密
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
// 说明消息来自微信
echo $echostr;
}

// 以上代码可由以下一行代码代替, 但是不是很安全
// echo $_GET['echostr'];
}
// 调用函数
//checkSignature();

/**

  • 当用户操作过 公众号 后, 微信会转发对应类型的消息到该文件. 我们需要在这里对微信转发过来的消息进行处理.
    */
    // 1, 获取 微信发送过来的 xml 格式数据
    $postStr = $GLOBALS['HTTP_RAW_POST_DATA'];
    // 注意: PHP 7 之后, $GLOBALS 方法的 API 被调整了, 需要使用其它方法获取微信发送过来的数据

// empty() 方法用户检测数据是否为空, 如果为 空 返回 true, 否则 false.
if (empty($postStr) == false) {
// libxml_disable_entity_loader() 方法的作用是: 设置是否禁止外部加载 xml 实体, 设置为 true 就是禁止, 目的是防止xml被注入攻击
libxml_disable_entity_loader(true);

// 解析 xml 格式的数据
$postObj = simplexml_load_string($postStr, "simpleXMLElement", LIBXML_NOCDATA);

// 第一级分流
switch ($postObj -> MsgType) {
case 'event':
// 1, event
handleEvent($postObj);
break;
case 'text':
// 2, text
handleText($postObj);
break;
case 'image':
// 3, image
handleImage($postObj);
break;
case 'voice':
// 4, voice
handleVoice($postObj);
break;
case 'video':
// 5, video
handleVideo($postObj);
break;
case 'shortvideo':
// 6, shortvideo
handleShortVideo($postObj);
break;
case 'location':
// 7, location
handleLocation($postObj);
break;
case 'link':
// 8, link
handleLink($postObj);
break;

default:
  echo "";
  break;

}
}

// 1, 定义函数, 处理一级分流中的 event 类型
function handleEvent($postObj) {

}

// 2, 定义函数, 处理一级分流中的 text 类型
function handleText($postObj) {
// 获取当前时间
$time = time();
// 设置回复的消息
$relMsg = '收到:'.$postObj->Content;
// 回复消息
$str = <<<SSS
<xml>
<ToUserName><![CDATA[{$postObj->FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$postObj->ToUserName}]]></FromUserName>
<CreateTime>{$time}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{$relMsg}]]></Content>
</xml>
SSS;
echo $str;
}

// 3, 定义函数, 处理一级分流中的 Image 类型
function handleImage($postObj) {
// 获取当前时间
$time = time();
// 回复消息
$str = <<<SSS
<xml>
<ToUserName><![CDATA[{$postObj->FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$postObj->ToUserName}]]></FromUserName>
<CreateTime>{$time}</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[{$postObj->MediaId}]]></MediaId>
</Image>
</xml>
SSS;
echo $str;
}

// 4, 定义函数, 处理一级分流中的 Voice 类型
function handleVoice($postObj) {
// 获取当前时间
$time = time();
// 回复消息
$str = <<<SSS
<xml>
<ToUserName><![CDATA[{$postObj->FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$postObj->ToUserName}]]></FromUserName>
<CreateTime>{$time}</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<Voice>
<MediaId><![CDATA[{$postObj->MediaId}]]></MediaId>
</Voice>
</xml>

SSS;
echo $str;
}
// 5, 定义函数, 处理一级分流中的 video 类型
function handleVideo($postObj) {
// 获取当前时间
$time = time();
$media_id='这个视频很耐斯';
// 回复消息
$str = <<<SSS
<xml>
<ToUserName><![CDATA[{$postObj->FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$postObj->ToUserName}]]></FromUserName>
<CreateTime>{$time}</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<Video>
<MediaId><![CDATA[{$media_id}]]></MediaId>
<Title><![CDATA[title]]></Title>
<Description><![CDATA[description]]></Description>
</Video>
</xml>
SSS;
echo $str;
}
// 6, 定义函数, 处理一级分流中的 shortvideo 类型
function handleShortVideo($postObj) {
// 获取当前时间
$time = time();
$media_id='zm322A7MCXtlj1oRSQd_yIcfzDbxY9A9bSopA6txapIu8e6pUSwVgquCnu-0T50i';
// 回复消息
$str = <<<SSS
<xml>
<ToUserName><![CDATA[{$postObj->FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$postObj->ToUserName}]]></FromUserName>
<CreateTime>{$time}</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<Video>
<MediaId><![CDATA[{$media_id}]]></MediaId>
<Title><![CDATA[title]]></Title>
<Description><![CDATA[description]]></Description>
</Video>
</xml>
SSS;
echo $str;
}
// 7, 定义函数, 处理一级分流中的 location 类型
function handleLocation($postObj) {
// 获取当前时间
$time = time();
// 设置回复的消息
$relMsg = '地点:'.$postObj->Content;
// 回复消息
$str = <<<SSS
<xml>
<ToUserName><![CDATA[{$postObj->FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$postObj->ToUserName}]]></FromUserName>
<CreateTime>{$time}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{$relMsg}]]></Content>
</xml>
SSS;
echo $str;
}
// 8, 定义函数, 处理一级分流中的 link 类型
function handleLink($postObj) {
// 获取当前时间
$time = time();
// 回复消息
$str = <<<SSS
<xml>
<ToUserName><![CDATA[{$postObj->FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$postObj->ToUserName}]]></FromUserName>
<CreateTime>{$time}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{$postObj->Label}]]></Content>
</xml>
SSS;
echo $str;
}

?>

小亚亚同学的主页 小亚亚同学 | 菜鸟二级 | 园豆:202
提问于:2020-06-30 21:12
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册