
你们有没有收到这些通知。顿时是不是觉得活动性感觉很牛掰。
what??感觉好牛逼的样子。
今天就来教大家怎么实现。
老规矩先甩一下微信官方文档:我是一个很懒的人从来不看微信官方文档,写的太笼统(完全看不懂~~~)。
原来我用这个玩意用的老疯狂了。天天给我喜欢的女孩推送,我喜欢你。哈哈哈比如xxx是女神了。哈哈哈确实做一个程序员确实能给女朋友很多浪漫的地方。为了保护我家女神隐私哈哈哈,我就不上图了。等你们学会可以自己给女朋友退送表白信息哦。。
原来可以随便推,只要知道用户openid就能无限制推,推到把小程序封了。。。--------普及一下微信推送的好处。微信小程序消息推送需要用户触发动作才能发送消息,比如用户提交订单、支付成功。一次只能发一条,当然可以通过某种方法发送多条,KingYiFan就不在这里赘述了。下面就介绍一下如何推送消息。
微信现在改成了只有用户点了小程序,然后生成一个fromId该死的fromId也就是用户不点你小程序按钮,就不会推送。好尴尬。并且这个fromId既然是一个按钮。。我靠微信真的是太坑了。。。
来吧上教程吧。。。一、准备工作
首先,在微信小程序后台开通消息推送功能,并添加消息模板。可以从模板库选择模板也可以创建一个模板,模板添加之后,模板ID我们接下来要用的。插一个小小的话题。。。。昨天我发了微信支付,有人问我微信小程序后台管理系统怎么进入。。。。。。晕。。。。。这都不知道,你让我还能说什么呢。。。。悄悄告诉你,当时KingYiFan也当时没找到,该死的微信隐藏的太深了。。。
注册小程序,我这就不赘述了。然后直接在微信公众平台登录就可以了。公众号也能登录,小程序也能登录。哈哈哈哈哈~~是不是很扯,马爸爸说小程序是未来的趋势。。怎么不给他们开一个独立的平台。后来我给马爸爸发了一封邮件,马爸爸说小龙给忘了。。哈哈哈哈哈上面纯属瞎说啊。。
废话不多说。开始之前打个广告吧。下面的是KingYiFan的小程序。纯属GitHub拉去的。反正这个小程序很牛逼
这是微信小程序登录后台管理系统。
(别问我为什么叫彩狼阁~~)找到模板消息。
新建一个模板。。。
然后点击提交----
就变成了这个样子。。一点要把模板id保存到钱包里,丢了就不能和KingYiFan一起装逼了好了,大家一定要看好我要开始装逼(▼へ▼メ)了
纳尼,刚刚有人问我,appid怎么获取?

好咱们继续哈。。刚刚说了半天fromId这么牛逼的字符串,要获取呢?--下面是微信说的在需要触发消息推送的页面添加提交表单的事件。目的是得到formID,formID是消息推送时必须的参数。
formname='pushMsgFm'report-submit='true'bindsubmit='getFormID'buttonform-type="submit"有本事点我啊~~~/button/form以上代码中“getFormID”是提交表单时触发的事件。
getFormID:function(e){this.setData({formId:e.detail.formId})}三下五除二就把fromId获取了是不是感觉懵逼。为什么腾讯获取fromId放到from表单提交里。因为fromId是from的儿子啊哈哈哈哈~~~好了,不闹了,这是微信防止恶意给用户推送信息骚扰客户。具体为什么表单我也不知道····
是不是上面的都没有看懂呢,就要开始下面了,如果你是小程序开发人员肯定能看懂,如果你和KingYiFan一样是后台程序猿,就把上面代码扔给前段工程师就好了。别问为什么,他一定会感谢你。
先来看看微信官方的API接口地址-请求方式

你们是不是想问我access_token是什么鬼。哈哈哈哈这个给你们扔一个APi文档你们看看就明白了就是一个微信调取APi凭证,一会给你们分享一个工具类直接用就行。。
看看API参数
还有废弃参数,这又是什么鬼。。。来吧让你们看一些熟悉的东西。/@throws@author:KingYiFan@Title:main别问我为什么这么LOW还用main方法,我只想告诉你main方法是最牛逼的方法没有之一@Description:测试推送@param:args@return:void/publicstaticvoidmain(String[]args){//封装了推送实体类,别问我为什么一直封装,java三特性继承封装多态com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplatetem=newcom.jiaewo.house.entity.wxsmallapppush.wxsmallTemplate();//模板id刚刚获取废了很成时间如果还不会,我觉得你应该放弃java了tem.setTemplateId("_yPJaTTc7zmPliitwUm0VY4wjRRvuVOdk57tA1Nggw0");//推送给哪位神仙。这个是openId不是UnionID如果是unionId肯定推送不过去。tem.setToUser("oHi8u5dZc6whcGp8DpUv7h-iM12g");//fromId这个炒鸡重要,没有他百分百推送不成功,fromId+openId才能推送tem.setForm_id("679293f4f93c31e15d1f14dcf3f77d5a");//用户点击之后调到小程序哪个页面找你们前段工程师提供即可tem.setPage("pages/welcome/welcome");//有封装了一个实体类哈哈哈这个是模板消息参数Listcom.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParamparas=newArrayListcom.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam();//这个是满参构造keyword1代表的第一个提示红包已到账这是提示#DC143C这是色值不过废弃了com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParamtemplateParam=newcom.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword1","红包已到账","#DC143C");//装进小参数结合中paras.add(templateParam);//我就不嘚瑟了省点劲直接扔进去算了哈哈哈哈哈~~~~paras.add(newcom.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword2","刘骞",""));paras.add(newcom.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword3","0.02元","#DC143C"));paras.add(newcom.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword4","成功成为您店铺的会员",""));paras.add(newcom.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword5","卓志海",""));paras.add(newcom.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword6","暂无推荐店铺",""));paras.add(newcom.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword7","红包已到您app账户,请尽快查询","#0000FF"));//这里写的挺恶心的,不想抽取工具了。直接转换时间戳把SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");Datetemp=newDate();Stringstr="";str=sdf.format(temp);paras.add(newcom.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword8",str,""));//然后把所有参数扔到大的模板中tem.setTemplateParamList(paras);//模板需要放大的关键词,不填则默认无放大tem.setEmphasis_keyword("keyword1.DATA");//获取token凭证。Tokentoken=com.jiaewo.house.wxxcx.util.CommonUtil.getToken();StringaccessToken=token.getAccessToken();//最后一步请求接口哈哈哈推送成功booleanresult1=com.jiaewo.house.wxxcx.util.CommonUtil.sendTemplateMsg(accessToken,tem);if(result1){System.err.println("推送成功");}else{System.err.println("推送失败");}}是不是感觉炒鸡简单。。。。。没错哈哈哈哈。。。
来继续甩代码和工具类---
/@ClassName:Template@Description:小程序微信推送模版model@author:KingYiFan@date:2018年3月5日下午4:17:25/publicclasswxsmallTemplate{//消息接收方privateStringtoUser;//模板idprivateStringtemplateId;//点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转privateStringpage;//表单提交场景下,为submit事件带上的formId;支付场景下,为本次支付的prepay_idprivateStringform_id;//模板内容字体的颜色,不填默认黑色【废弃】privateStringcolor;//模板需要放大的关键词,不填则默认无放大privateStringemphasis_keyword;//参数列表privateListwxsmallTemplateParamtemplateParamList;publicStringgetToUser(){returntoUser;}publicvoidsetToUser(StringtoUser){this.toUser=toUser;}publicStringgetTemplateId(){returntemplateId;}publicvoidsetTemplateId(StringtemplateId){this.templateId=templateId;}publicStringgetPage(){returnpage;}publicvoidsetPage(Stringpage){this.page=page;}publicStringgetForm_id(){returnform_id;}publicvoidsetForm_id(Stringform_id){this.form_id=form_id;}publicStringgetColor(){returncolor;}publicvoidsetColor(Stringcolor){this.color=color;}publicStringgetEmphasis_keyword(){returnemphasis_keyword;}publicvoidsetEmphasis_keyword(Stringemphasis_keyword){this.emphasis_keyword=emphasis_keyword;}publicListwxsmallTemplateParamgetTemplateParamList(){returntemplateParamList;}publicvoidsetTemplateParamList(ListwxsmallTemplateParamtemplateParamList){this.templateParamList=templateParamList;}publicStringtoJSON(){StringBufferbuffer=newStringBuffer();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(""page":"%s"",this.page)).append(",");buffer.append(String.format(""form_id":"%s"",this.form_id)).append(",");buffer.append(""data":{");wxsmallTemplateParamparam=null;for(inti=0;ithis.templateParamList.size();i++){param=templateParamList.get(i);//判断是否追加逗号if(ithis.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(String.format(""emphasis_keyword":"%s"",this.emphasis_keyword));buffer.append("}");returnbuffer.toString();}}/@Title:Token.java@Packagecom.jiaewo.house.entity@author:家小二-风清扬@date:2018年3月5日下午4:39:38@versionV1.0/packagecom.jiaewo.house.entity;/@ClassName:Token@Description:微信凭证实体类@author:家小二-风清扬@date:2018年3月5日下午4:39:51@Copyright:2018www.jiajiao2o.comInc.Allrightsreserved.注意:本内容仅限于北京赢在路上科技有限公司内部传阅,禁止外泄以及用于其他的商业目/publicclassToken{//接口访问凭证privateStringaccessToken;//凭证有效期,单位:秒privateintexpiresIn;publicStringgetAccessToken(){returnaccessToken;}publicvoidsetAccessToken(StringaccessToken){this.accessToken=accessToken;}publicintgetExpiresIn(){returnexpiresIn;}publicvoidsetExpiresIn(intexpiresIn){this.expiresIn=expiresIn;}}参数Bean
/@ClassName:TemplateParam@Description:微信推送模版model@author:KingYiFan@date:2018年3月5日下午4:16:33/publicclasswxsmallTemplateParam{//参数名称privateStringname;//参数值privateStringvalue;//颜色废弃了哎。。。。。。。。。。。。。。。。。。。privateStringcolor;publicwxsmallTemplateParam(Stringname,Stringvalue,Stringcolor){this.name=name;this.value=value;this.color=color;}publicwxsmallTemplateParam(Stringname,Stringvalue){this.name=name;this.value=value;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetValue(){returnvalue;}publicvoidsetValue(Stringvalue){this.value=value;}publicStringgetColor(){returncolor;}publicvoidsetColor(Stringcolor){this.color=color;}}获取接口访问凭证获取token
/获取接口访问凭证@paramappid凭证@paramappsecret密钥@return/publicstaticTokengetToken(){Tokentoken=null;StringrequestUrl=token_url.replace("APPID",appID).replace("APPSECRET",secret);//发起GET请求获取凭证JSONObjectjsonObject=httpsRequest(requestUrl,"GET",null);if(null!=jsonObject){try{token=newToken();token.setAccessToken(jsonObject.getString("access_token"));token.setExpiresIn(jsonObject.getInt("expires_in"));}catch(JSONExceptione){token=null;//获取token失败log.error("获取token失败errcode:{}errmsg:{}",jsonObject.getInt("errcode"),jsonObject.getString("errmsg"));}}returntoken;}推送消息请求腾讯API
publicstaticbooleansendTemplateMsg(Stringtoken,com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplatetemplate){booleanflag=false;StringrequestUrl="https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN";requestUrl=requestUrl.replace("ACCESS_TOKEN",token);net.sf.json.JSONObjectjsonResult=httpsRequest(requestUrl,"POST",template.toJSON());System.err.println(template.toJSON());if(jsonResult!=null){IntegererrorCode=jsonResult.getInt("errcode");StringerrorMessage=jsonResult.getString("errmsg");if(errorCode==0){flag=true;}else{System.out.println("模板消息发送失败:"+errorCode+","+errorMessage);flag=false;}}returnflag;}剧终。。。。花絮··
疑问1:用户只有点了生成fromId是不是才能推送?
答:对没错,还有一种方法就是用户支付成功prepay_id用户支付成功可以连续推送三次哦!
疑问2:怎么才能给用户无限制推送?
答:目前微信是不支持的,不过KingYiFan想了一个歪点子,那就是吧所有按钮都弄成表单钮,然后用户点了,存起来。记住哈。fromId只有7天有效期,如果不用就浪费了。用完就没用了
彩蛋开始哈哈哈。。原创转载请说明出处KingYiFan教你无限制给用户推送消息KingYiFan教你无限制给用户推送消息
1.封装小程序页面,诱导用户点击按钮,然后生成fromId
2.把fromId存入数据库然后设置一个有效期起始时间和过期时间。
3.比如想给用户推送广告,在把fromId拿出来直接推送。推送完删除。
PS:只要用户点击就保存数据库别嫌多。越多就代表能和用户推无数条来吧给大家画一个流程图吧。

上面就是一套完整的微信小程序推送流程,有什么不懂就联系我。
鼓励作者写出更好的技术文档,就请我喝一瓶哇哈哈哈哈哈哈哈。。微信:支付宝:
感谢一路支持我的人。。。。。LovemeandholdmeQQ:69673804(16年老号)EMAIL:69673804@qq.com友链交换如果有兴趣和本博客交换友链的话,请按照下面的格式在评论区进行评论,我会尽快添加上你的链接。
网站名称:KingYiFan’SBlog网站地址:网站描述:年少是你未醒的梦话,风华是燃烬的彼岸花。网站Logo/头像:













