2017-01-22 11:56:29 u014783753 阅读数 708
  • 微信公众平台模板消息开发-微信开发14(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信公众平台模板消息开发是子恒老师《子恒说微信开发》视频教程的第14部。详细讲解了用php开发微信公众平台模板消息。内容包含设置模板所属行业,获取微信模板ID,用公众号发送微信模板消息等等。欢迎反馈,微信号:QQ68183131

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


为支撑公司业务,需要使用微信的模板消息,于是乎进行了下相关的调研,现将调研内容进行如下记录。

首先微信模板消息没有创建模板消息的接口。更新模板消息有两种方式(个人理解):

1、修改行业,然后选择微信已经提供的模板,限制有如下两点:

  a、一个月只能修改一次行业;

  b、即使修改行业,也不一定找到合适的模板;

2、自定义模板:

   从模板库中添加->帮助我们完善模板库(右上角)

    限制:

   a、需要审核;

   b、每个月只能提交三个;


以上介绍了创建模板的问题,现在我们讲解发送模板:

发送模板首先需要有模板消息,不论是从模板中创建的模板消息或是自定义的模板消息,需要获取对应模板的id

或者在后台写死,或者根据获取模板列表中获得模板id

这里我们直接写死模板的id,这个可以在微信公众号的模板详情中直接看到。

第二个需要注意的是openid即我需要发送给哪个用户,这个openid需要注意的是根据微信的规则,openid是和公众号绑定的,即相同的用户在不同的公众号中的openid是不一致的。


有了以上两个概念,我们明确了套用哪个模板给哪个用户发送消息。

下边我们讲解过程。

1、根据appid和secret需要选取accesstoken;

2、根据accesstoken和以上的两个概念封装我们的业务数据进行发送;


java代码如下(HttpClient):

换取accesstoken:

	HttpUriRequest request = RequestBuilder.get()
				.setUri("https://api.weixin.qq.com/cgi-bin/token")
				.addParameter("grant_type","client_credential")
				.addParameter("appid",appid)
				.addParameter("secret",secret)
				.build();
      execute (request)


未完待续。。。

2018-01-02 09:18:52 spfLinux 阅读数 354
  • 微信公众平台模板消息开发-微信开发14(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信公众平台模板消息开发是子恒老师《子恒说微信开发》视频教程的第14部。详细讲解了用php开发微信公众平台模板消息。内容包含设置模板所属行业,获取微信模板ID,用公众号发送微信模板消息等等。欢迎反馈,微信号:QQ68183131

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

很奇怪,装了新版本的微信开发者工具,使用模板代码,反而报错。后来百度,发现这样一个解决方案,就ok了。

点击打开链接


2017-03-11 12:44:18 zyw_java 阅读数 7265
  • 微信公众平台模板消息开发-微信开发14(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信公众平台模板消息开发是子恒老师《子恒说微信开发》视频教程的第14部。详细讲解了用php开发微信公众平台模板消息。内容包含设置模板所属行业,获取微信模板ID,用公众号发送微信模板消息等等。欢迎反馈,微信号:QQ68183131

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

欢迎留言、转发

微信极速开发系列文章:点击这里

最近有点小感冒,文章的更新进度延误了一些,希望此系列文章对你研究微信公众开发有帮助。前几篇文章介绍了微信支付。 公众号支付微信扫码支付刷卡支付微信买单

此文来聊聊微信中的业务通知—-微信模板消息

如何查看是否有权限

在交流群中,总是有人问个人订阅号认证的订阅号服务号认证的服务号 某个接口是否有权限使用。

其实这个问题很简单,在【微信公众平台】现在已经可以直接查看自己的公众号都能使用那些接口。

登录【微信公众平台】进入首页>开发>接口权限

模板消息-权限.png

添加模板消息插件

注意必须是认证的服务号

登录【微信公众平台】进入首页>添加插件功能>找到模板消息按照指引流程操作即可。

模板消息接口使用规则

官方文档 发送消息-模板消息接口 以及 模板消息运营规范

关于使用规则,请注意:
1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限;
2、需要选择公众账号服务所处的2个行业,每月可更改1次所选行业;
3、在所选择行业的模板库中选用已有的模板进行调用;
4、每个账号可以同时使用25个模板。
5、当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制。【2014年11月18日将接口调用频率从默认的日1万次提升为日10万次,可在MP登录后的开发者中心查看】。当账号粉丝数超过10W/100W/1000W时,模板消息的日调用上限会相应提升,以公众号MP后台开发者中心页面中标明的数字为准。

添加模板消息

按照上文添加模板消息插件之后【微信公众平台】首页左侧栏就会出现模板消息菜单,收取点击进去需要同意协议并设置公众账号服务所处的2个行业。

以上设置好了就可以通过关键词查模板库中已有的模板,如果没有找到可以自己申请。

模板消息-添加模板.png

找到合适的模板消息点击详情,进去查看模板详情,如果需要添加即可。添加完成会在我的模板中生成模板消息的 模板ID模板ID在后面会用到。

模板消息-模板详情.png

测试号添加模板消息

测试号添加模板消息.png

测试号添加模板消息.png

模板消息接口的使用

客观前面都是一些准备工作,端杯茶耐心往下看。先来点实际的看看开源项目中封装的接口是如何使用的。

com.javen.weixin.controller.WeixinMsgController.java

模板消息的使用.png

接收到的通知

模板消息的封装

官方参考文档 具体实现 com.jfinal.weixin.sdk.api.TemplateMsgApi.java

public class TemplateMsgApi {

    private static String sendApiUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";

    /**
     * 发送模板消息
     * @param jsonStr json字符串
     * @return {ApiResult}
     */
    public static ApiResult send(String jsonStr) {
        String jsonResult = HttpUtils.post(sendApiUrl + AccessTokenApi.getAccessToken().getAccessToken(), jsonStr);
        return new ApiResult(jsonResult);
    }
}

json数据的封装

com.jfinal.weixin.sdk.api.TemplateData.java

public class TemplateData {

    private String touser;
    private String template_id;
    private String url;
    private String topcolor;
    private TemplateItem data;

    public static TemplateData New() {
        return new TemplateData();
    }

    private TemplateData() {
        this.data = new TemplateItem();
    }

    public String getTouser() {
        return touser;
    }

    public TemplateData setTouser(String touser) {
        this.touser = touser;
        return this;
    }

    public String getTemplate_id() {
        return template_id;
    }

    public TemplateData setTemplate_id(String template_id) {
        this.template_id = template_id;
        return this;
    }

    public String getUrl() {
        return url;
    }

    public TemplateData setUrl(String url) {
        this.url = url;
        return this;
    }

    public String getTopcolor() {
        return topcolor;
    }

    public TemplateData setTopcolor(String topcolor) {
        this.topcolor = topcolor;
        return this;
    }

    public TemplateItem getData() {
        return data;
    }

    public TemplateData add(String key, String value, String color){
        data.put(key, new Item(value, color));
        return this;
    }

    /**
     * 直接转化成jsonString
     * @return {String}
     */
    public String build() {
        return JsonUtils.toJson(this);
    }

    public class TemplateItem extends HashMap<String, Item> {

        private static final long serialVersionUID = -3728490424738325020L;

        public TemplateItem() {}

        public TemplateItem(String key, Item item) {
            this.put(key, item);
        }
    }

    public class Item {
        private Object value;
        private String color;

        public Object getValue() {
            return value;
        }
        public void setValue(Object value) {
            this.value = value;
        }
        public String getColor() {
            return color;
        }
        public void setColor(String color) {
            this.color = color;
        }

        public Item(Object value, String color) {
            this.value = value;
            this.color = color;
        }
    }
}

欢迎留言、转发
微信极速开发系列文章:http://www.jianshu.com/p/a172a1b69fdd

此文章项目开源地址:极速开发微信公众号-Start支持项目发展

2016-12-27 16:31:38 getluo 阅读数 1358
  • 微信公众平台模板消息开发-微信开发14(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信公众平台模板消息开发是子恒老师《子恒说微信开发》视频教程的第14部。详细讲解了用php开发微信公众平台模板消息。内容包含设置模板所属行业,获取微信模板ID,用公众号发送微信模板消息等等。欢迎反馈,微信号:QQ68183131

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

首先需要公众号有模板消息的权限,这里不多说明了。


要实现的功能就是在第三方网站通过调用接口在对给用户发消息,当然也可以给用户标签组群发消息。


获取access_token代码:

$weixin_appid = "";
$weixin_secret = "";
$weixin_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$weixin_appid."&secret=".$weixin_secret;
$weixin_return = get_url_contents ( $weixin_url );
$weixin = json_decode ( $weixin_return );
$access_token = $weixin->access_token;
//模板ID
$template_id = "";

发送消息代码:

				$dataarray = array(
						"touser"=>$openid,//用户的openid
						"template_id"=>$template_id,//消息模板id
						"url"=>$_POST['yanbao_url'],
						"data"=>array(
						    "first"=>array(
				                       "value"=>$_POST['yanbao_title'],
				                       "color"=>"#173177"
				                    ),
				                    "keyword1"=>array(
				                       "value"=>$_POST['yanbao_name'],
				                       "color"=>"#173177"
				                    ),
				                    "keyword2"=>array(
				                       "value"=>$_POST['yanbao_desc'],
				                       "color"=>"#173177"
				                    ),
				                    "remark"=>array(
				                       "value"=>$_POST['yanbao_more'],
				                       "color"=>"#173177"
				                    )
								)
				            );
				$data = json_encode($dataarray);
				$output = json_decode(do_post($url,$data));//do_post是模拟post的函数,请自行定义
				if($output->errcode == '0'){
					echo '<div class="updated"><p>发送成功!</p></div>';
				}else{
					echo '<div class="error"><p>发送失败!错误码:'.$output->errcode.'</p></div>';
				}

获取用户标签代码:

				<tr valign="top">
					<th scope="row"><label>用户标签</label></th>
					<td>
						<select name="yanbao_user_tag" id="yanbao_user_tag" style="min-width: 150px">
							<option value="">请选择</option>
							<option value="all">所有用户</option>
							<?php 
								$yanbao_user_tag_url = "https://api.weixin.qq.com/cgi-bin/tags/get?access_token=".$access_token;
								$yanbao_user_tag_return = get_url_contents ( $yanbao_user_tag_url );
								$yanbao_user_tag = json_decode ( $yanbao_user_tag_return );
								$tags = $yanbao_user_tag->tags;
								foreach ($tags as $tag) {
									echo '<option value="'.$tag->id.'">'.$tag->name.'('.$tag->count.')</option>';
								}
							?>		
						</select>
						<span class="description">(选择了用户标签就是<strong>群发</strong>给该标签下的用户)</span>
					</td>
				</tr>

获取用户代码:

<tr valign="top">
					<th scope="row"><label>用户</label></th>
					<td>
						<select name="yanbao_user" id="yanbao_user">
							<option selected="selected" value="">请选择</option>
							<?php 
								/*
								$yanbao_user_url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$access_token."&next_openid=";
								$yanbao_user_return = get_url_contents ( $yanbao_user_url );
								$yanbao_user = json_decode ( $yanbao_user_return );
								$openids = $yanbao_user->data->openid;
								foreach ($openids as $openid) {
									$added_user = Moge_check_weixin_user_added($openid);
									if($added_user){
										echo '<option value="'.$openid.'">'.$added_user->nickname.'</option>';
									}else{
										$user = Moge_weixin_get_user_info($access_token,$openid);
										$wpdb->query("insert into ".$wpdb->prefix."erphp_weixin_users (openid,nickname) values('".$openid."','".$user->nickname."')");
										echo '<option value="'.$openid.'">'.$user->nickname.'</option>';
									}
								}*/
								
								$weixin_users = Moge_get_weixin_users();//获取本地数据库里的微信用户函数
								if($weixin_users){
									foreach ($weixin_users as $user) {
										echo '<option value="'.$user->openid.'">'.$user->nickname.'</option>';
									}
								}
								
							?>
						</select>
						<span class="description">(若已选择了用户标签,此项选择就无效了。)</span>
					</td>
				</tr>


这里主要遇到一个问题就是如果高效快速的获取用户列表的昵称(nickname),通过以下的接口

https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID

只能获取用户的openid,我尝试过针对每个用户获取其详细资料,结果页面直接卡死了(用户数量太多)。虽然看到有批量获取资料,但是不适合用,最后没办法,只能先循环获取然后存在本地数据库,定期获取更新下数据库了,有个弊端就是取消关注的人还是会在本地数据库里。

2019-01-22 10:44:06 cl11992 阅读数 239
  • 微信公众平台模板消息开发-微信开发14(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信公众平台模板消息开发是子恒老师《子恒说微信开发》视频教程的第14部。详细讲解了用php开发微信公众平台模板消息。内容包含设置模板所属行业,获取微信模板ID,用公众号发送微信模板消息等等。欢迎反馈,微信号:QQ68183131

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

一、介绍

微信支持根据模板id给微信某一个公众号的某一个用户发送模板消息

二、注意

  1. 发送模板消息使用access_token是普通access_token
  2. 下方代码使用的url如果不传,发送模板消息的时候,无法点击跳转。只有传url,才可以点击跳转

三、微信支持的模板消息

四、代码实例

MessageData.java

public class MessageData {

	TemplateData first;
	
	TemplateData keyword1;
	
	TemplateData keyword2;
	
	TemplateData keyword3;
	
	TemplateData remark;

	public TemplateData getFirst() {
		return first;
	}

	public void setFirst(TemplateData first) {
		this.first = first;
	}

	public TemplateData getKeyword1() {
		return keyword1;
	}

	public void setKeyword1(TemplateData keyword1) {
		this.keyword1 = keyword1;
	}

	public TemplateData getKeyword2() {
		return keyword2;
	}

	public void setKeyword2(TemplateData keyword2) {
		this.keyword2 = keyword2;
	}

	public TemplateData getKeyword3() {
		return keyword3;
	}

	public void setKeyword3(TemplateData keyword3) {
		this.keyword3 = keyword3;
	}

	public TemplateData getRemark() {
		return remark;
	}

	public void setRemark(TemplateData remark) {
		this.remark = remark;
	}
}

下面代码需要的类

AccessTokenUtils:https://blog.csdn.net/cl11992/article/details/86304653

UrlConUtil:https://blog.csdn.net/cl11992/article/details/86303800

public void messageTemplateSend(String url, MessageData data, String appid, String openId, String templateid) throws Exception {
	//获取access_token
	Map<String, String> accessTokenMap = AccessTokenUtils.getAccessToken;
	String token = accessTokenMap("access_token");
	String msgurl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + token;
	Template temp = new Template();
	temp.setUrl(url);
	temp.setTouser(openId);
	temp.setTopcolor("#000000");
	if (StringUtils.isBlank(templateid)) {
		logger.error("-------------请配置" + appid + "的模板ID-------------");
		return;
	}
	temp.setTemplate_id(templateid);
	temp.setData(data);
	String jsonString = JSONObject.toJSONString(temp).toString();
	JSONObject jsonObject = UrlConUtil.httpsRequest(msgurl, "POST", jsonString);
	int result = 0;
	if (null != jsonObject) {
		if (0 != jsonObject.getIntValue("errcode")) {
			result = jsonObject.getIntValue("errcode");
			logger.error("错误 errcode:{} errmsg:{}", jsonObject.getIntValue("errcode"), jsonObject.getString("errmsg"));
		}
	} else {
		logger.info("模板消息发送结果:无返回信息");
	}
	logger.info("模板消息发送结果:" + result);
}

 

微信模板消息详解

阅读数 477

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