微信模板消息发送

整个开发流程,我在“简书” 上看到了一个完整的开发流程。

https://www.jianshu.com/p/eb0e9c4dcdfe

微信官方接口为:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277

自己开发中总结了一下,如下,方便后续备查:

①微信的模板消息,其实是微信公众号上推送给用户的一条消息记录。

在开发的时候,需要获取到用户的openId(用户关注公众号就会产生一个唯一的openId),然后通过openId 推送给对应的用户,这样用户就能收到这条消息了。

②订阅号必须升级为服务号才能获取“模板消息” 的接口权限,并且必须通过认证。(服务号接功能更多,但是群发消息由订阅号的每天一条变成了一个月4条。)

③开通模板消息的时候会让我们选择2个行业,并且每月只能修改一次。我们可以搜索模板,直接使用通用模板。如果我们需要自定义模板,那么就需要自己申请。

④微信公众号的tokenId,有效期只有2个小时,所以我们需要采用定时器每一个小时50分钟去获取一次,同时,在程序启动完成之后要获取一次。

⑤系统用户登录的时候我们就判断是否有openId,如果没有,那么就去获取openId 。(我们OA系统是开发在微信公众号里面的,所以用户登录系统前就已经关注了公众号)

登录接口调用成功后,调用首页接口,接口中判断如果没有openId,那么就跳转到A接口(微信需要的接口去获取openId,然后存入表中),A接口最后再次请求首页,这时已经有OpenId了,那么直接展示首页内容。

微信模板消息开发流程:
①微信用户点击登录调用loginController中的login_login_wechat
成功后调用weixin_index

 /**访问系统首页·微信版
	 * @param changeMenu:切换菜单参数
	 * @return
	 */
	@RequestMapping(value="/weixin_index")
	public ModelAndView login_weixin_index(HttpServletRequest request,HttpServletResponse response){
		ModelAndView mv = this.getModelAndView();
		PageData pd = new PageData();
		pd = this.getPageData();
		try{
			Session session = Jurisdiction.getSession();
			User user = (User)session.getAttribute(Const.sessionUser);				//读取session中的用户信息(单独用户信息)
			if (user != null && user.getRole()!=null && !user.getRole().getRights().trim().equals("")) {
				session.setAttribute(Const.sessionUserName, user.getUserName());				//放入用户名到session
				this.getRemortIP(user.getUserName());	//更新登录IP
				mv.setViewName("weixin/index/main");
				mv.addObject("user", user);

				/*
				 * 登录后,如果openId为空,则保存openId到用户表中 TODO
				 */
//				String weixinOpenId = user.getWeixinOpenId();
//				if(Tools.isEmpty(weixinOpenId)){
//					String ssString = WechatUtils.getUserAuthURL(true,
//							weixinConstant.wReturnPrefix + request.getContextPath()
//							+ "/wechatLoginNoOpenId.do","0");
//					response.sendRedirect(ssString);
//				}

				// 我的待办·待审核数量
				String userId = user.getId();
				List<DBTodo> todoList  = new ArrayList<>();
				//登录人待办
 
			}else {
				mv.setViewName("weixin/index/login");//session失效后跳转登录页面
			}
		} catch(Exception e){
			mv.setViewName("weixin/index/login");
			logger.error(e.getMessage(), e);
		}

		mv.addObject("pd",pd);
		return mv;
	}

/**
	 * 微信登录,没有openId
	 * @return
	 */
	@RequestMapping(value="/wechatLoginNoOpenId")
	@ResponseBody
	public void wechatLoginNoOpenId(HttpServletRequest request,HttpServletResponse response){
		try {
			String code = ServletRequestUtils.getStringParameter(request, "code");
			String result = WechatUtils.getUserOpenId(code);
			if (result != null) {
				JSONObject jSONObject = JSONObject.fromObject(result);
				String openId = jSONObject.getString("openid");
				System.err.println("======================当前登录用户登录微信openId:"+openId);
				User user =(User)Jurisdiction.getSession().getAttribute(Const.sessionUser);
				user.setWeixinOpenId(openId);
				userService.editU(user);
				//再次请求微信首页,这次openId已经有值了直接进入首页
				response.sendRedirect(weixinConstant.wReturnPrefix + request.getContextPath()
				+ "/weixin_index.do");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

web.xml 中
系统系统完成后获取一次微信的tokenId。

  <!-- 程序启动完成执行-->
  <!-- <servlet>  
    <servlet-name>init</servlet-name>  
    <servlet-class>com.kentra.listener.WebAppInitListener</servlet-class>  
    <load-on-startup>3</load-on-startup>
  </servlet> -->

模板消息的发送示例,请参考 InformController.java 中的goSend方法

或WechatUtils.java 中的main方法。

原文地址:http://blog.51cto.com/jianboli/2057418

时间: 2024-08-27 16:30:38

微信模板消息发送的相关文章

微信模板消息接口-给用户发送订单成功信息/支付成功等等

微信模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息. <?php //curl模拟请求发送信息 function send_template_message($data,$access_token){ //return $data.'----'.$access_token; //$access_token = get_access_token($appId,$appSe

微信模板消息

以下文档只适合新手,如果你已经是一个微信开发的老鸟 就不用浪费时间阅读了: 需求分析:昨天晚上 有几个人在上一期的微信活动中 中奖了,领导给了一个案例说发送一条 微信模板消息 实现步骤: 1.查阅相关接口资料 以下内容提取 微信官方文档 模板消息调用时主要需要模板ID和模板中各参数的赋值内容: 模板中参数内容必须以".DATA"结尾,否则视为保留字: 模板保留符号"{{ }}"当我读到这里时候仍旧是一脸懵逼的样子,完全不知所云,于是接着往下看 到此 官方文档已看完,

C# MVC 微信支付之微信模板消息推送

微信支付之微信模板消息推送 今天我要跟大家分享的是"模板消息"的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不牛逼吗?现在的社会,人多多少少都有或轻或重的"强迫症".就是,看到有未读消息,都要去看一下.特别是现在的微信,大部分可以几个小时不看手机QQ有没有新消息来,但是这大部分人绝对做不到一个小时不看微信有没有消息来.现在的微信,真特么是神一样的存在,几乎人人手机上都会有微信.而且,如果你的公众号是服务号的话,这个

php实现微信模板消息推送

转自:https://www.jb51.net/article/137428.htm 这篇文章主要为大家详细介绍了php实现微信模板消息推送,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了php微信模板消息推送的具体代码,供大家参考,具体内容如下 1.微信公众号模板消息配置 2.PHP代码 /** * 发送模板消息 */ public function send_notice(){ //获取access_token if ($_COOKIE['access_token']

微信模板消息下线后订阅消息是否可以满足各行业通知提醒

微信模板消息下线后订阅消息是否可以满足各行业通知提醒,如何在短信平台和订阅号直接选择一个最佳方案? 一.青鸟报修云工单提醒短信业务及微信订阅消息选择思考 作为工单系统如何科学合理解决用户.技术员.管理员之间的信息提醒对于青鸟报修云工单系统是一种挑战,新版本2.0采用微信消息模板,但在4月10号官方下线模板消息,经平台进行用户调查最终只有2个选择,平台引用第三方短信平台或调整为订阅消息,今天简单做一个对比: 方案选择:订阅消息 三.选择理由1.短信提醒:弊端短信通知要帮助用户充值,单独开户,显示余

在测试环境发送 微信模板消息 调试 --Sangit

一.如何在测试环境发送 1.强制access_token,把正式公众号的token写到测试环境代码,发送模板消息微信只根据access_token来判断公众号 2.同时把测试用户在正式环境的openid也写到测试环境的代码 二.如何查看模板消息是否发送成功 因为系统发送模板消息用的是 swoole服务 来监听发送,所以需要通过 strace命令 追踪进程状态信息 1.通过ps命令查看进程的pid 2.通过strace命令追踪进程 3.然后调用发送模板消息,可以看到追踪进程 发送的数据与返回值,可

发送微信模板消息 已测试通过

public function http_request_json($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = c

Django后端发送小程序微信模板消息(服务通知)

模板消息 官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/template-message/templateMessage.send.html 模板消息如下图所示 Django中获取access_token 根据文档描述,获取access_token文档,后端必须获取一个access_token才能够发送模板消息,文档中说明该token有效期为两小时,需要后端定时去获取.我们这里使用Django

使用python实现微信模板消息

#!/usr/bin/env python #-*- coding:utf-8 -*- import urllib2,json import datetime,time from config import * import sys reload(sys) sys.setdefaultencoding("utf-8") class WechatPush():     def __init__(self,appid,secrect,file_name):         # 传入appi