公众号接收事件推送,普通消息

"接收普通消息:当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上"

我已开始的时候对公众号不熟悉,看到以上那句话之后我也是满脸的疑问,“微信服务器将POST消息的XML数据包到开发者填写的URL上”?,是那个url?我然后回想了一下,原来,我之前写了一个url是用来验证token的就是那个url。

验证access_token仅仅验证一次就可以了。以后那个url无论微信官方发什么信息都是发给那个url了。

就是下面这个:


废话不多现在开始看看是如何接收的。

扔下代码看看

respond.php

<?php
/**
  * wechat php test
  */
 
//define your token
define("TOKEN", "hehehe");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
//$wechatObj->valid();
 
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

//为了能让你们看到,我打获取的信息写入到text.txt

        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  file_put_contents("./test.txt",$postStr."<br>",FILE_APPEND);

          //extract post data
        if (!empty($postStr)){
                 
                  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                //$toUsername ="o7z4k0xt9kjDNHzThMiphjrHnFQ4";
                $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>";




         //       $textTpl="<xml>
            //     <ToUserName>< ![CDATA[%s]]></ToUserName>
               //  <FromUserName>< ![CDATA[%s]]></FromUserName>
                // <CreateTime>%s</CreateTime>
                // <MsgType><![CDATA[%s]]></MsgType>
                // <Image><MediaId>< ![CDATA[%s]]></MediaId>
                // </Image></xml>";            
                if(!empty( $keyword ))
                {
                    $msgType = "text";
                    $contentStr = '这是自动回复';
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    echo $resultStr;
                }else{
                    echo "Input something...";
                }
 
        }else {
            echo "";
            exit;
        }

    }

}

下面来实践一波


看看text.txt文件



公众号已经获取信息到了。接下来的业务就自己去实现吧,事件推送接收就下一篇文章再写吧

其实是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要集成微信公众号的消息功能,可以使用Spring Boot和WeChat SDK。以下是一些步骤: 1. 在微信公众平台上创建一个公众号,并获得AppID和AppSecret。 2. 在Spring Boot项目中添加WeChat SDK依赖项。 3. 创建一个Controller类来处理微信服务器发过来的请求,比如验证URL有效性和处理用户消息。 4. 配置服务器URL和Token,并在微信公众平台上进行验证。 5. 使用SDK提供的方法实现消息的回复和。 以下是一个简单的代码示例: ```java @RestController @RequestMapping("/wechat") public class WeChatController { @Autowired private WxMpService wxMpService; @GetMapping(produces = "text/plain;charset=utf-8") public String validate(@RequestParam(name = "signature") String signature, @RequestParam(name = "timestamp") String timestamp, @RequestParam(name = "nonce") String nonce, @RequestParam(name = "echostr") String echostr) { if (wxMpService.checkSignature(timestamp, nonce, signature)) { return echostr; } return "error"; } @PostMapping(produces = "application/xml; charset=UTF-8") public String handleMessage(@RequestBody String requestBody, @RequestParam(name = "signature") String signature, @RequestParam(name = "timestamp") String timestamp, @RequestParam(name = "nonce") String nonce, @RequestParam(name = "openid") String openid) { // 处理用户发消息 WxMpXmlMessage wxMessage; try { wxMessage = WxMpXmlMessage.fromXml(requestBody); } catch (Exception e) { return "error"; } // 构造回复消息 WxMpXmlOutMessage outMessage = WxMpXmlOutMessage.TEXT() .content("你好,欢迎关注我的公众号!") .fromUser(wxMessage.getToUser()) .toUser(wxMessage.getFromUser()) .build(); return outMessage.toXml(); } } ``` 在上面的代码中,我们首先验证了微信服务器发过来的请求是否有效。如果有效,我们返回echostr作为响应。接下来,我们处理用户发消息,并构造一个回复消息。最后,我们将回复消息作为响应返回给微信服务器。 请注意,我们使用了WxMpService类提供的方法来验证签名、解析消息和构造回复消息。要使用这个类,我们需要在Spring Boot项目的配置文件中添加以下内容: ``` # WeChat SDK wx.mp.appId=<your app ID> wx.mp.secret=<your app secret> wx.mp.token=<your token> wx.mp.aesKey=<your AES key> ``` 在上面的代码中,我们使用了WxMpXmlOutMessage.TEXT()方法来构造文本消息的回复。如果你需要回复其他类型的消息,比如图文消息或音频消息,请查看WeChat SDK的文档。 最后,我们需要在微信公众平台上配置服务器URL和Token。可以在公众号的基本配置页面中找到这些设置。在配置完成后,我们可以向公众号发消息,然后观察是否收到了回复。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值