2015-08-31 16:00:29 u010773333 阅读数 7875
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

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

最近产品经理要做每天推送图文信息的功能,哎,还要超链接传递不同的参数,苦逼呀。。网上查了一些资料,下面讲解一下群发素材

要群发素材,首先要先获得素材,素材都是以图片和文字的形式推送给用户的,所以要首先获得图片和文字

微信的上传媒体接口:https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

可以用来上传图片,上传成功返回:{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789},其中media_id就是图片在微信服务器的标识。

上传方法:

       /// <summary>
        /// 上传媒体返回媒体ID
        /// </summary>
        public static string UploadMedia(string access_token, string type, string path)
        {
            // 设置参数
            string url = string.Format("http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}", access_token, type);
            return HttpRequestUtil.HttpUploadFile(url, path);
        }

第二步:拼接图文消息素材Json字符串,其中msg就是上述的微信服务器传回来的媒体ID

       /// <summary>
        /// 拼接图文消息素材Json字符串
        /// </summary>
        public static string GetArticlesJsonStr(string access_token,string msg)
        {
            StringBuilder sbArticlesJson = new StringBuilder();

             sbArticlesJson.Append("{\"articles\":[");
                //string media_id = Tools.GetJsonValue(msg, "media_id");
               // string media_id = (msg,"media_id");
                sbArticlesJson.Append("{");
                // sbArticlesJson.Append();
                sbArticlesJson.Append("\"thumb_media_id\":\"" + msg + "\",");
                sbArticlesJson.Append("\"author\":\"" + "王华涛" + "\",");
                sbArticlesJson.Append("\"title\":\"" + "作业已经完成" + "\",");
                sbArticlesJson.Append("\"content_source_url\":\"" + "http://。。。。" + "\",");
                sbArticlesJson.Append("\"content\":\"" + "作业信息" + "\",");
                sbArticlesJson.Append("\"digest\":\"" +"您孩子的作业已经完成" + "\",");
                sbArticlesJson.Append("\"show_cover_pic\":\"1\"}");
                sbArticlesJson.Append("]}");

            return sbArticlesJson.ToString();
        } 

第三步:上传图文消息素材,其中postData就是拼接图文消息素材Json字符串,调用微信接口上传之后获得media_id

        /// <summary>
        /// 上传图文消息素材返回media_id
        /// </summary>
        public static string UploadNews(string access_token, string postData)
        {
            return HttpRequestUtil.PostUrl(string.Format("https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token={0}", access_token), postData);
        }

第四步:图文消息json,添加发送用户openid

      /// <summary>
        /// 图文消息json
        /// </summary>
        public static string CreateNewsJson(string media_id, List<string> openids)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("{\"touser\":[\"");

            foreach(string  openid in openids)    

            {

                 sb.Append(openid);
                sb.Append("\",\"");

            }
            sb.Append("\"],");
            sb.Append("\"msgtype\":\"mpnews\",");
            sb.Append("\"mpnews\":{\"media_id\":\"" + media_id + "\"}");
            sb.Append("}");
            return sb.ToString();
        }
第五步:调用微信发送素材接口,根据OpenID列表群发素材信息

        /// <summary>
        /// 根据OpenID列表群发
        /// </summary>
        public static string Send(string access_token, string postData)
        {
            return HttpRequestUtil.PostUrl(string.Format("https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token={0}", access_token), postData);
        }



2016-09-30 18:18:36 u013034640 阅读数 2791
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

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

     在项目中,用到了微信的模版消息。搜索了一下,发现了很多好玩的东西,这里跟大家分享一下。

一,微信公众平台简介

 微信公众平台,可以分为三类。

(1)订阅号:主要偏重于为用户传达资讯,类似于 报纸杂志,认证前后都是每天只可以群发一条消息。

(2)服务号:主要偏重于服务交互(类似于银行,114,提供服务查询),认证前后每个月可以群发4条消息。

(3)企业号:主要用于公司内部通信使用,需要先有成员的通信消息才可以关注 成功企业号。

样式展示:

                 


对比区别:

 微信公众平台可以分为订阅号和服务号,订阅号个人和企业均可申请,也就是无须营业执照也可以,服务号必须是企业申请,要用营业执照和组织结构代码证,以及公章。而我们今天要聊的模版消息是只有服务号中才有的。

二,什么是模版消息

1,介绍

    通过模版消息借口,公众号能向其账号的用于发送预设模版的消息。模版消息仅用于公众号发送重要服务通知,如信用卡刷卡通知,商品购买成功通知等。切记使用模版发送垃圾广告,一定要用在正当的场合。现在具有支付能力的服务号都可以自助开通模版消息,更好的为用户服务。现在已经有超过1000个合作伙伴在运用模版消息借口提供服务通知,模版消息日调用量超过1500w 次,每日影响的客户端用户已经超过了700w。

                                                                                                                   

2,模版消息优缺点:

优点:

显示形式有别于其他消息,信息通俗易懂并且美观一些,是一种通知类消息,可以主动给用户发送,用户只是需要关注公众号,不需要和公众号交互;而且可以根据不同的行业发送不同的个性化消息。

缺点:消息内容固定,不能进行过多的定制化。都是微信提供的一些固定的模版。

三,如何申请使用

 1.添加模版

在微信公众号后台菜单里面有模板消息一栏,点击进去后可以看到模板库,可以根据自己的实际需要添加自己需要的模板消息,模板涵盖各行各业,暂不可自己编辑模板。


2.选择行业

微信模版中提供了大量常用的消息模版,可以选择自己需要的行业模版。

                            

3,获得模版id和数据参数

微信限制最多只能选择8个模板,应该也够用了。选中模板后就可以看到模板ID、标题等,这里已购买成功为列,查看详情时:

                                                             


特别重要的是模版Id,不同的行业性质和需要,可以选择不同的模版,从上面可以看到模版需要提供的相关参数,这样就可以拼接请求的参数了。

三,项目中开发使用

 以订单为例,当在网上购买商品之后,会收到一条消息。微信提供 了微信公众平台开发者文档,微信提供了模版消息的接口,根据自己的程序的业务逻辑,调用不同的方法即可。这里查询到一个挺好的博客,讲的很详细,可以参考下。博客链接

                              

小结:

  微信模版消息大家加强了系统和用户的联系,同时更加的智能化和人性化,使用过程中也非常的方便。具体的代码开发也很简单,是同事拼接的,我需要自己研究下,这里我就不献丑啦。



 













2016-01-15 15:19:08 liuhuanchao 阅读数 593
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

    8095 人正在学习 去看看 秦子恒
<span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2px; background-color: rgb(255, 255, 255);">最近研究了一下微信,感觉不是很难,借鉴了marker(www.yl-blog.com)的开源代码,修改了几处小BUG(在作者的开源网站上留了言,详见其开源网站),很快就实现关键的逻辑: </span>
  1、开发者验证 
  2、通过程序接口自定义菜单 
  3、用户关注后,发送欢迎消息 
  4、根据用户输入为其选择感兴趣的话题 
  5、发送文件消息、发送图文消息 
  6、使用静态网页模拟了微信网站的简单模板 

  公众号,daydayup_it,正在紧张的策划开发中,近期上线,计划主要提供一些优质的教育资源,敬请大家关注。 

  准备有空把关键技术整理一下,贴出来跟大家交流。 

  一、开发者验证,其实主要是写个Servlet,有点Web开发经验就很容易搞定 

package org.marker.weixin.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 处理微信服务器请求的Servlet URL地址:http://xxx/weixin/dealwith.do
 * 
 * @author marker
 * @blog www.yl-blog.com
 * @weibo http://t.qq.com/wuweiit
 */
public class WinXinServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static Log log = LogFactory.getLog(WinXinServlet.class);

	// TOKEN 是你在微信平台开发模式中设置的字符串
	public static final String TOKEN = "YourToken";

	/**
	 * 处理微信服务器验证
	 * http://wallimn.iteye.com, 2014-09-11
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String signature = request.getParameter("signature");// 微信加密签名
		String timestamp = request.getParameter("timestamp");// 时间戳
		String nonce = request.getParameter("nonce");// 随机数
		String echostr = request.getParameter("echostr");// 随机字符串
		Writer out = response.getWriter();
		System.out.println("收到验证请求:");
		System.out.println("  signature="+signature);
		System.out.println("  timestamp="+timestamp);
		System.out.println("  nonce="+nonce);
		System.out.println("  echostr="+echostr);
		if(signature==null || timestamp==null || nonce==null || echostr==null){
			//这几个参数为空时,排序会报错。
			out.write("parameter is null!");
		}
		else{
			// 重写totring方法,得到三个参数的拼接字符串
			List<String> list = new ArrayList<String>(3) {
				private static final long serialVersionUID = 2621444383666420433L;
				public String toString() {
					return this.get(0) + this.get(1) + this.get(2);
				}
			};
			list.add(TOKEN);
			list.add(timestamp);
			list.add(nonce);
			Collections.sort(list);// 排序
			String tmpStr = new MySecurity().encode(list.toString(),
					MySecurity.SHA_1);// SHA-1加密
			if (signature.equals(tmpStr)) {
				out.write(echostr);// 请求验证成功,返回随机码
			} else {
				out.write("check error!");
			}
		}
		out.flush();
		out.close();
	}

	
	/**
	 * 处理微信服务器发过来的各种消息,包括:文本、图片、地理位置、音乐等等
	 * http://wallimn.iteye.com, 2014-09-11
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		log.info("收到POST请求:"+(new Date()));
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		InputStream is = request.getInputStream();
		OutputStream os = response.getOutputStream();
		//TODO:写微信平台推送过来的各种信息的处理逻辑
	}
}

 二、微信网站的测试主页效果及代码,借助bootstrap,支持媒体查询,当手机水平看时,栏目会变成2*2布局,index.jsp,需要JSTL的支持,也可以自行去掉,不影响效果,注意连接文件的路径即可 


 


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<c:set var="ctx" value="${pageContext.request.contextPath}"></c:set>
    <title>DayDayUp网站</title>

    <!-- Bootstrap -->
    <link href="${ctx}/css/bootstrap.min.css" rel="stylesheet">

    <style type="text/css">
    	body,th,td{
    		font-size:1.5em;
    		font-family:宋体;
    	}
    	body{
    		margin:1px;
    	}
    	a{
    		text-decoration:none;  
    	}
		a:link,a:visited,a:hover,a:active{  
		    text-decoration:none;  
		}  
		  
		a:focus{  
		    outline:0;   
		} 
    	.wxc a{
    		display:block;
    		overflow:hidden;
    		text-decoration:none;  
    		line-height:1.5em;
    		padding:0 10px;
    		border-bottom:1px dotted #a0a0a0;  	
    		margin:0 5px;	
    	}
    	.wxc a:last-child{
    		border-width:0 !important;
    	}
    	.topbar,.bottombar{
    		padding:0 2px;
    		line-height:2em;
    		background-color:#980404;
    		color:white;
    	}
    	.topbar{
    		font-weight:bold;
    		font-size:150%;
    	}
    	.item img{
    		margin:0 auto;
    	}
    	#search_panel{
    		margin:5px 0;
    	}
    	.panel{
    		margin:5px 2px;
    	}
    	.nopadding{
    		padding:0;
    	}
    </style>
  </head>
  <body>
	<div class="topbar">欢迎访问DayDayUp(建设中...)</div>
  
	<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
	  <!-- Indicators -->
	<ol class="carousel-indicators">
	  <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
	  <li data-target="#carousel-example-generic" data-slide-to="1"></li>
	  <li data-target="#carousel-example-generic" data-slide-to="2"></li>
	</ol>
	
	<!-- Wrapper for slides -->
	<div class="carousel-inner" role="listbox">
	  <div class="item active">
	    <img src="./images/p1.jpg" alt="图片1">
	    <div class="carousel-caption">
	    	<h4>Word办会全解决</h4>
	    	<p>您办过会吗?您被各种各样的文件、表格折磨过吗?那请您花几分钟时间来看一下本站提供的解决方案,包您受益匪浅!</p>
	    </div>
	  </div>
	  <div class="item">
	    <img src="./images/p2.jpg" alt="图片2">
	    <div class="carousel-caption">
	    	<h4>Excel财务规划</h4>
	    	<p>您用Excel做过家庭财务规划吗?这里提供给您一个完整的案例,非常方便,您一学就会,一看就会。</p>
	    </div>
	  </div>
	  <div class="item">
	    <img src="./images/p3.jpg" alt="图片3">
	    <div class="carousel-caption">
	    	<h4>PPT秀出别样的精彩</h4>
	    	<p>您用Excel做过家庭财务规划吗?这里提供给您一个完整的案例,非常方便,您一学就会,一看就会。</p>
	    </div>
	  </div>
	</div>
	
	  <!-- Controls -->
	  <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
	    <span class="glyphicon glyphicon-chevron-left"></span>
	    <span class="sr-only">前一个</span>
	  </a>
	  <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
	    <span class="glyphicon glyphicon-chevron-right"></span>
	    <span class="sr-only">下一个</span>
	  </a>
	</div>

	<div id="search_panel">
	  <div class="input-group">
	    <input type="text" class="form-control" placeholder="请输入关键字">
	    <span class="input-group-btn">
	      <button class="btn btn-default" type="button"><span class="glyphicon glyphicon-search"></span></button>
	    </span>
	  </div><!-- /input-group -->
	</div>
  
	<div class="col-xs-12 col-sm-6 nopadding">
		<div class="panel panel-default wxc">
		  <div class="panel-heading">最近发表</div>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		</div>  
	</div>  
	<div class="col-xs-12 col-sm-6 nopadding">
		<div class="panel panel-default wxc">
		  <div class="panel-heading">热门问题</div>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		</div>  
	</div>  
	<div class="col-xs-12 col-sm-6 nopadding">
		<div class="panel panel-default wxc">
		  <div class="panel-heading">劳模排行</div>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		</div>  
	</div>  
	<div class="col-xs-12 col-sm-6 nopadding">
		<div class="panel panel-default wxc">
		  <div class="panel-heading">赞率最高</div>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		</div>  
	</div>  
	
	<div class="text-center">
	  	<a href="">首页</a> | <a href="">文章</a> | <a href="">视频</a> | <a href="">留言</a>
	</div>
	<div class="bottombar">浙ICP备######号</div>
  
    <script src="${ctx}/js/jquery-1.11.1.min.js"></script>
    <script src="${ctx}/js/bootstrap.min.js"></script>
  </body>
</html>

三、微信模板美化 
  发现一个网站,效果不错。http://xiumi.us/,提供大量的模板。 

四、使用JQuery Mobile开发心理测评网站 
  JQuery Mobile用起来还挺方便。体验地址:http://www.day2up.com/post1.htm 
2017-06-01 22:19:08 qq_31443615 阅读数 3538
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

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

/*

*公司需要,学了一下微信公众号开发,写这篇博客的时候已经开发结束半个月了

*回来记录一下,采用php语言(现学的)进行开发,不足之处还望提出来共同探讨

*/


(原创不易,转载请注明出处!)


提示:目前微信公众号包含订阅号和服务号两种。详细区别官网有介绍,这里要说的是订阅号如果自己配置服务器url的话,是没有自定义菜单栏功能的,因此配置服务器url后只能接受用户的手动输入内容。而服务号需要企业认证,个人无法申请。


一、微信开发环境搭建

1.申请和配置微信公众平台

    微信公众平台已经提供了一个很便捷的开发配置方式,这里不在赘述,展示一下配置完的画面,

    切记,图中画红色圈的地方一定要点击启用,否则微信客户端的请求无法发送到我们配置的服务器地址。我在这里浪费了一早上的时间,醉了。。。。




2.微信请求的传递流程

    稍微解释一下,微信的服务器只是起到转发的作用,将手机客户端的请求转发到我们配置的服务器地址,就是上图看到URL地址。


3.服务器地址文件的编写

    这个才是开发的重点啊,下面先贴上本人编写的源码模板,可以直接使用的。

    首先是微信界面菜单栏设计的请求,将下面这个php文件放进随便一个php环境运行一下就可以了,目的是让它发出请求就好了。(订阅号配置url后没有权限,会返回失败

<?php

/* 以下两项可登陆微信公众平台查看 */
$appid = "******************";
$appsecret = "******************";

/* 菜单设计 */
$menu = array(
	'button' => array(
		array('name'=>'菜单一','sub_button'=>array(
                array('type'=>'click', 'name'=>'二级菜单', 'key'=>'13'),
                array('type'=>'view','name'=>'百度','url'=>'www.baidu.com'),
			)
		),
		array('name'=>'菜单二','sub_button'=>array(
            array('type'=>'view','name'=>'卡种查询','url'=>'www.baidu.com'),
			array('type'=>'click', 'name'=>'百度', 'key'=>'21'),
			)
		),
		array('name'=>'菜单三','sub_button'=>array(
			array('type'=>'view', 'name'=>'百度', 'url'=>'www.baidu.com'),
			)
		),
		)
	);
    
/* 发起更新菜单用的curl请求 */
function https_request($url,$data = null)
{
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
	if (!empty($data))
	{
		curl_setopt($curl, CURLOPT_POST, 1);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
	}
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	$output = curl_exec($curl);
	curl_close($curl);
	return $output;
}

/* 去除php版本的影响 */
function json_encode_ex($value)
{
    if (version_compare(PHP_VERSION,'5.4.0','<'))
    {
        $str = json_encode($value);
        $str = preg_replace_callback(
            "#\\\u([0-9a-f]{4})#i",
            function($matchs)
            {
                 return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));
            },
             $str
            );
        return $str;
    }
    else
    {
        return json_encode($value, JSON_UNESCAPED_UNICODE);
    }
}

/* 发起请求 */
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
$result = https_request($url);

$jsoninfo = json_decode($result, true);
$access_token = $jsoninfo["access_token"];
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
$jsonmenu = json_encode_ex($menu);
$result = https_request($url, $jsonmenu);
var_dump($result);

?>

接下来是前面配置的服务器url地址文件,就是那个index.php:(token要改成自己的

<?php

require "./menu.class.php";                 //引进回复的文件
define("TOKEN", "******");                  //设置token常量,这里是*号,要改成你自己在微信公众号平台设置的token

$wechatObj = new wechatCallbackapiTest();   //实例化wechatCallbackapiTest对象
//$wechatObj->valid();                      //验证消息来自微信服务器第一次使用就行
$wechatObj->responseMsg();                  //处理消息


class wechatCallbackapiTest
{

    /**
    * 接受处理微信服务器发送过来的消息
    */
    public function responseMsg()
    {
        /*获取post数据(XML类型)*/
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

		if(!empty($postStr)){//判断获取到的XML数据是否为空
                
            /* 解析XML数据 */
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            
            /* 获取发信方的用户名 */
            $fromUsername = $postObj->FromUserName;
            
            /* 获取消息类型(event 事件 | text 文本)*/
            $RX_TYPE = trim($postObj->MsgType);
            
            /* 根据 消息类型 进行跳转 */
            switch ($RX_TYPE)
            {
                //点击事件
                case "event":
                    $resultStr = $this->receiveEvent($postObj, $user);
                    break;
                    
                //文本输入事件
                case "text":
                    $resultStr = $this->receiveText($postObj, $user);
                    break;
                    
                //其他
                default:
                    $resultStr = "unknow msg type: ".$RX_TYPE;
                    break;
            }
        }else{
            //XML数据为空,do nothing...
        }
    }
    
    /**
    * 点击事件接口
    */
    protected function receiveEvent($postObj, $user){
        
        /* 获取收发方 */
        $fromUsername = $postObj->FromUserName;     //得到发送方名称
        $toUsername = $postObj->ToUserName;         //得到接收方的名称
        
        /*event事件的类型(subscribe 新用户订阅事件 | CLICK 点击回复请求 | VIEW 界面请求)*/
        $event_type = trim($postObj->Event);

        /* 生成一个menu对象,定义在menu.calss.php文件 */
        $menu=new menu();
        
        /*事件处理*/
        if($event_type == "subscribe"){//新用户订阅事件处理
            $sendData = array(
                "act"           => "asyn_send_adduser" ,
                "bind_openid"   => $fromUsername ,
                "bind_key"      => '147258' ,
            );
            $menu->Welcome_Words($fromUsername,$toUsername);//新用户欢迎词(我封装好的接口,后面会附上)
        }
        else if($event_type == "CLICK")
        {
            switch (trim($postObj->EventKey))//对用户请求的key进行筛选
            {
                case "13":
                    $data="Hi,你好~";
                    $result=$menu->Output_Text_Message($data,$fromUsername,$toUsername);
                    echo $result;
                    break;
                case "21":
                    $data="Hi,你好~";
                    $result=$menu->Output_Text_Message($data,$fromUsername,$toUsername);
                    echo $result;
                    break;
                default :
                    $data = "没有该菜单";	
                    $result=$menu->Output_Text_Message($data,$fromUsername,$toUsername);
                    echo $result;
                    break;
            }
            exit(1);
        }
    }
    
    
    /**
    * 文本消息事件接口
    */
    protected function receiveText($postObj, $user){
        
        /* 获取收发方 */
        $fromUsername = $postObj->FromUserName;     //得到发送方名称
        $toUsername = $postObj->ToUserName;         //得到接收方的名称

        /*获取当前时间*/
        $time = time();
        
        /* 生成一个menu对象,定义在menu.calss.php文件 */
        $menu=new menu();
        
        
        /*消息内容处理*/
        if(is_numeric($keyword))//用户输入了纯数字
        {
            $data="Hi,你输入了数字!";
            $result=$menu->Output_Text_Message($data,$fromUsername,$toUsername);
            echo $result;
        }
        else {//其他情况
            $data="Hi,你输入了其他内容!";
            $result=$menu->Output_Text_Message($data,$fromUsername,$toUsername);
            echo $result;
        }
    }
    
    
    /**
    * 验证消息是否来自微信服务器(入口)
    */
    protected function valid()
    {
        $echoStr = $_GET["echostr"];    //收集get数据(随机字符串)
        if($this->checkSignature()){    //判断checkSignature()自定义函数结果(验证微信服务器)
            echo $echoStr;              //为真则输出结果(随机字符串)
        }
    }

    
    /**
    * 验证消息是否来自微信服务器
    */
    private function checkSignature()
    {       
        $signature = $_GET["signature"];                //微信加密签名
        $timestamp = $_GET["timestamp"];                //时间戳
        $nonce = $_GET["nonce"];                        //随机数         
        $token = TOKEN;                                 //token与上面对应
        $tmpArr = array($token, $timestamp, $nonce);    //组装创建数组
        sort($tmpArr, SORT_STRING);                     //把$tmpArr做字符串处理并排序(升序)
        $tmpStr = implode( $tmpArr );                   //将数组变成字符串
        $tmpStr = sha1( $tmpStr );                      //计算字符串散列   
        if( $tmpStr == $signature ){    //判断是否一致
            return true;                //符合返回真
        }else{
            return false;               //否则返回假
        }
    }
    
}

?>
接下来是我封装好的menu类:

<?php
class menu
{
	/* 文本输出 */
	function Output_Text_Message($data,$fromUsername,$toUsername){
		$time = time();
		$msgType="text";
		$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>";
		$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $data);
        return $resultStr;
	}
    
    /* 新用户关注欢迎词 */
    function Welcome_Words($fromUsername,$toUsername)
    {
        $data = "欢迎关注福建通联支付,点击菜单进入更多功能哦~".$this->bytes_to_emoji(0x1F604);
        $resultStr=$this->Output_Text_Message($data,$fromUsername,$toUsername);
		echo $resultStr;
    }
    
    /* 错误信息提示 */
	function Input_Error($fromUsername,$toUsername)
	{
		$data="输入内容有误,请检查格式,重新输入哈~~~";
		$show=$this->Output_Text_Message($data,$fromUsername,$toUsername);
		return $show;

	}
    
    /* 字节转Emoji表情 */
    function bytes_to_emoji($cp)
    {
        if ($cp > 0x10000){       # 4 bytes
            return chr(0xF0 | (($cp & 0x1C0000) >> 18)).chr(0x80 | (($cp & 0x3F000) >> 12)).chr(0x80 | (($cp & 0xFC0) >> 6)).chr(0x80 | ($cp & 0x3F));
        }else if ($cp > 0x800){   # 3 bytes
            return chr(0xE0 | (($cp & 0xF000) >> 12)).chr(0x80 | (($cp & 0xFC0) >> 6)).chr(0x80 | ($cp & 0x3F));
        }else if ($cp > 0x80){    # 2 bytes
            return chr(0xC0 | (($cp & 0x7C0) >> 6)).chr(0x80 | ($cp & 0x3F));
        }else{                    # 1 byte
            return chr($cp);
        }
    }
}
?>
到此,一个完整的微信公众平台就搭建完成啦~


这个只是一个基本的框架,微信公众号还有很多的功能,这里就不一一描述啦,详细的可以看官方的文档,上链接:

微信公众号开发官方文档


有什么错误的还希望大伙儿提出来探讨一下哈~~~

(原创不易,转载请注明出处!)


2015-07-05 15:06:33 ycdyx 阅读数 2417
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

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

更多:http://www.webyang.net/Html/web/article_148.html

很多时候看到图文并茂、错落有致、优雅无比的图文消息,大多数不会HTML代码的小编总会羡慕不已。那有没有傻瓜式的编辑器呢?

也许另外一些人想必都知道微信编辑器了,很多运营微信公众平台的朋友都曾经对图文编辑排版都琢磨过,有人还有很多不知道微信编辑器怎么用,因此,本博主将教大家如何使用微信编辑器,了解微信编辑器更改网站的各个板块作用,让您的图文变得更有特色。

浏览器打开www.webyang.net/weixineditor,这个平台是由一个第三方技术团队开发的,据说工程师曾就职于百度、淘宝。

这个在线编辑器有十余款精美设计的模板供你选择,让你有个精彩的开始。每一个模板都具备精美协调的字体、颜色、质感和背景,只需短短几分钟,一切即可制作完成。



通过内置的近百种样式便捷操作,快速成型精美文章,可直接预览手机上的图文效果,进行可视化编辑

编辑的文章可保存到我的素材模板,下次打开,可继续编辑和应用。同时可将素材模板内容同步到微信公众账号(支持多个账号),或者直接复制粘贴到微信公众平台后台即可。

淘宝上看了下,也有很多卖这方面源码的,基本上买个下来就够用了,如果懂点技术,改成适合自己的,那就再完美不过了~

Tips:本源码购买地址=》https://shop125891474.taobao.com/

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