微信用户订阅推送信息,关键字推送图片列表

由于接下来要进行微信开发,所以今天做了一个小功能。

前提:拥有个人订阅号,并成功绑定域名接口

功能概述:用户订阅公众号的时候,像用户推送提示信息,然后用户输入关键词,提供相应功能,这里展示的是从数据库获取到的新闻列表。

关键点是:对于以前在网页上打印出错误信息的模式,现在要改变成在服务器本地建立一个文件,用于调试

完整代码如下

<?php//// 关注/取消关注事件消息// 微信公众账号关注与取消关注事件消息//date_default_timezone_set(‘PRC‘);define("TOKEN", "zhouqi");

$wechatObj = new wechatCallbackapiTest();if (!isset($_GET[‘echostr‘])) {    $wechatObj->responseMsg();}else{    $wechatObj->valid();}

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 = $GLOBALS["HTTP_RAW_POST_DATA"];        if (!empty($postStr)){            //将微信返回的post数据包变成xml对象            $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);            $RX_TYPE = trim($postObj->MsgType);            //获取公共号标识号            $ToUserName = $postObj->ToUserName;            //获取openid            $FromUserName = $postObj->FromUserName;            //获取用户输入的内容            $Keyword = $postObj->Content;            $CreateTime = time();

switch ($RX_TYPE)            {                case "event":                    //订阅类型触发时间                    if ($postObj->Event == ‘subscribe‘){                        //文本消息模板                        $textTpl = "<xml>                        <ToUserName><![CDATA[%s]]></ToUserName>                        <FromUserName><![CDATA[%s]]></FromUserName>                        <CreateTime>%s</CreateTime>                        <MsgType><![CDATA[text]]></MsgType>                        <Content><![CDATA[%s]]></Content>                        </xml>";

$contentStr = "welcome,欢迎订阅周起的公众号.\r\n\r\n *功能菜单如下\r\n\r\n 1.输入 新闻 获取新闻列表";                        //将参数按照顺序填充到$textTpl占位符上                        $result = sprintf($textTpl,$FromUserName,$ToUserName,$CreateTime,$contentStr);                        //调试使用日志的形式,将调试信息放到本地文件上                        file_put_contents(‘wx.log‘,date("Y-m-d H:i:s")."订阅事件文本发送成功!\r\n",8);                    }                    break;                case "text":                    if ($Keyword == ‘新闻‘){                        //列表图文消息模板                        $textHead = "<xml>                        <ToUserName><![CDATA[%s]]></ToUserName>                        <FromUserName><![CDATA[%s]]></FromUserName>                        <CreateTime>%s</CreateTime>                        <MsgType><![CDATA[news]]></MsgType>                        <ArticleCount>%s</ArticleCount>                        <Articles>";                        $textBody = "<item>                        <Title><![CDATA[%s]]></Title>                         <Description><![CDATA[%s]]></Description>                        <PicUrl><![CDATA[%s]]></PicUrl>                        <Url><![CDATA[%s]]></Url>                        </item>";                        $textFooter = "</Articles></xml> ";

//连接数据库                        $connect = mysqli_connect(‘127.0.0.1‘,‘root‘,‘root‘,‘wx‘);                        if(!($connect)){                            //打印报错信息                            $connect = "数据库连接失败Error:".mysqli_connect_errno().":".mysqli_connect_error();                            file_put_contents(‘wx.log‘,date("Y-m-d H:i:s").$connect."\r\n",8);                        }

//微信规定最多返回10个列表信息                        $sql = "SELECT * FROM news ORDER BY id DESC LIMIT 0,10";                        $res = mysqli_query($connect,$sql);                        $count = mysqli_num_rows($res);                        //填充图片列表头部信息                        $result = sprintf($textHead,$FromUserName,$ToUserName,$CreateTime,$count);

//填充图片列表主要信息                        while ($row = mysqli_fetch_assoc($res)){                            $result .= sprintf($textBody,$row[‘title‘],$row[‘descript‘],$row[‘pic‘],$row[‘url‘]);                        }                        //填充图片列表尾部信息                        $result .= $textFooter;                    }                    break;                default:                    file_put_contents(‘wx.log‘,date("Y-m-d H:i:s")." 事件触发失败!\r\n",8);                    break;            }            //打印出结果等待微信服务器获取            echo $result;        }else {            echo "";            exit;        }    }}?>
时间: 2024-08-02 06:51:16

微信用户订阅推送信息,关键字推送图片列表的相关文章

如何获取微信用户的名字等信息

package com.aa.util; import org.apache.log4j.Logger; import com.aa.servlets.WeixinServlet; import net.sf.json.JSONObject; public class GetUserNickNameUtil { public static String getUserNickNameTest(String OPENID) { //注意:这里ACCESS_TOKEN是用测试号获取的,OPENID是

微信开发之(四)获取关注后的图文推送信息

当我们关注公众号后,我们可以推送一篇图文里面可以有相关的介绍和活动及欢迎的话: //请求处理的方法public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string postString = string.Empty; if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST&

「从模板消息改版订阅消息」小程序推送

前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 如果近期有看我文章的同学,会知道我最近在公司做的是推送系统.推送系统在我这也叫做消息管理平台,其实很容易理解:提供一个支持多渠道发送消息的系统. 在前段时间,微信公布:小程序模板消息接口将于2020年1月10日下线,开发者可使用订阅消息功能. 底层接口的变动,对程序员来说意味着什么,你懂的. 人在家中坐,班从天上来 本篇文章主要来聊聊我这边是怎么

MQTT是IBM开发的一个即时通讯协议,构建于TCP/IP协议上,是物联网IoT的订阅协议,借助消息推送功能,可以更好地实现远程控制

最近一直做物联网方面的开发,以下内容关于使用MQTT过程中遇到问题的记录以及需要掌握的机制原理,主要讲解理论. 背景 MQTT是IBM开发的一个即时通讯协议.MQTT构建于TCP/IP协议上,面向M2M和物联网IoT的连接协议,采用轻量级发布和订阅消息传输机制.Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用. 基本概念 [MQTT协议特点]——相比于RESTful架构的物联网系统,MQ

C# 数据推送 实时数据推送 轻量级消息订阅发布 多级消息推送 分布式推送

前言 本文将使用一个NuGet公开的组件技术来实现数据订阅推送功能,由服务器进行推送数据,客户端订阅指定的数据后,即可以接收服务器推送过来的数据,包含了自动重连功能,使用非常方便 nuget地址:https://www.nuget.org/packages/HslCommunication/            github地址:https://github.com/dathlin/HslCommunication                                 如果喜欢可以s

PhoneGap实现信息推送-基于极光推送(Android版)

极光推送插件安装地址: https://github.com/jpush/jpush-phonegap-plugin 安装插件后,需要在AndroidManifest.xml中配置极光平台申请的App Key: <meta-data android:name="JPUSH_APPKEY" android:value="aca4b37e5c00d477b*****" /> 在JPushPlugin.java文件的22行处有报错,需要把这里修改为你自己的主包

pushlet实现服务器端向客户端推送信息

使用Pushlet来实现服务器端向客户端推送信息 1.   实现方式: 有两种实现方式: 1.         通过配置文件来实现定时的从服务器端向客户端推送信息 2.         通过API主动向另外一端推送信息 以下分别给予介绍. 2.   特别注意 在开始测试之前,有三点非常重要,需要实现讲明,否则程序将会无法正常运行: 2.1.     JSP页面上的设定 JSP页面上必须添加以下代码以确保Pushlet能够正确的获得后台服务的地址: <base href="<%=req

魔推mpush:消息推送的大学问,别把用户惹毛了!

从开发者和开发商的角度来说,消息推送越来越受到他们的重视.因此,个推.极光.百度云平台.信鸽.魔推mpush等等消息推送类服务平台应运而生,这受到了运营商们的重视.但是,对信息推送服务的调查我们发现,很多运营商只是单纯的将这个渠道视为一种信息下发通道,并未很好的了解.运用这一个有效的提高APP打开率和活跃度的工具. 根据Flurry公布的数据显示,智能手机用户每天平均2个半小时在看手机,而其中86%的时间都在使用各种各样的APP.而Urban Airship过去6个月内5亿次推送的数据统计结果表

java 使用 comet4j 主动向客户端推送信息 简单例子

[背景] 今天,一个前端的师弟问我怎样做实时聊天窗口,我毫不犹豫地说:在前台定时访问服务端呀!师弟默默地百度了一番,最后告诉我,有一种技术是后服务端动推送信息给客户端的,这种技术的名字叫comet,我惊呆了,因为完全没听过,赶紧上网搜集资料,耗了一个晚上写了个简单的例子,实现主动向客户端发送信息.说是说主动,其实还是要客户端先献出它的“第一次”,即只要它有先请求你一下,以后你们熟了,你想主动约它就约它! 关于comet技术介绍及其实现原理,可以参考网站 http://www.ibm.com/de