博舍

微信公众号开发(消息推送) 人工智能微信公众号有哪些内容

微信公众号开发(消息推送)

文章目录微信公众号开发运行效果微信公众号简介注册微信公众号注册测试公众号搭建微信本地调试环境微信公众号接入(校验签名)给指定用户推送消息网页授权获取用户openid给指定用户发送模板信息微信公众号开发

代码地址

运行效果

微信公众号简介

微信公众号分为服务号、订阅号、企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以。

我们所说的微信公众号开发指的是订阅号和服务号。关于订阅号和服务器的区别,官方是这样解释的

服务号:主要偏向于服务交互(功能类似12315,114,银行,提供绑定信息,服务交互),每月可群发4条消息;服务号**适用人群:媒体、企业、政府或其他组织。订阅号:主要偏向于为用户传达资讯,(功能类似报纸杂志,为用户提供新闻信息或娱乐趣事),每天可群发1条消息;订阅号**适用人群:个人、媒体、企业、政府或其他组织。注册微信公众号

进入微信公众号注册页面https://mp.weixin.qq.com/点击公众号右上方的注册按钮,进入注册界面,填写基本信息,选择订阅号,完成身份认证,即可。

注册测试公众号

个人订阅号有一些接口是没有权限的,也就是说个人订阅号无法调用一些高级的权限接口,如生成二维码、网页授权、自定义菜单、微信支付这样的接口权限个人订阅号是没有调用权限的,幸运的是,微信公众平台提供了测试公众账号,测试公众号有很多个人订阅号不具备的权限,测试公众号的注册地址为:

http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

用微信扫描页面中的二维码进行登录,登录成功后,就可以看到腾讯分配给我们的测试公众号的信息了,如下图所示,接下来我们就可以搭建环境,进行开发测试了

测试公众号的所拥有的接口权限如下:

搭建微信本地调试环境

开发基于微信公众号的应用最大的痛苦之处就是调试问题,每次实现一个功能后都需要部署到一个公网服务器进行测试,因为微信用户每次向公众号发起请求时,微信服务器会先接收到用户的请求,然后再转发到我们的服务器上,也就是说,微信服务器是要和我们的服务器进行网络交互,所以我们必须保证我们的服务器外网可以访问到,这种部署到公网服务器进行测试的做法对于我们开发者来说简直是噩梦。所以我们要想一个办法可以做到本地部署,本地调试代码,而要做到这一点,那么我们要解决的问题就是将内网的部署服务器映射到外网,让微信服务器可以正常访问到,幸运的是,借助于第三方软件Ngrok,我们就可以做得到。Ngrok是一个免费的软件Ngrok,使用Ngrok后,我们就可以实现内网穿透,也就是说我们可以将内网的服务器映射到外网给别人访问,这对于我们在本地开发环境中调试微信代码是以及给用户演示一些东西非常快速和有帮助的,因为可以直接使用我们自己的内网的电脑作为服务器。不过需要翻墙访问.常用的内网穿透工具有natapp,ngrok,dingding,关于微信公众号开发,这三个工具我都使用了,只有natapp可以正常开发。

关于natapp的使用网上很多,我在这里就不在介绍了。

natapp成功标志:

可以通过访问http://xt77eg.natappfree.cc访问到我们本机的服务

微信公众号接入(校验签名)

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序

2)将三个参数字符串拼接成一个字符串进行sha1加密

3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

@Controller@RequestMapping(value="wx")publicclassWeiController{/***公众号appid*/@Value("${wx.appid}")privateStringappid;/***公众号appSecret*/@Value("${wx.secret}")privateStringsecret;/***微信消息接收和token验证*@paramrequest*@paramresponse*@throwsIOException*/@GetMapping("/weChatToken")publicvoidweChat(HttpServletRequestrequest,HttpServletResponseresponse){booleanisGet=request.getMethod().toLowerCase().equals("get");if(isGet){//微信加密签名Stringsignature=request.getParameter("signature");//时间戳Stringtimestamp=request.getParameter("timestamp");//随机数Stringnonce=request.getParameter("nonce");//随机字符串Stringechostr=request.getParameter("echostr");//通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败if(signature!=null&&CheckoutUtil.checkSignature(signature,timestamp,nonce)){try{PrintWriterprint=response.getWriter();print.write(echostr);print.flush();}catch(IOExceptione){e.printStackTrace();}}}}}publicclassCheckoutUtil{publicstaticStringtoken="999";/***验证签名*@paramsignature*@paramtimestamp*@paramnonce*@return*/publicstaticbooleancheckSignature(Stringsignature,Stringtimestamp,Stringnonce){String[]arr=newString[]{token,timestamp,nonce};//将token、timestamp、nonce三个参数进行字典序排序Arrays.sort(arr);StringBuildercontent=newStringBuilder();for(inti=0;imd=MessageDigest.getInstance("SHA-1");//将三个参数字符串拼接成一个字符串进行sha1加密byte[]digest=md.digest(content.toString().getBytes());tmpStr=byteToHex(digest);}catch(NoSuchAlgorithmExceptione){e.printStackTrace();}//将sha1加密后的字符串可与signature对比,标识该请求来源于微信returntmpStr!=null?tmpStr.equals(signature):false;}/***十六进制字节数组转为字符串*@paramhash*@return*/privatestaticStringbyteToHex(finalbyte[]hash){Formatterformatter=newFormatter();for(byteb:hash){formatter.format("%02x",b);}Stringresult=formatter.toString();formatter.close();returnresult;}

进入微信测试公众号管理界面,在接口配置信息中填入映射的外网地址和代码中声明的token,如下图所示:

点击提交,会显示配置成功,如下图:

到此,我们的公众号应用已经能够和微信服务器正常通信了,也就是说我们的公众号已经接入到微信公众平台了。

给指定用户推送消息网页授权获取用户openid

如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息(openId),进而实现业务逻辑。

关于网页授权回调域名的说明:

1、在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发-接口权限-网页服务-网页帐号-网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加http://等协议头;

2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html、http://www.qq.com/login.html都可以进行OAuth2.0鉴权。但http://pay.qq.com、http://music.qq.com、http://qq.com无法进行OAuth2.0鉴权

3、如果公众号登录授权给了第三方开发者来进行管理,则不必做任何设置,由第三方代替公众号实现网页授权即可

获取用户openId步骤:

1、引导用户进入授权页面同意授权,获取code

2、通过code换取openId

代码如下:

@Controller@RequestMapping(value="wx")publicclassWeiController{privateStringappid="微信公众号的appid";privateStringsecret="微信公众号的secret";/***获取微信用户code,并重定向获取用户openId*@return*/@GetMapping("/getUserCode")publicStringgetUserCode(){StringbackUrl="http://xt77eg.natappfree.cc/wx/getUserOpenId";StringgetOpenIdUrl="https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri="+backUrl+"&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";getOpenIdUrl=getOpenIdUrl.replace("APPID",appid);return"redirect:"+getOpenIdUrl;}/***获取用户openId*@return*@throwsIOException*/@GetMapping("/getUserOpenId")@ResponseBodypublicStringgetUserOpenId()throwsIOException{//获取codeStringcode=request.getParameter("code");//换取用户openidStringurl="https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";url=url.replace("APPID",appid).replace("SECRET",secret).replace("CODE",code);JSONObjectresult=Util.doGetJson(url);JSONObjectjSONObject=JSONObject.parseObject(String.valueOf(result));Stringopenid=jSONObject.getString("openid");returnopenid;}给指定用户发送模板信息

首先要准备一个模板,测试号可自定义模板,但在正式公众号我们要申请,或者使用别人已经申请过的模板。

pom:

org.springframework.bootspring-boot-starter-webcom.github.binarywangweixin-java-mp3.3.0org.projectlomboklombok1.18.8com.alibabafastjson1.2.58org.springframework.bootspring-boot-test2.1.8.RELEASEtestjunitjunittest

Controller:

@Controller@RequestMapping(value="wx")publicclassWeiController{@ResourcePushMessageServicepushMessageService;/***向每个用户推送消息*@return*/@GetMapping("/sendMessage")@ResponseBodypublicStringsendMessage(){StringopenId="用户openId";if(!"".equals(openId)){AlarmParamsDTOdto=newAlarmParamsDTO("申请进度","国家奖学金","申请通过",time,"成功");dto.setOpenId(openId);pushMessageService.pushMessage(dto);}return"success";}

Service:

@Service@Slf4jpublicclassPushMessageServiceImplimplementsPushMessageService{privateStringappid="微信公众号appid";privateStringsecret="微信公众号secret";/***给微信公众号某个用户推送信息*@paramalarmParamsDTO*/@OverridepublicvoidpushMessage(AlarmParamsDTOalarmParamsDTO){//1,配置WxMpInMemoryConfigStoragewxStorage=newWxMpInMemoryConfigStorage();wxStorage.setAppId(appid);wxStorage.setSecret(secret);WxMpServicewxMpService=newWxMpServiceImpl();wxMpService.setWxMpConfigStorage(wxStorage);ListwxMpTemplateData=Arrays.asList(newWxMpTemplateData("first",alarmParamsDTO.getFirst(),"#000000"),newWxMpTemplateData("keyword1",alarmParamsDTO.getKeyword1(),"#000080"),newWxMpTemplateData("keyword2",alarmParamsDTO.getKeyword2(),"#0000FF"),newWxMpTemplateData("keyword3",alarmParamsDTO.getKeyword3(),"#FFD700"),newWxMpTemplateData("remark",alarmParamsDTO.getRemark(),"#00FF00"));//2,推送消息WxMpTemplateMessagetemplateMessage=WxMpTemplateMessage.builder().toUser(alarmParamsDTO.getOpenId()).templateId("tIDrdFcqFGMsTnc462H49_DbjgXUuIjsqIlQttq7VDE").data(wxMpTemplateData).url("http://www.baidu.com").build();try{wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);}catch(Exceptione){System.out.println("推送失败:"+e.getMessage());}}}

entity:

@Setter@Getter@NoArgsConstructor@AllArgsConstructorpublicclassAlarmParamsDTO{/***推送信息小标题*/privateStringfirst;/***学生姓名*/privateStringkeyword1;/***申请资助类型*/privateStringkeyword2;/***申请状态*/privateStringkeyword3;/***申请结果*/privateStringremark;/***用户微信openId,唯一标识*/privateStringopenId;publicAlarmParamsDTO(Stringfirst,Stringkeyword1,Stringkeyword2,Stringkeyword3,Stringremark){this.first=first;this.keyword1=keyword1;this.keyword2=keyword2;this.keyword3=keyword3;this.remark=remark;}}

最受欢迎的15种公众号内容类型

6、情感类

情感类内容的核心是以情感人,具体操作手法也有很多,有打故事牌的、有打怀旧牌的、有打感情牌的等等。

7、鸡汤类

朋友圈中最多的内容之一就是鸡汤了,这也变相证明鸡汤是大众喜欢的“美食”之一。

8、爆料类

爆料类内容往往都是大多数人接触不到的,但又出人意料,所以往往效果都非常的好。比如揭幕某一个行业黑幕、潜规则等等。

9、故事类

应该说我们从小到大都是看着、听着各种故事长大的。所以人们对故事内容的喜好也不是一星半点,从而造就故事类内容深受人们喜爱。

10、励志类

越是压力越大的人、越是浮躁目盲的人、亦或越是失败的人都需要励志。并给予他们适当的正能量,以便于给他们适当的鼓励。

11、八卦类

各种娱乐八卦、名人八卦是媒体和朋友圈里面的常客,虽然这类文章很俗,但是用户很喜欢。

12、观点型

观点类内容,顾名思义,就是以思想观点取胜。这类内容想要吸引关注,观点一定要与众不同,要么极具争议性,要么非常独到,要么异常犀利或者很有深度。

13、排行类

根据老渔哥网络的互联网从业经验来看,排行类内容都比较受欢迎。并且从朋友圈的数据分析来看,情况也却是如此。

14、案例类

案例类内容往往都是真人现身说法,一是真实可信;二是内容来源于实践,操作性强;三是更贴近用户的真实生活和实际,所以此类内容也都非常受欢迎。

15、研究类

研究类内容往往都会让受众学到或了解到许多非常有用的知识,所以往往这一类的内容都非常受欢迎,受用户高度追捧。返回搜狐,查看更多

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇