微信推送消息--发送模板消息

工具类,详见附件,下载地址:

http://files.cnblogs.com/files/007sx/weixin_util.zip

传的参数参考微信开发者文档-发送模板消息:

http://mp.weixin.qq.com/wiki/17/304c1885ea66dbedf7dc170d84999a9d.html#.E5.8F.91.E9.80.81.E6.A8.A1.E6.9D.BF.E6.B6.88.E6.81.AF

全局返回码说明:

http://mp.weixin.qq.com/wiki/17/fa4e1434e57290788bde25603fa2fcbd.html

package isa.qa.blep.admin.controller;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.google.gson.Gson;

import isa.qa.core.weixin.util.WeixinToken;
import net.sf.json.JSONObject;

@Controller
@RequestMapping(value = "/api")
public class WeixinMessageController {
    protected static Logger log = Logger.getLogger(WeixinMessageController.class);

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

    /**
     * 发送模板消息
     * @param send_url
     * @param map
     * @return
     */
    @RequestMapping(value = "/weixin/sendMessage/placeOrder",
            method = RequestMethod.POST,
            produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public JSONObject sendMessage(@RequestBody HashMap<String, Object> map) {
        JSONObject jsonObject = null;
        String strJson = mapToJson(map);

        try {
            String access_token = WeixinToken.getRecentToken();
            jsonObject = sendMessageUtil(send_url+access_token,strJson);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jsonObject;
    }

    /**
     * 将Map转化为Json
     *
     * @param map
     * @return String
     */
    public static <T> String mapToJson(Map<String, T> map) {
     Gson gson = new Gson();
     String jsonStr = gson.toJson(map);
     return jsonStr;
    }

    /**
     * 发送post请求
     * @param url
     * @throws Exception
     */
    public static JSONObject sendMessageUtil(String send_url,String strJson) throws Exception {
        StringBuffer sb = new StringBuffer("");
        JSONObject jsonObject = null;
        try{
            //创建连接
            URL url = new URL(send_url);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setRequestMethod("POST");
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);

            //connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
            connection.setRequestProperty("Content-Type","application/json; charset=UTF-8");       

            connection.connect();

            //POST请求
            DataOutputStream out = new DataOutputStream(connection.getOutputStream());
            out.write(strJson.getBytes("UTF-8"));//这样可以处理中文乱码问题
            out.flush();
            out.close();

            //读取响应
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String lines;
            while ((lines = reader.readLine()) != null) {
                lines = new String(lines.getBytes(), "utf-8");
                sb.append(lines);
            }
            System.out.println(sb);
            reader.close();
             jsonObject = JSONObject.fromObject(sb.toString());
             if(jsonObject.get("errcode").equals("0")){
                 throw new Exception(jsonObject.getString("errmsg"));
             }
            // 断开连接
            connection.disconnect();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return jsonObject;
    }
}

传后台:

      {
           "touser":"oL0VOuBXNdeK6J0aFh0RB6A6LTjI",
           "template_id":"w-6o1rsYobEzI2qYfbEocKQ5wewF7bhNJctiGg7J8Fg",
           "url":"http://weixin.qq.com/download",
           "data":{
                   "first": {
                       "value":"恭喜你购买成功!",
                       "color":"#173177"
                   },
                   "keynote1":{
                       "value":"巧克力",
                       "color":"#173177"
                   },
                   "keynote2": {
                       "value":"39.8元",
                       "color":"#173177"
                   },
                   "keynote3": {
                       "value":"2014年9月22日",
                       "color":"#173177"
                   },
                   "remark":{
                       "value":"欢迎再次购买!",
                       "color":"#173177"
                   }
           }
       }

发送成功的返回值:

{
   "errcode": 0,
   "errmsg": "ok",
   "msgid": 540227432
}
时间: 2024-11-26 03:25:12

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

.net开发微信公众号(3)-接收微信推送的消息

接收微信推送的消息 一.消息发送发式 用户发送的消息会被微信服务器转发到开发者服务器上(启动开发者模式时填的那个URL),开发者服务器接收到消息并处理完成会把消息再发回给微信服务器,再由微信服务器推送给用户.流程也非常简单. 二.接收消息分类 根据微信官方的文档说明,把接收消息分成两类: 1.普通消息 2.事件消息 事件消息除了这6种以为,还有一种是发送模板消息后返回的结果. 三.消息处理 接下来我们看下这些消息如何处理. 首先,做消息有效性验证.上一篇我们已经写了验证的方法,在这里直接用就行了

微信推送模板消息的PHP代码整理

最近做过一个需要推送消息的系统,就研究了一下微信的模板消息的推送.由于认证过的微信号,就用测试号做的,但是过程基本一致. 本文基于微信平台的官方文档写成,http://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=tmplmsg/faq_tmpl 首先,得在微信的后台管理中设置一下,模板消息的格式,获取到一个模板消息的id {{first.DATA}} 被撕的人:{{name.DATA}} 被撕人的组别:{{zu.DATA}} 被撕时间:{{time.DAT

微信小程序发送模板消息(最通俗易懂)

公司需要用到微信小程序推送   经过一下午的资料查阅,得出以下经验. 首先得去微信公众平台小程序的模板消息  创建模板  也能通过接口去创建,但是我觉得挺麻烦的  还不如去后台创建 下面是我写的测试代码,只有具体数据都是测试的模拟数据,实际业务肯定需要拿到业务数据,大家后面可以自我发挥. 对了,还有一点,电脑的小程序的开发工具是拿不到formid 的  会提示 the formId is a mock one ,只能用手机测试才能拿到formid 下面看代码吧: 这个是前台页面 1 <butto

微信推送消息实战

# 沙箱环境登录地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login # 微信网页授权地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 第一步:获取认证信息.测试模板.等 第二步:后端代码: 1.获取二维码网址: def bind_qcode(request): """ 生成二维码 :param requ

借助云开发实现小程序订阅消息(模板消息)推送功能

之前的模板消息推送,将在2020年1月10日下线,所以我们不得不使用订阅消息了. 我们先来看下订阅消息的官方简介.接下来我们就来借助云开发,来快速实现小程序消息推送的功能. 一:获取模板 ID 这一步和我们之前的模板消息推送是一样的,也是先添加模板,然后拿到模板id首先是开通订阅消息功能,很简单,如下图由于长期性订阅消息,目前仅向政务民生.医疗.交通.金融.教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务.仅就线下公共服务这一点,长期性订阅消息就和大部分开发者无缘了.所以我们这里只能

免注册公众号的三种微信推送消息服务的C#代码实现

有时候我们需要监控一些网络上的变化,但是每次去刷新网页却又很麻烦,而且大部分刷新的时候网页并没有更新.那么有没有一个工具,可以监控网页变化,并将变化的结果推送到手机微信上呢? 这里有很多应用场景,比如前一段时间很火的工具来监控JD.TB等口罩是否有货的状态.还有就是刷票.抢课.监听网页便也变化.爬虫等等. 我们可以在后台写一个监控程序,一旦口罩有货了,就立马推送消息到微信上. 有人会说这样的方式,微信公众号可以实现啊,那么为什么要你介绍? 不不不,注册微信公众号后,还要阅读官方的各种文档,反复调

微信小程序-发送模板消息(C#)

步骤一:获取模板ID 有两个方法可以获取模版ID 通过模版消息管理接口获取模版ID 在微信公众平台手动配置获取模版ID 步骤二:页面的 <form/> 组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息.或者当用户完成支付行为,可以获取prepay_id用于发送模板消息. 步骤三:调用接口下发模板消息 今天重要的说第三步怎么实现,前面的步骤比较简单就略过. ----------------------------

JAVA微信公众号通过openid发送模板消息~

1,问题产生 在微信公众号开发过程中,我们有时候做不同权限的时候,比如在注册的时候,需要审核,然后我们要想办法让对方知道审核的结果.这时候我们可以通过模板消息来通知. 2,第一步,首先在微信公众号上获取模板消息 首先,登录微信公众平台,看有没有模板消息这一块,没有的话点击添加功能插件,去添加,这里就省略不说了,这个主要就是选择你公众号的行业对应的模板消息,然后通过审核之后就可以使用了,说是几个工作日 但是一般很快就审核通过的. 有模板消息之后点进来,对应自己所需要的模板消息进行添加,比如,我添加

shell使用微信公众号发送模板消息

1.配置微信公众号 由于没有认证的公众号,只能通过自己申请的个人订阅号(可以自行申请),并到开发者工具中开通公众平台测试帐号实现该功能. 1.获取测试公众号appID和appsecret *2.关注测试号二维码获取用户openid 3.新增模板获取模板ID 得到模板id: OA0PX8pqc2X7t_y05y5GxZ8LutBpu341FIYSeQOkno 2.通过脚本实现消息发送 #!/bin/sh # 微信消息发送脚本 zhutw #全局配置-- #微信公众号appID appID=wxe1