2017-04-23 15:43:18 aojiancc2 阅读数 2017
  • 微信公众平台开发4-消息管理-微信开发php

    微信公众平台开发之消息管理是子恒老师《微信公众平台开发》视频教程的第4部。详细讲解了用php开发微信,对微信公众平台中的消息管理开发。内容包含微信关键字回复,多图文消息回复开发,接收图片消息,视频,小视频消息等等。欢迎反馈,微信/QQ:68183131

    6452 人正在学习 去看看 秦子恒


            

                  微信接收用户普通消息可以在官方文档中直接看


           

           

                   微信普通消息分为:

            

   

             接受用户文本消息 与 回复文本信息           

             

          注意在接收用户普通消息的时候,推送的xml格式没有eventKey,event 

      

          这个是菜单点击的时候推送的菜单的标识

             

             接收文本消息格式

           

 <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>

           处理文本消息的类   

                        

            

            接收消息 

  /// <summary>
    /// 处理用户发送的文本消息方法
    /// </summary>
    public class TextProcess : BaseProcess
    {
        public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
        {
            //取出发送者与接收者账号
            string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
            string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;

            //取出消息内容
            string Content = xl.Elements().Where(a => a.Name == "Content").FirstOrDefault().Value;
        }
    }

           回复文本消息工具类封装,增加回复文本消息方法       

   /// <summary>
        /// 回复文本消息的方法
        /// </summary>
        public void SendTextMesXml(HttpResponseBase Response, ReTextMsgModel _rmg)
        {

            string rxmls = string.Format(@"<xml>
                               <ToUserName>{0}</ToUserName>
                               <FromUserName>{1}</FromUserName>
                               <CreateTime>{2}</CreateTime>
                               <MsgType><![CDATA[text]]></MsgType>
                               <Content><![CDATA[{3}]]></Content>
                             </xml>           
                           ", _rmg.ToUserName, _rmg.FromUserName
                            , ConvertDateTimeInt(DateTime.Now), _rmg.Content);

            Response.Write(rxmls);

            Response.End();
        }

            在处理类中调用该方法        

/// <summary>
    /// 处理用户发送的文本消息方法
    /// </summary>
    public class TextProcess : BaseProcess
    {
        public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
        {
            //取出发送者与接收者账号
            string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
            string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;

            //取出消息内容
            string Content = xl.Elements().Where(a => a.Name == "Content").FirstOrDefault().Value;

            //回复的内容
            string retmes = "";

            if (Content == "1")
                retmes = "用户输入1";
            else if (Content == "2")
                retmes = "用户输入了2";
            else
                retmes = "随便回复一个^_^";

            //组建回复文本信息的类
            ReTextMsgModel rsm = new ReTextMsgModel();

            rsm.MsgType = "text";
            rsm.Content = retmes;
            rsm.ToUserName = FromUserName;
            rsm.FromUserName = ToUserName;

            //调用回复文本信息方法
            new SendMesTool().SendTextMesXml(_response, rsm);

            //记录一个日志
            LogTool.AddLog(new MsgLog() { MsgType = "Text", Content = Content });

            _response.End();

        }
    }

                    效果如下

            


            发表情也会认为是一个文本信息!!

            



           接受用户图片消息 与 回复图片信息

           

                  接收图片消息看官方文档,格式为       

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[image]]></MsgType>
 <PicUrl><![CDATA[this is a url]]></PicUrl>
 <MediaId><![CDATA[media_id]]></MediaId>
 <MsgId>1234567890123456</MsgId>
 </xml>
         

             其他都一样,主要是两个属性PicUrl和MediaId,一个是图片的url,

          一个是对应图片的Id

          可以先取出来,记录在日志中查看

    /// <summary>
    /// 处理图片信息的方法
    /// </summary>
    public class ImageProcess : BaseProcess
    {
        public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
        {
            //取出发送者与接收者账号
            string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
            string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;

            //取出图片连接
            string PicUrl = xl.Elements().Where(a => a.Name == "PicUrl").FirstOrDefault().Value;

            //取出MediaId,图片资源对应的id
            string MediaId = xl.Elements().Where(a => a.Name == "MediaId").FirstOrDefault().Value;

            //记录一个日志
            LogTool.AddLog(new MsgLog() { MsgType = "Image", Remark = "PicUrl:" + PicUrl,
                                          Remark2 = MediaId });

            _response.End();
        }
    }
              

             PicUrl就是一个图片链接,可以在浏览器中访问

            

            MediaId是串很长的字符

            


            回复图片信息

                  先看看文档        

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[media_id]]></MediaId>
</Image>
</xml>
                        

              其实其他都一样主要是一个MediaId,如果回复一个和用户一样的图片

           就把用户传递的MediaId回传给他就行了,如果要回复其他图片,看文档上解释

             

             需要通过素材接口上传,然后获取一个与之关联的MediaId就可了


              

               编写回复图片信息的model           

   /// <summary>
    /// 回复图片信息的model
    /// </summary>
    public class ReImageMsgModel
    {
        public string ToUserName { get; set; }
        public string FromUserName { get; set; }
        public int CreateTime { get; set; }
        public string MsgType { get; set; }
        public string MediaId { get; set; }
    }
            

           在回复信息的工具类中编写回复图片信息的方法          

  /// <summary>
        /// 回复图片消息的方法
        /// </summary>
        public void SendImageMesXml(HttpResponseBase Response, ReImageMsgModel _rmg)
        {

            string rxmls = string.Format(@"<xml>
                               <ToUserName>{0}</ToUserName>
                               <FromUserName>{1}</FromUserName>
                               <CreateTime>{2}</CreateTime>
                               <MsgType><![CDATA[{3}]]></MsgType>
                               <Image>
                                  <MediaId><![CDATA[{4}]]></MediaId>
                                 </Image>
                             </xml>           
                           ", _rmg.ToUserName, _rmg.FromUserName
                            , ConvertDateTimeInt(DateTime.Now),_rmg.MsgType,_rmg.MediaId);

            Response.Write(rxmls);
            Response.End();
        }
         

            在图片信息处理类中调用该方法进行回复一个图片信息        

  /// <summary>
    /// 处理图片信息的方法
    /// </summary>
    public class ImageProcess : BaseProcess
    {
        public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
        {
            //取出发送者与接收者账号
            string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
            string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;

            //取出图片连接
            string PicUrl = xl.Elements().Where(a => a.Name == "PicUrl").FirstOrDefault().Value;

            //取出MediaId,图片资源对应的id
            string MediaId = xl.Elements().Where(a => a.Name == "MediaId").FirstOrDefault().Value;


            //组建回复图片信息的类
            ReImageMsgModel rsm = new ReImageMsgModel();

            rsm.MsgType = "image";
            rsm.MediaId = MediaId;
            rsm.ToUserName = FromUserName;
            rsm.FromUserName = ToUserName;

            new SendMesTool().SendImageMesXml(_response, rsm);

            //记录一个日志
            LogTool.AddLog(new MsgLog() { MsgType = "Image", Remark = "PicUrl:" + PicUrl,
                                          Remark2 = MediaId });

            _response.End();
        }
    }
             

           效果如下

            

           

           




          

2016-01-07 19:05:50 hoho_12 阅读数 511
  • 微信公众平台开发4-消息管理-微信开发php

    微信公众平台开发之消息管理是子恒老师《微信公众平台开发》视频教程的第4部。详细讲解了用php开发微信,对微信公众平台中的消息管理开发。内容包含微信关键字回复,多图文消息回复开发,接收图片消息,视频,小视频消息等等。欢迎反馈,微信/QQ:68183131

    6452 人正在学习 去看看 秦子恒
<?php
/**
  * wechat php test
  */

//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();
$wechatObj->responseMsg();

class wechatCallbackapiTest
{
	public function valid()
    {
        $echoStr = $_GET["echostr"];

        //valid signature , option
        if($this->checkSignature()){
        	echo $echoStr;
        	exit;
        }
    }

    public function responseMsg()
    {
		//get post data, May be due to the different environments
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

      	//extract post data
		if (!empty($postStr)){
                /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
                   the best way is to check the validity of xml by yourself */
                libxml_disable_entity_loader(true);
              	$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
            
             	$type=$postObj->MsgType;
				$customevent=$postObj->Event;
            
                $latitude=$postObj->Location_X;
			    $longitude=$postObj->Location_Y;
            
                $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($type=="location"){
                $contentStr="你的纬度是($latitude),经度是($longitude),我已经锁定!";
                $msgType = "text";
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }  
            
               
           
            
            //关键字回复
            	if(!empty( $keyword ))
                {
              		$msgType = "text";
                    if($keyword=="1") {                       
                        $contentStr = "感谢关注泛IT!";}
                    if($keyword=="2") {
                        $contentStr = "联系QQ:,欢迎投稿以及提出宝贵意见";}
                    if($keyword=="3") {                       
                        $contentStr = "你的图片不错,还是输入文字吧!";}
                	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }else{
                	echo "Input something...";
                }
            
             
            //关注公众号后回复
               if($type="event" and $customevent="subscribe"){
                $contentStr="感谢关注泛IT\n您可以分别回复1、2、3";
                $msgType = "text";
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }
            
             
             //图片回复
                if($type="image"){
                $contentStr="你的图片很棒!";
                $msgType = "text";
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }  
//switch语句优化
<pre name="code" class="php"> /*
            		switch($type)
				{    
                        //处理文本
                        case "text":
                        //关键字回复
                        if(!empty( $keyword ))
                        {
                             //$msgType = "text";
                            if($keyword=="1") {                       
                            $contentStr = "回复1查看使用说明\n回复2查看联系方式\n回复3使用翻译字典\n回复4使用机器人聊天功能";}
                            if($keyword=="2") {
                            $contentStr = "联系QQ:,欢迎投稿以及提出宝贵意见";}
                         }else{                	
							$contentStr="此项功能尚未开发"; }                        
						break; 
                        //处理图片信息
                         case "image":
					$contentStr="你的图片不错,还是输入文字吧";
                        break;
                        //处理位置信息
                         case "location":
					$contentStr="你的纬度是($latitude),经度是($longitude),我已经锁定!";
					break;
                        //处理关注事件
                         case "event":
					if($customevent=="subscribe")
					{$contentStr="感谢关注泛IT\n回复1查看使用说明";}
					break;
                            default:
							$contentStr="此项功能尚未开发";						                       
                    }
            			$msgType = "text";
                        $resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
						echo $resultStr;                      
                        */

}else { echo ""; exit; }
 }
 private function checkSignature()
{ // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN;$tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}}?>




2019-07-09 14:46:35 deaidai 阅读数 380
  • 微信公众平台开发4-消息管理-微信开发php

    微信公众平台开发之消息管理是子恒老师《微信公众平台开发》视频教程的第4部。详细讲解了用php开发微信,对微信公众平台中的消息管理开发。内容包含微信关键字回复,多图文消息回复开发,接收图片消息,视频,小视频消息等等。欢迎反馈,微信/QQ:68183131

    6452 人正在学习 去看看 秦子恒

前言

话不多说,我是看了这些文章解决的
https://github.com/sbzhu/weworkapi_php
https://work.weixin.qq.com/api/doc#10514
https://work.weixin.qq.com/api/doc#90000/90139/90968/验证URL函数
https://blog.csdn.net/nvzizhou/article/details/52248616

正文

下载我的包:https://download.csdn.net/download/deaidai/11302743
代码结构
在这里插入图片描述
到时候让请求访问落到index.php。
我这里用nginx,可以参考我的部分配置

if ( $request_uri ~ ^/wechat/callback ) {
                rewrite ^/wechat/callback(.*)$  /wechat/callback/index.php$1  last;
        }

https://你的网站/wechat/callback为回调消息地址

然后,注意编解码问题,在php里设置
header("Content-Type:text/html; charset=utf-8");
header('content-type:text');

2015-12-01 10:05:06 u012678259 阅读数 534
  • 微信公众平台开发4-消息管理-微信开发php

    微信公众平台开发之消息管理是子恒老师《微信公众平台开发》视频教程的第4部。详细讲解了用php开发微信,对微信公众平台中的消息管理开发。内容包含微信关键字回复,多图文消息回复开发,接收图片消息,视频,小视频消息等等。欢迎反馈,微信/QQ:68183131

    6452 人正在学习 去看看 秦子恒

此处作为使用php做微信开发时的备忘记录,但愿能给各位提供点帮助吧。
这是微信发过来的xml

<xml>
    <URL>
        <![CDATA[消息推送到的URL]]>
    </URL>
    <ToUserName>
        <![CDATA[公众平台的微信号]]>
    </ToUserName>
    <FromUserName>
        <![CDATA[发送消息的用户的openID]]>
    </FromUserName>
    <CreateTime>消息的创建时间</CreateTime>
    <MsgType>
        <![CDATA[text]]>
    </MsgType>
    <Content>
        <![CDATA[发送过来的消息文本内容]]>
    </Content>
    <MsgId>消息ID</MsgId>
</xml>

使用php去解析这段xml的步骤如下:

 $msg = file_get_content('php://input'); // 接收微信推送过来的xml
 $xmlObj = simplexml_load_string($msg,'SimpleXMLElement',LIBXML_NOCDATA);
 dump($xmlObj);

此处的重点就是在于simplexml方法中的第二个和第三个参数,如果不设置,则xml文本中的CDATA区间则不能正常获取,返回的simplexml对象对应的区间则为空。

2018-03-08 16:53:50 lovemyself196221 阅读数 139
  • 微信公众平台开发4-消息管理-微信开发php

    微信公众平台开发之消息管理是子恒老师《微信公众平台开发》视频教程的第4部。详细讲解了用php开发微信,对微信公众平台中的消息管理开发。内容包含微信关键字回复,多图文消息回复开发,接收图片消息,视频,小视频消息等等。欢迎反馈,微信/QQ:68183131

    6452 人正在学习 去看看 秦子恒

1 . 申请一个微信公众号  

2 .  配置开发者的开发者密码和白名单(白名单,百度中搜IP) 

 . 


3.   配置服务器调用接口和解密用的信息



4 .  然后到PHP程序中先创建一个BaseController ,  用作校验和接收消息,代码如下



4 .  然后到PHP程序中创建一个WxController , 以 echostr来判断是校验还是接收到消息,代码如下





5 .  然后来到开发者平台 , 创建测试账号



然后配置测试号信息 




最后往下翻动 , 扫描该二维码 关注公众号



6  .  进入公众号 发送一条消息  



7  .   到服务器查看日志 , 发现已存在  ,  则表示已成功接收消息




没有更多推荐了,返回首页