微信服务号发送模板消息

本文介绍了一种使用Java实现的微信服务号模板消息发送机制,通过获取access_token并构造请求参数,向指定用户发送不同类型的模板消息,包括隐患提醒、任务指派、流程待审批和质量排查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微信服务号发送模板消息

 

 

package org.liufeng.course.servlet;



import java.io.IOException;



import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;



import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import net.sf.json.JSONString;



import org.liufeng.course.pojo.Token;

import org.liufeng.course.util.AdvancedUtil;

import org.liufeng.course.util.CommonUtil;

import org.liufeng.course.util.UserConfig;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;



/**

 * 发送模板消息

 * @author Administrator

 */

public class TemplateServlet extends HttpServlet {



    private static final long serialVersionUID = 3493133031468141822L;

    

    private static Logger log = LoggerFactory.getLogger(TemplateServlet.class);

    

    //接收后端推送消息

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");

        response.setCharacterEncoding("utf-8");



        HttpSession session = request.getSession();

        //获取请求参数

        String openId = (String)request.getParameter("openId");

        String data = (String)request.getParameter("data");

        String type = (String)request.getParameter("type");

        //获取服务器地址

        String url = request.getRequestURL().toString();

        url = url.substring(0, url.lastIndexOf("/")+1);

        //获取新的token

        Token token = CommonUtil.getToken(UserConfig.APPID, UserConfig.SECRET);

        if(token!=null){

            session.setAttribute("access_token", token.getAccessToken());

            send(openId,token.getAccessToken(),url,data,type);

        }else{

            log.info("获取access_token异常");

        }

    }

    

    /**

     * 发送模板消息接口

     * @param openId 用户的openid

     * @param access_token 调用接口凭证

     * @param url 服务器地址

     * @param data 模板数据

     * @param type 模板类型(1隐患 2任务 3审批 4质量排查)

     */

    public void send(String openId, String access_token, String url, String data, String type){

        //拼模板请求参数

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

        String param = "{\"touser\":\"TOUSER\",\"template_id\":\"TEMPLATE_ID\","

                + "\"url\":\"URL\",\"data\":DATA}";

        param = param.replace("TOUSER", openId);//接收者openid

        param = param.replace("URL", url+"showTemplateServlet?title="+JSONObject.fromObject(data).getString("first"));//模板跳转链接

        

        switch (type) {

            case "1"://隐患提醒

                param = param.replace("TEMPLATE_ID", UserConfig.YINHUAN_TEMPLATE_ID);//模板ID

                break;

            case "2"://任务指派

                param = param.replace("TEMPLATE_ID", UserConfig.RENWU_TEMPLATE_ID);//模板ID

                break;

            case "3"://流程待审批

                param = param.replace("TEMPLATE_ID", UserConfig.SHENPI_TEMPLATE_ID);//模板ID

                break;

            case "4"://质量排查

                param = param.replace("TEMPLATE_ID", UserConfig.PAICHA_TEMPLATE_ID);//模板ID

                break;

            default:

                log.info("推送消息的类型不存在");

                break;

        }

        param = param.replace("DATA", data);

        

//        param = param.replace("DATA", "{\"first\":{\"value\":\"隐患提醒\"},\"keyword1\":{\"value\":\"C 机电\"},\"keyword2\":{\"value\":\"3-5#层运大巷内无交通管控信号。\"},\"keyword3\":{\"value\":\"已联系厂家制作,预计10月底完工。\"},\"keyword4\":{\"value\":\"2017-07-03\"},\"keyword5\":{\"value\":\"孙荣廷(机二队)\"},\"remark\":{\"value\":\"该隐患暂未销号\"}}");//模板数据

        

        System.out.println(requestUrl);

        System.out.println(param);

        //发送模板消息

//        JSONObject jsonObject = CommonUtil.sendPost(requestUrl, param);

        JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "POST", param);

        int errorCode     = jsonObject.getInt("errcode");

        String errorMsg = jsonObject.getString("errmsg");

        String msgid = jsonObject.getString("msgid");

        log.info("已调用模板消息接口 errcode:"+errorCode+", errmsg:"+errorMsg+", msgid:"+msgid);

    }



}

 

posted @ 2018-10-10 10:35 花生福 阅读( ...) 评论( ...) 编辑 收藏
### 微信小程序调用API发送服务号模板消息 为了实现从小程序向用户的服务号发送模板消息的功能,需遵循特定的开发流程。此功能依赖于微信公众平台所提供的接口支持。 #### 准备工作 确保已拥有经过认证的服务号,并获取到相应的`AppID` 和 `AppSecret` 。这些信息用于后续请求访问令牌所需的身份验证[^1]。 #### 获取access_token 每次发送模板消息前都需要先取得有效的`access_token` ,这是调用微信开放平台上各类接口的基础凭证之一。可以通过HTTP GET方式请求如下URL来获得: ```http https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET ``` 其中`APPID`和`APPSECRET`应替换为实际应用对应的值。成功响应会返回JSON格式的数据包,内含所需的`access_token`字段。 #### 构建并发送模板消息 构建要发送消息体结构,具体参数说明可参见官方文档。下面给出Python语言下的简单示例代码片段展示如何构造POST请求以触发消息推送行为: ```python import requests import json url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=TOKEN" data = { "touser": "OPENID", "template_id": "TEMPLATE_ID", "page": "index", "form_id": "FORMID", "data": { "keyword1": {"value": "商品名称"}, "keyword2": {"value": "订单金额"} } } response = requests.post(url, data=json.dumps(data)) print(response.json()) ``` 注意以上代码中的变量均需替换成真实环境里的对应值,比如用户的OpenID、表单id以及具体的关键词内容等。此外,在正式环境中建议加入错误处理逻辑以便更好地应对异常情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值