微信应用开发【PHP】---笔记2---统一以文本的方式回复各种类型消息

一、统一以文本的方式回复各种类型消息

1.截图

在这里插入图片描述 
在这里插入图片描述 
在这里插入图片描述 
在这里插入图片描述

2.实现代码

<?php
/**
 * 基础接口之接收用户消息思路:
 * 1.首先,微信公众账号对接收到的用户的消息类型进行判断
 * 2.然后根据发送过来的7种消息分别做相应的业务处理
 * 3.本实验业务处理的思路是统一以文本的方式回复各种类型消息的核心内容
 */
error_reporting(0);
define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest();//实例化类wechatCallbackapiTest
if (!isset($_GET['echostr'])) {
    $wechatObj->responseMsg();
}else{
    $wechatObj->valid();
}

/**
 *声明一个类 wechatCallbackapiTest,该类中包含有三个方法(函数)。
 * valid,responseMsg,checkSignature
 * valid和checkSignature主要是用来验证用的,responseMsg则是用来回复用户消息的
 */
class wechatCallbackapiTest
{
    //验证接口的函数,用于申请成为开发者时向微信发送验证信息
    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为用户在微信公众平台发的信息
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)){
            //simplexml_load_string为——转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元素
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $RX_TYPE = trim($postObj->MsgType);//判断平台接受的消息类型
            //用户发送的消息类型判断
            switch ($RX_TYPE)
            {
                case "text":    //文本消息
                    $resultStr = $this->receiveText($postObj);
                    break;
                case "image":   //图片消息
                    $resultStr = $this->receiveImage($postObj);
                    break;
                case "voice":   //语音消息
                    $resultStr = $this->receiveVoice($postObj);
                    break;
                case "video":   //视频消息
                    $resultStr = $this->receiveVideo($postObj);
                    break;
                case "location"://位置消息
                    $resultStr = $this->receiveLocation($postObj);
                    break;
                case "link":    //链接消息
                    $resultStr = $this->receiveLink($postObj);
                    break;
                default:
                    $resultStr = "unknow msg type: ".$RX_TYPE;
                    break;
            }
            echo $resultStr;
        }else {
            echo "???";
            exit;
        }
    }
 //上面与前一篇相同,主要代码在这里开始
//text,image,voice,video,shortvideo,location,link.
    //1.接收文本消息
    private function receiveText($object)
    {
        $contentStr = "你发送的是文本,内容为:".$object->Content;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }

    //2.接收图片消息
    private function receiveImage($object)
    {
        $contentStr = "你发送的是图片,地址为:".$object->PicUrl;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }

    //3.接收语音消息
    private function receiveVoice($object)
    {
        $contentStr = array("MediaId"=>$object->MediaId);
        $resultStr = $this->transmitVoice($object, $contentStr);;
        return $resultStr;
    }

    //4.接收视频/短视频消息
    private function receiveVideo($object)
    {
        $contentStr = "你发送的是视频,媒体ID为:".$object->MediaId;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }

    //5.接收位置消息
    private function receiveLocation($object)
    {
        $contentStr = "你发送的是位置,纬度为:".$object->Location_X.
        			";经度为:".$object->Location_Y.";缩放级别为:".$object->Scale.";位置为:".$object->Label;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;

    }

    //6.接收链接消息
    private function receiveLink($object)
    {
        $contentStr = "你发送的是链接,标题为:".$object->Title.
        			";内容为:".$object->Description.";链接地址为:".$object->Url;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }
//被动回复信息函数:文本和语音
    //回复文本消息
    private function transmitText($object, $content)
    {
        //4个%s;
        $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[text]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    </xml>";
        //sprintf——格式化xml模板
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
        return $resultStr;
    }

    //回复语音消息
    private function transmitVoice($object, $voiceArray)
    {
        $itemTpl = "<Voice>
                        <MediaId><![CDATA[%s]]></MediaId>
                    </Voice>";
        $item_str = sprintf($itemTpl, $voiceArray['MediaId']);
        $textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[voice]]></MsgType>
                        $item_str
                        </xml>";
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());
        return $resultStr;
    }
}
?>

写完代码后需要更新到新浪云上,并且确保测试号的接口配置信息是你的现在所写的这个文件
可以现在此调试器上进行测试,比较方便
微信调试器-方培工作室:http://www.fangbei.org/tool/message

3.解释:重点在组装xml数据

接受用户发给测试号的信息,判断其不同的信息类型,根据它们各自的xml数据,提取其中所需要显示的信息,
例如: $object->PicUrl,$object->Content...等这些信息
然后传给组装xml数据回复的函数去进行组装,用以回复用户。
在这里插入图片描述
其余类似

注:若要实现回复语音需要在你的测试号开启“接受语音识别结果”
在这里插入图片描述

transmit:传输,传送
receive:接受,接收
接受普通信息的xml数据:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html
被动回复用户信息的xml数据:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html


2020-06-12
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序是一种基于微信平台的应用开发模式,可以快速的开发出符合用户需求的小程序。在小程序的开发中,组件是一个非常重要的概念,通过组件可以实现复用性和模块化编程思想。 组件应用是小程序开发的基础。通过组件可以将某一模块化并封装起来,使得组件可以在不同的页面间得到复用,大大提升了开发效率并减少了代码冗余。微信小程序提供了丰富的自带组件,包括文本、图片、按钮、输入框等等,开发者也可以自己开发组件来满足自己的需求。实际开发中,通过组件可以快速搭建页面框架和业务逻辑。 Demo是一个演示小程序的示例程序。在小程序的实际开发过程中,一个好的Demo非常重要。通过Demo,开发人员可以更深入的了解小程序的开发流程、组件的应用和实际的业务开发等等。在Demo中,通常会包括小程序的一些基础操作,如页面跳转、数据绑定、组件的使用等。而在实际开发中,Demo还会包括一些复杂的业务场景,如支付、登录、数据列表展示等等。Demo不仅为开发者提供了学习和实践的机会,也方便了使用者了解该小程序的功能和特点。 总之,微信小程序组件的应用和Demo的开发都是小程序开发过程中非常重要的两个部分。良好的组件应用和精心设计的Demo,可以在极短的时间内实现小程序开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值