精华内容
下载资源
问答
  • 主要介绍了php实现微信公众号主动推送消息的方法,PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制,需要的朋友可以参考下
  • (VB源码)微信公众号消息推送修改版,现在可以根据数据库自动获取accesstoken,方便大家更好的测试。(代码中的数据库连接要换成自己的) 这个代码是从本网下载后修改的,原版:...
  • 微信公众号消息推送器主要是与MSSQL SERVER数据库接口,用户将要发送的数据按指定格式写入数据表中,软件定时发送。应用于ERP\OA\CRM等管理系统与微信公众号的结合使用。特点:1、无需具备公众号开发能力,只要会往...
  • Java 实现微信公众号模板消息推送,demo
  • 微信公众号消息推送

    2020-05-05 16:25:22
    微信公众号消息推送微信公众号消息推送1.1申请测试号1.2模板消息的开发1.2.1获取模板id1.2.2发起请求1.3搭建消息系统1.3.1模型的封装(消息模型)1.3.2微信通知服务1.3.3实现Service创建一个表格 微信公众号消息推送...

    微信公众号消息推送

    使用微信公众号消息推送的好处:
    1.互动一步到位,简单粗暴。信息推送迅速,用户可以直接发送消息到微信公众号,可以及时百的回复他们。例如:网络营销能力秀,前段时间网络营销能力秀大学生网络营销比赛结束了,秀友们就会在微信上发消息问一些关于能力秀获奖证书的事情,可以很迅速的回复他们。
    2.营销成本低,效度果佳。通过微信公众号平台,用户与企业之间建立起了联系,企业推送消息广告直接通过微信公众平台推送,花问费的成本也是极低的。这样持续的推送可以加深用户对品牌的认知,而且可以更好的交流,得到用户的反馈。省去了广告的费用,企业可以做一些活动,比如抽答奖抽中有礼品等之类的,可以加大用户的参与度。
    3.随时随地的提高信息和服务,比如说可以用微信公众号助手来发布你的公众号文章。相对于PC机而版言,手机是用户随时都会携带在身上的工具,借助移动端优势,微信天然的社交、位置等优势,会给商家的营销带来很大的方便,同时相对于APP而言,权由于不需要下载安装,用此更加方便。

    1.1申请测试号

    申请地址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
    1测试号信息

    1.2模板消息的开发

    模板开发地址:http://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=tmplmsg/faq_tmpl

    1.2.1获取模板id

    在这里插入图片描述
    模板的定义:
    {{first.DATA}}
    商品的详情:{{keyword1.DATA}}
    商品的个数:{{keyword2.DATA}}
    商品的状态:{{keyword3.DATA}}
    {{remark.DATA}}
    在这里插入图片描述
    在这里插入图片描述
    模板id为:42qDJjRyDDekZwUomZomo2nwRBiBAwmAHfADjP0PUaQ

    1.2.2发起请求

    大致流程图
    在这里插入图片描述
    请求的uri:
    POST请求
    https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
    请求的参数:
    Json
    返回值:
    {

    "errcode":0,
    
    "errmsg":"ok",
    
    "msgid":200228332
    

    }

    1.3搭建消息系统

    引入微信消息推送sdk

        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>3.3.0</version>
        </dependency>
    

    1.3.1模型的封装(消息模型)

    /**
     * 微信的模板消息
     * @author xy
     *
     */
    public class MessageTemplate {
    	
    	// 发送给那个用户
    	@JsonProperty("touser")
    	private String toUser; // touser
    	// 发送的模板id
    	@JsonProperty("template_id")
    	private String templateId; // template_id
    	// 消息里面的url 地址
    	private String url;
    	// 消息的参数
    	private Map<String,Map<String,String>> data;
    	public String getToUser() {
    		return toUser;
    	}
    	
    	public static Map<String,String> initData(String value,String color) {
    		Map<String, String> data = new HashMap<String,String>();
    		data.put("value", value);
    		data.put("color", color);
    		return data;
    	}
    

    1.3.2微信通知服务

    /**
     * 微信通知服务,用来给用户发送微信消息
     * @author xy
     *
     */
    public interface WechatNotifyService {
      
    	/**
    	 * 
    	 * @param user
    	 * @param message
    	 */
    	void sendMessage(TAdmin user,Object message);
    }
    

    1.3.3实现Service

    获取token的地址:
    https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E8%8E%B7%E5%8F%96access_token%E6%8E%A5%E5%8F%A3%20/token
    在这里插入图片描述

    @Service
    public class WechatNotifyServiceImpl implements WechatNotifyService {
    
    	
    	public static void sendMessage1(TAdmin user, Object message) {
    		RestTemplate rest = new RestTemplate();
    		String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=16_I6ORtbdlKfGYosWm9tliPWo_L4n8vvgpP6iKGIYqn2WbCEgy1osydyUYCOHvFyabVhZNGJXYOWRI3nXnYuDtxrtK3AASf29oclf3Ge8UzKxUX3xa1jqpbs429AH8O-hyfrpu33ckIwi9htxGGRNcAGAPAW";
    		// request 可以是一个java 对象,RestTemplate 会自动的把它转化为json对象
    		MessageTemplate messageTemplate = new MessageTemplate();
    		// rest 会将对象messageTemplate 自动使用jackson转化为json对象
    		messageTemplate.setToUser("op16B0_4fK8AFLFI7WZ44VhHxvXE");// 发送给那个用户
    		messageTemplate.setTemplateId("byn7Kv4t7lrlBCdHLBmo8VSqm9lHn_YcFdnNgPkunbY");// 消息模板
    		messageTemplate.setUrl("https://www.baidu.com/");// 用户点击该消息,进入那个页面
    		Map<String, Map<String, String>> data = new HashMap<>();
    		/**
    		 * {{first.DATA}} 
    			商品的详情:{{keyword1.DATA}} 
    			商品的个数:{{keyword2.DATA}} 
    			商品的状态:{{keyword3.DATA}} 
    			{{remark.DATA}}
    		 */
    		data.put("first", MessageTemplate.initData("尊敬的大佬(xy)", ""));
    		data.put("keyword1", MessageTemplate.initData("五一套", ""));
    		data.put("keyword2", MessageTemplate.initData("12", "套"));
    		data.put("keyword3", MessageTemplate.initData("待充值", ""));
    		data.put("remark", MessageTemplate.initData("赛利亚,我的爱", "#4169E1"));
    		messageTemplate.setData(data );
    		String jsonResult = rest.postForObject(url, messageTemplate, String.class);
    		System.out.println(jsonResult);
    	}
      public static void main(String[] args) {
    	 sendMessage1(null,null);
    }
    @Override
    public void sendMessage(TAdmin user, Object message) {
    }
    }
    
    

    测试效果图

    在这里插入图片描述

    展开全文
  • java二次开发接微信公众号接口,实现根据用户授权,获取用户code,再获取openid,然后向其推送模版消息
  • springboot实现微信公众号模版消息推送,用的是构架:springboot+redis,详细教程:https://blog.csdn.net/chenhongming888/article/details/95173079
  • Python实现微信公众号消息推送

    千次阅读 2020-11-26 21:21:56
    本章内容主要阐述如何通过Python语言来实现微信公众号客服消息推送,包括文本信息以及媒体信息(picture,voice,video等)其他方式可参考腾讯官方文档 ...实现思路: 上微信公众号平台注册一个微信公众号测试号,链接...

    本章内容主要阐述如何通过Python语言来实现微信公众号客服消息的推送,包括文本信息以及媒体信息(picture,voice,video等),其他方式可参考腾讯官方文档 https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

    实现思路:

    1. 上微信公众号平台注册一个微信公众号测试号,链接:https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
    2. 获取微信公众号的appID 和appsecret(在微信公众号平台上注册微信公众号后即可查看到)
    3. 获取公众号的access_token值,access_token是公众号全局唯一接口调用凭据,公众号调用各接口时都需要使用access_token。该值目前有效期限是每2小时,超过2小时后需重新获取,且每天仅可获取2000次。
      api接口:
      接口调用请求说明
      https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

      在这里插入图片描述
    4. 获取设备的opend_id。opend_id为关注公众号粉丝(有关注公众号的微信账号)的用户id,想要给粉丝发消息,就必须要获取到粉丝的open_id
    5. 根据微信公众号平台上给的api接口使用方法,调用对应的api接口给粉丝发送不同类型的消息。(详情请见微信公众号官方文档)
      API接口:
      http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN

    下列代码示例是通过“客服消息”接口来实现给粉丝发送消息。

    # -*- encoding:utf-8 -*-
    
    import requests
    import json
    
    
    class SendMessage():
        def __init__(self):
            self.appID = 'xxxx'
            self.appsecret = 'xxxx'
            self.access_token = self.get_access_token()
            self.opend_ids = self.get_openid()
    
        def get_access_token(self):
            """
            获取微信公众号的access_token值
            """
            url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}'.\
                format(self.appID, self.appsecret)
            print(url)
            headers = {
                'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36'
            }
            response = requests.get(url, headers=headers).json()
            access_token = response.get('access_token')
            # print(access_token)
            return access_token
    
        def get_openid(self):
            """
            获取所有粉丝的openid
            """
            next_openid = ''
            url_openid = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token=%s&next_openid=%s' % (self.access_token, next_openid)
            ans = requests.get(url_openid)
            print(ans.content)
            open_ids = json.loads(ans.content)['data']['openid']
            return open_ids
    
        def sendmsg(self, msg):
            """
            给所有粉丝发送文本消息
            """
            url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={}".format(self.access_token)
            print(url)
            if self.opend_ids != '':
                for open_id in self.opend_ids:
                    body = {
                        "touser": open_id,
                        "msgtype":"text",
                        "text":
                        {
                            "content": msg
                        }
                    }
                    data = bytes(json.dumps(body, ensure_ascii=False).encode('utf-8'))
                    print(data)
                    response = requests.post(url, data=data)
                    # 这里可根据回执code进行判定是否发送成功(也可以根据code根据错误信息)
                    result = response.json()
                    print(result)
            else:
                print("当前没有用户关注该公众号!")
    
        def upload_media(self, media_type, media_path):
            """
            上传临时文件到微信服务器,并获取该文件到meida_id
            """
            url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token={}&type={}'.format(self.access_token, media_type)
            print(url)
            meida = {
                'media': open(media_path, 'rb')
            }
            rsponse = requests.post(url, files=meida)
            parse_json = json.loads(rsponse.content.decode())
            print(parse_json)
            return parse_json.get('media_id')
    
        def send_media_to_user(self, media_type, media_path):
            """
            给所有粉丝发送媒体文件,媒体文件以meida_id表示
            """
            media_id = self.upload_media(media_type, media_path)
            url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={}'.format(self.access_token)
            if self.opend_ids != '':
                for open_id in self.opend_ids:
                    if media_type == "image":
                        body = {
                            "touser": open_id,
                            "msgtype": "image",
                            "image":
                                {
                                    "media_id": media_id
                                }
                        }
                    if media_type == "voice":
                        body = {
                            "touser": open_id,
                            "msgtype": "voice",
                            "voice":
                                {
                                    "media_id": media_id
                                }
                        }
                    data = bytes(json.dumps(body, ensure_ascii=False).encode('utf-8'))
                    print(data)
                    response = requests.post(url, data=data)
                    # 这里可根据回执code进行判定是否发送成功(也可以根据code根据错误信息)
                    result = response.json()
                    print(result)
            else:
                print("当前没有用户关注该公众号!")
    
    
    if __name__ == "__main__":
        data = 'Hello,3Nod!'
        sends = SendMessage()
        sends.sendmsg(data)
        sends.send_media_to_user("image", './test.png')
    
    展开全文
  • 用VB实现公众号消息推送
  • 微信公众号消息模板推送demo,亲测能用,替换下参数就能用
  • thinkphp 5.0 对接微信公众号,向指定用户发送模板消息
  • 主要介绍了C#微信公众号开发之接收事件推送消息排重的方法,详细分析了事件推送消息排重的使用技巧,对微信开发有一定参考借鉴价值,需要的朋友可以参考下
  • 微信公众号消息推送开发(模板消息):准备工作[公众平台环境配置](一) 前言: 根据公众平台提供api,需要注意以下几点: ①,access_token需要缓存 ②,需要按照所选模板封装对应的数据 ③,推送消息必须条件:模板...

    微信公众号消息推送开发(模板消息):准备工作[公众平台环境配置](一)

    前言:

         根据公众平台提供api,需要注意以下几点:

    ①,access_token需要缓存

    ②,需要按照所选模板封装对应的数据

    ③,推送消息必须条件:模板id,被推送者的openid

    模板消息接口

    开发实现:

    下面以实现绑定推送消息为例:

    ①:获取access_token(由于每天access_token获取有次数限制,需要缓存)

        /**
         * 获取access_token
         * @param AppId
         * @param AppSecret
         * @return
         * @throws Exception
         */
        public static String getAccessToken(String AppId,String AppSecret)throws BusinessException{
            String access_tokenurl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
            access_tokenurl=access_tokenurl.replace("APPID",AppId);
            access_tokenurl=access_tokenurl.replace("APPSECRET",AppSecret);
            String accesstoken="";
            JSONObject jsonObject = WeiXinUtil.httpsRequest(access_tokenurl,"GET",null);
            if (jsonObject !=null){
                accesstoken=jsonObject.getString("access_token");
            }
                return accesstoken;
        }

    ②,创建模板消息实体对象(由于应用模板较多,这里定义一个javabean.这个根据个人情况定义)

    package com.steno.xf.weixin.vo;
    
    import org.apache.lucene.document.StringField;
    
    /**
     * 公众号推送消息封装
     */
    public class GZHMsgVo {
        private String touser;
        private String templateId;
        private String title;
        private String remark;
        private String keyword1;
        private String keyword2;
        private String keyword3;
        private String keyword4;
        private String keyword5;
        //是否跳转相关
        private String smUrl;
        private String smAppid;
        private String smpagepath;
        //备注字体颜色
        private String remakColor;
        //标题字体颜色
        private String titleColor;
       
         //....省略geter/setter....//
    }
    

    注:根据个人喜好,也可以把keyword封装成集合

    ③,调用模板消息接口(AccessToken为①获取的值)

    GZHMsgVo msgVo = new GZHMsgVo();
    msgVo.setTemplateId(ReferenceTool.getItemvalue(XfReferenceConstrants.GZHMSG_BANGDING_ID));//模板id
    msgVo.setTouser(gzhopenId);//用户openid
    msgVo.setTitle("恭喜!您的新房账号已成功绑定微信");
    msgVo.setKeyword1(vo.getUsername());
    msgVo.setKeyword2("接收平台通知");
    msgVo.setKeyword3(DateFormatUtil.getNowDateTime());
    msgVo.setRemark("和谐共享,方便你我");
    msgVo.setRemakColor("EE3D11");
    WeiXinUtil.sendMessagePush(msgVo,AccessToken);
    	

    ④,WeiXinUtil.sendMessagePush()

    调用发送模板消息api:

    https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
    
        /**
         * 公众号推送封装
         * @param vo
         * @param ACCESS_TOKEN
         * @throws Exception
         */
        public static String  sendMessagePush(GZHMsgVo vo,String ACCESS_TOKEN){
            JSONObject json=new JSONObject();
            JSONObject text=new JSONObject();
            JSONObject first=new JSONObject();
            JSONObject remark=new JSONObject();
            if (vo.getTouser()==null){
                return "touser不能为空";
            }
            if (vo.getTemplateId()==null){
                return "TemplateId不能为空";
            }
            json.put("touser",vo.getTouser());
            json.put("template_id",vo.getTemplateId());
            first.put("value",vo.getTitle());
            remark.put("value",vo.getRemark());
            if (vo.getKeyword1()!=null){
                JSONObject keyword1=new JSONObject();
                keyword1.put("value",vo.getKeyword1());
                text.put("keyword1",keyword1);
            }
            if (vo.getKeyword2()!=null){
                JSONObject keyword2=new JSONObject();
                keyword2.put("value",vo.getKeyword2());
                text.put("keyword2",keyword2);
            }
            if (vo.getKeyword3()!=null){
                JSONObject keyword3=new JSONObject();
                keyword3.put("value",vo.getKeyword3());
                text.put("keyword3",keyword3);
            }
            if (vo.getKeyword4()!=null){
                JSONObject keyword4=new JSONObject();
                keyword4.put("value",vo.getKeyword4());
                text.put("keyword4",keyword4);
            }
            if (vo.getKeyword5()!=null){
                JSONObject keyword5=new JSONObject();
                keyword5.put("value",vo.getKeyword5());
                text.put("keyword5",keyword5);
            }
            if (vo.getTitleColor() !=null){
                first.put("color",vo.getTitleColor());
            }
            if (vo.getRemakColor() !=null){
                remark.put("color",vo.getRemakColor());
            }
            text.put("first", first);
            text.put("remark",remark);
            json.put("data", text);
            //发送模板消息
            String sendUrl="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
            sendUrl=sendUrl.replace("ACCESS_TOKEN",ACCESS_TOKEN);
            String jsonstringParm =json.toString();
            JSONObject object=WXAdvancedUtil.httpsRequest(sendUrl,"POST",jsonstringParm);
            return object.toString();
        }

    ⑤,WXAdvancedUtil.httpsRequest(sendUrl,"POST",jsonstringParm)

        /**
         * 发送http请求
         * @param requestUrl
         * @param requestMethod
         * @param outputStr
         * @return
         */
        public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
            JSONObject jsonObject = null;
            try {
                // 创建SSLContext对象,并使用我们指定的信任管理器初始化
                TrustManager[] tm = { new MyX509TrustManager() };
                SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
                sslContext.init(null, tm, new java.security.SecureRandom());
                // 从上述SSLContext对象中得到SSLSocketFactory对象
                SSLSocketFactory ssf = sslContext.getSocketFactory();
    
                URL url = new URL(requestUrl);
                HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
                conn.setSSLSocketFactory(ssf);
    
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                // 设置请求方式(GET/POST)
                conn.setRequestMethod(requestMethod);
    
                // 当outputStr不为null时向输出流写数据
                if (null != outputStr) {
                    OutputStream outputStream = conn.getOutputStream();
                    // 注意编码格式
                    outputStream.write(outputStr.getBytes("UTF-8"));
                    outputStream.close();
                }
    
                // 从输入流读取返回内容
                InputStream inputStream = conn.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                String str = null;
                StringBuffer buffer = new StringBuffer();
                while ((str = bufferedReader.readLine()) != null) {
                    buffer.append(str);
                }
    
                // 释放资源
                bufferedReader.close();
                inputStreamReader.close();
                inputStream.close();
                conn.disconnect();
                jsonObject = JSONObject.fromObject(buffer.toString());
            } catch (ConnectException ce) {
    
                ce.printStackTrace();
            } catch (Exception e) {
    
                e.printStackTrace();
            }
            return jsonObject;
        }

    效果:                                                                                                                                                                                                             

    微信公众号消息推送开发(模板消息):点击推送消息跳转到网页或者小程序(三)

    展开全文
  • 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息微信官方API文档: ...

    模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。

    微信官方API文档:

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

    接口地址(GET或POST方式请求):

    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

    发送模板消息(POST方式请求):

    https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

    流程:
    1、该用户必须关注公众号。
    2、必须有appid、secret、openid、消息模板Id。
    3、根据appid和secret、获取token。
    4、通过openid和token和模板Id进行消息推送。

    代码:

    消息模板

    
    import java.util.List;
    
    /**
     * Template-消息模板
     *
     * @author xiaofei
     * @date 2019-05-15
     */
    public class Template {
        // 消息接收方
        private String toUser;
        // 模板id
        private String templateId;
        // 模板消息详情链接
        private String url;
        // 消息顶部的颜色
        private String topColor;
        // 参数列表
        private List<TemplateParam> templateParamList;
    
        public Template() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        public Template(String toUser, String templateId, String url,
                        String topColor, List<TemplateParam> templateParamList) {
            super();
            this.toUser = toUser;
            this.templateId = templateId;
            this.url = url;
            this.topColor = topColor;
            this.templateParamList = templateParamList;
        }
    
        public String getToUser() {
            return toUser;
        }
    
        public void setToUser(String toUser) {
            this.toUser = toUser;
        }
    
        public String getTemplateId() {
            return templateId;
        }
    
        public void setTemplateId(String templateId) {
            this.templateId = templateId;
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public String getTopColor() {
            return topColor;
        }
    
        public void setTopColor(String topColor) {
            this.topColor = topColor;
        }
    
        public List<TemplateParam> getTemplateParamList() {
            return templateParamList;
        }
    
        public void setTemplateParamList(List<TemplateParam> templateParamList) {
            this.templateParamList = templateParamList;
        }
    
        /**
         * 拼接数据
         * @return
         */
        public String toJSON() {
            StringBuffer buffer = new StringBuffer();
            buffer.append("{");
            buffer.append(String.format("\"touser\":\"%s\"", this.toUser)).append(",");
            buffer.append(String.format("\"template_id\":\"%s\"", this.templateId)).append(",");
            buffer.append(String.format("\"url\":\"%s\"", this.url)).append(",");
            buffer.append(String.format("\"topcolor\":\"%s\"", this.topColor)).append(",");
            buffer.append("\"data\":{");
            TemplateParam param = null;
            for (int i = 0; i < this.templateParamList.size(); i++) {
                param = templateParamList.get(i);
                // 判断是否追加逗号
                if (i < this.templateParamList.size() - 1) {
                    buffer.append(String.format("\"%s\": {\"value\":\"%s\",\"color\":\"%s\"},", param.getName(), param.getValue(), param.getColor()));
                } else {
                    buffer.append(String.format("\"%s\": {\"value\":\"%s\",\"color\":\"%s\"}", param.getName(), param.getValue(), param.getColor()));
                }
            }
            buffer.append("}");
            buffer.append("}");
            return buffer.toString();
        }
    }
    

    消息参数模板

    /**
     * TemplateParam-消息参数模板
     *
     * @author xiaofei
     * @date 2019-05-15
     */
    public class TemplateParam {
        // 参数名称
        private String name;
        // 参数值
        private String value;
        // 颜色
        private String color;
    
        public TemplateParam() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        public TemplateParam(String name, String value, String color) {
            this.name = name;
            this.value = value;
            this.color = color;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    }
    

    微信消息推送接口

        /**
         * 消费成功通知
         */
        boolean wxMsgConsumptionSuccess(String openid,String first, String time,String org,String type,String money,String point);
    

    微信消息推送接口

    
    import lombok.extern.slf4j.Slf4j;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 微信消息推送 服务层实现
     *
     * @author xiaofei
     * @date 2019-05-14
     */
    @Slf4j
    @Service
    public class WXMsgPushServiceImpl implements IWXMsgPushSevice {
    
    /**
         * 消费成功通知
         *
         * @param openid openid
         * @param first  头部
         * @param time   消费时间
         * @param org    消费门店
         * @param type   消费类型
         * @param money  消费金额
         * @param point  积分增加
         * @return
         */
        @Override
        public boolean wxMsgConsumptionSuccess(String openid, String first,
                                               String time, String org, String type,
                                               String money, String point) {
            /**
             尊敬的顾客,最新交易提醒:
             消费时间:
             消费门店:
             消费类型:
             消费金额:
             积分增加:
             请进入“个人账户”查询积分及储值详情。
    
             {{first.DATA}}
             消费时间:{{time.DATA}}
             消费门店:{{org.DATA}}
             消费类型:{{type.DATA}}
             消费金额:{{money.DATA}}
             积分增加:{{point.DATA}}
             {{remark.DATA}}
             */
    
            SysUser user = iSysUserService.selectSysUserByOpenid(openid);
            if (user == null) {
                log.error("wxMsgConsumptionSuccess--根据openid未获取到用户信息:" + openid);
                return false;
            }
            // 获取appid
            String appid = 自己的APPID;
            // 获取sercet
            String sercet = 自己的SERCET;
            // 获取模板Id
            String templateId= 自己的templateId;
            // 需要跳转的url----点击消息推送时需要跳转的地址
            String url = 自己的url;
            // 获取消费成功通知模板信息
            WxMsgpushconfig wxConfig = iWxMsgpushconfigService.selectWxMsgpushconfigById(2);
            log.info("wxMsgConsumptionSuccess--获取模板信息:" + wxConfig);
            log.info("wxMsgConsumptionSuccess--获取模openid:" + appid);
            List<TemplateParam> paras = new ArrayList<>();
            paras.add(new TemplateParam("first", first, "#FF3333"));
            paras.add(new TemplateParam("time", time, "#0044BB"));
            paras.add(new TemplateParam("org", org, "#0044BB"));
            paras.add(new TemplateParam("type", type, "#0044BB"));
            paras.add(new TemplateParam("money", money, "#0044BB"));
            paras.add(new TemplateParam("point", point, "#0044BB"));
            paras.add(new TemplateParam("remark", wxConfig.getMsgRemark(), "#AAAAAA"));
            return WXTmplMsgUtils.sendWXTmplMsg(appid, sercet, templateId, openid, url , paras);
        }
    }
    

    微信模板消息推送Utils

    import java.util.List;
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    
    /**
     * 微信模板消息推送
     *
     * @author xiaofei
     * @date 2019-05-15
     */
    @Slf4j
    public class WXTmplMsgUtils {
    
    	/**
         * Post
         *
         * @param url  url
         * @param json json
         * @return
         */
        public static String doPostJson(String url, String json) {
            // 创建Httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            String resultString = "";
            try {
                // 创建Http Post请求
                HttpPost httpPost = new HttpPost(url);
                // 创建请求内容
                StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
                httpPost.setEntity(entity);
                // 执行http请求
                response = httpClient.execute(httpPost);
                resultString = EntityUtils.toString(response.getEntity(), "utf-8");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    response.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    // e.printStackTrace();
                    log.error("doPostJson异常:" + e);
                }
            }
            return resultString;
        }
        
        /**
         * 消息发送通知
         *
         * @param appid      appid
         * @param sercet     sercet
         * @param templateId 模板id
         * @param openid     openid
         * @param url        url
         * @param paras      模板样式
         * @return
         */
        public static boolean sendWXTmplMsg(String appid, String sercet, String templateId, String openid, String url, List<TemplateParam> paras) {
            boolean flag = false;
            Template tem = new Template();
            // 模板id
            tem.setTemplateId(templateId);
            // 颜色---没啥用
            tem.setTopColor("#00DD00");
            // openid
            tem.setToUser(openid);
            // 地址
            tem.setUrl(url);
            tem.setTemplateParamList(paras);
            // 获取token
            String accesstoken = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + sercet;
            String content = MyHttpUtils.doPost(accesstoken, "","UTF_8");
            // 获取token
            JSONObject jsonObj = JSON.parseObject(content);
            String accessToken = (String) jsonObj.get("access_token");
            // 发送
            String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
            String json = doPostJson(requestUrl, tem.toJSON());
            JSONObject jsonResult = JSON.parseObject(json.toString());
            if (jsonResult != null) {
                // 状态码
                int errorCode = jsonResult.getInteger("errcode");
                // 状态信息
                String errorMessage = jsonResult.getString("errmsg");
                if (errorCode == 0) {
                    flag = true;
                } else {
                    log.error("sendTemplateMsg===>模板消息发送失败:" + errorCode + "," + errorMessage);
                    log.error(json.toString());
                    flag = false;
                }
            }
            return flag;
        }
    }
    

    里面所用到的工具类可以一下里面找一下,这里就不写了!

    https://blog.csdn.net/xiaofeivip_top/article/details/88637454

    效果图:
    在这里插入图片描述

    展开全文
  • 企业微信公众号主动推送通知, API接口:https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token= 的使用 企业接口向下属关注用户发送微信消息
  • 之前写了几篇关于微信小程序的开发实践,总的来说没啥难度,感兴趣的请移步:使用Mpvue配合Weui开发面试题题库微信小程序,并且发布到正式环境,这一次我们来尝试开发一下微信公众号,那么公众号和小程序到底有什么...
  • # 微信公众号配置 wx: appid: ********** secret: ************** token: ********************* aeskey: **************************** 二、创建公众号类、达到将数据注入的目的 @Component @...
  • 以下我将在微信公众号消息推送开发(模板消息):开发实现(二)基础上实现需求,以及实现时需要注意的地方,当然具体实现还要根据自身的需求而定,我这里只介绍下实现思路。 开发实现: 一,实现准备工作 微信公众...
  • 使用Python实现的带图形化界面的下载工具,可以批量下载微信公众号推送文章内的图片。使用了爬虫技术和Tkinter库。
  • 主要介绍了python实现给微信公众号发送消息的方法,结合实例形式分析了Python针对微信公众号接口操作的相关技巧,需要的朋友可以参考下
  • 应用场景:注册绑定通知,订单到期类通知,相对频繁推送消息,被动触发,主动触发,根基微信公众平台提供的几种消息推送方式,采用模板消息可以比较简单快捷的解决大部分应用场景。当然具体采用哪种推送方式还要根据...
  • 文档通过已认证的微信服务号介绍了微信公众号消息模板的PHP编程对接方法,具有较好的学习和参考价值
  • v1.0 版本, 支持用户主动订阅 / 退订推送消息, 因稳定性低, 应用场景少, 不再继续维护. 代码和文档统一移至 listener-mode 目录下. DEMO settings.py 配置 redis, 微信连接信息. 执行获取微信昵称对应的 ID $ python...
  • DotNET Core 实现微信公众号被关注时推送消息 (push messages to wechat)
  • 只要用户关注了公众号,就可以看到一些关于公众号的信息了,这里我们来实现一个小功能,就是给关注公众号的粉丝来推送消息。这个消息与小程序进行关联。 这个功能在微信官方被称为模板消息推送,官方文档:...
  • 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。 备注:当前每个账号的...
  • 基于 LeanCloud 的微信公众号消息推送服务,类似“server酱”,无成本5分钟部署
  • 当有消息到达频道时,会向所有订阅的微信推送通知。 开发此项目的目的是实现一个自己的“”,方便自定义。 零痛苦部署,极度简单的API,代码开源,自由扩展。 准备好服务号或者测试号 如果注册不了服务号也一点关系...
  • 以订单推送为例,主要为大家详细介绍了java实现微信公众号发送模版消息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,068
精华内容 16,827
关键字:

微信公众号消息推送