当前位置:   article > 正文

微信开发公众号流程_企业微信 非法请求2323750864598843135

企业微信 非法请求2323750864598843135
微信公众好开发流程 Java
1、申请账号
公众号分为服务号、企业号、订阅号,每个类型所对应的接口是不同的
公众号接口权限说明
不同的公众号类型具备不同的接口权限,具体如下表: 请注意:
1)、微博认证视作未认证,因此微博认证的公众号不会拥有微信认证公众号特有的接口。
2)、微信认证分为资质认证和名称认证两部分,只需要资质认证通过,就可获得接口。
接口名称
未认证订阅号
微信认证订阅号
未认证服务号
微信认证服务号
基础支持-获取access_token
基础支持-获取微信服务器IP地址
接收消息-验证消息真实性、接收普通消息、接收事件推送、接收语音识别结果
发送消息-被动回复消息
发送消息-客服接口
 
 
发送消息-群发接口
 
 
发送消息-模板消息接口(发送业务通知)
     
发送消息-一次性订阅消息接口
 
 
用户管理-用户分组管理
 
 
用户管理-设置用户备注名
 
 
用户管理-获取用户基本信息
 
 
用户管理-获取用户列表
 
 
用户管理-获取用户地理位置
     
用户管理-网页授权获取用户openid/用户基本信息
     
推广支持-生成带参数二维码
     
推广支持-长链接转短链接口
     
界面丰富-自定义菜单
 
素材管理-素材管理接口
 
 
智能接口-语义理解接口
     
多客服-获取多客服消息记录、客服管理
     
微信支付接口
     
需申请
微信小店接口
     
需申请
微信卡券接口
 
需申请
 
需申请
微信设备功能接口
     
需申请
微信发票接口
 
 
微信JS-SDK-基础接口
微信JS-SDK-分享接口
 
 
微信JS-SDK-图像接口
微信JS-SDK-音频接口
微信JS-SDK-智能接口(网页语音识别)
微信JS-SDK-设备信息
微信JS-SDK-地理位置
微信JS-SDK-界面操作
微信JS-SDK-微信扫一扫
微信JS-SDK-微信小店
     
微信JS-SDK-微信卡券
 
 
微信JS-SDK-微信支付
     
对于我们个人开发尝试而言,个人是不能够认证的,所以只能有一点点接口可以调用
但是公众号提供了测试公众号, 直接体验和测试公众平台所有高级接口
2、对公众号进行必要的配置
1)、个人开发的过程中,我们要经常进行调试,但是我们的电脑基本都是没有独立的外网IP,我们可以通过第三方的工具进行内网映射,将外网地址映射到本地电脑,只要输入外网地址就可以找到本地电脑
可提供外网映射的有很多,我在开发途中使用了 nat123花生壳NATAPP
以下是我使用工程中的心得,每个都会提供免费的域名映射内网地址
nat123
页面古板,且一步步的诱惑充值,免费开通后
第一步<Java>需要使用80端口?充值8元:不能使用80端口<Java>然后为了使用80端口,充值8元
第二步<Java>需要使用自定义域名?至少充值30元:不能使用自定义域名<Java> 卒
花生壳
页面美观,开通内网映射需要充值8元开通,开通后也是不能使用自定义域名的,但是没有诱导的过程
NATAPP
页面简单,可开通免费的隧道使用内网映射,不过为了使用自定义域名,开通VIP1
VIP-1 型
5元/月
月付用户限制流量5G/月,年付7G/月.账单日流量清零,如超流量可单独购买流量包 0.3元/G
微信开发,DEMO演示,SSH/3389,较少人数同时在线游戏等应用
推荐使用这款,可以使用自定义域名,因为微信把大部分内网映射提供的域名加入了黑名单,使用的时候可能会报(该网页不是微信官方的网页,可能不安全,影响体验)
具体使用教程可参考 https://natapp.cn/article
由于前期个人需要,申请了域名并通过了备案
2) 微信配置

图1 微信基本配置
图2 启用微信网页授权
图3 修改为自己的域名
3 Java 代码
设置微信网关,项目中所有和微信交互的全都要通过该接口

  1. /**
  2. * WxGateway 微信转发网关
  3. */
  4. @Controller
  5. @RequestMapping("/gateway")
  6. public class WxGateway {
  7. private static final Logger logger = LoggerFactory
  8. .getLogger(WxGateway.class);
  9. @Autowired
  10. private WxMpConfigStorage wxMpConfigStorage;
  11. @Autowired
  12. private WxMpService wxMpService;
  13. @Autowired
  14. private WxMpMessageRouter wxMpMessageRouter;
  15. @Autowired
  16. private IWxMpService iWxMpService;
  17. @Autowired
  18. private IUserTokenService iUserTokenService;
  19. Gson gson = new Gson();
  20. @Value("${charset}")
  21. private String charset;
  22. /**
  23. * 微信公众号主网关,负责处理所有和微信公众号信息交互
  24. */
  25. @RequestMapping("/main")
  26. public void gateway(HttpServletRequest request, HttpServletResponse response, String xml)
  27. throws IOException {
  28. response.setCharacterEncoding(charset);
  29. logger.debug("接收到消息......");
  30. // 读取输入流
  31. Map<String, String> reqParam = getAllRequestParam(request);
  32. String signature = request.getParameter("signature");
  33. String nonce = request.getParameter("nonce");
  34. String timestamp = request.getParameter("timestamp");
  35. // 验签
  36. if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
  37. // 消息签名不正确,说明不是公众平台发过来的消息
  38. logger.info("非法请求");
  39. response.getWriter().println("非法请求");
  40. response.getWriter().close();
  41. return;
  42. }
  43. String echostr = request.getParameter("echostr");
  44. if (StringUtils.isNotBlank(echostr)) {
  45. // 说明是一个仅仅用来验证的请求,回显echostr
  46. logger.info("echostr:" + echostr);
  47. response.getWriter().println(echostr);
  48. response.getWriter().close();
  49. return;
  50. }
  51. String encryptType = request.getParameter("encrypt_type");
  52. // 加密类型
  53. encryptType = StringUtils.isBlank(encryptType) ? "raw" : encryptType;
  54. if ("raw".equals(encryptType)) {
  55. // 明文传输的消息
  56. String xmlStr = StringUtil.convertStreamToString(request.getInputStream());
  57. WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(xmlStr);
  58. logger.info("{}", xmlStr);
  59. iWxMpService.saveInMsg(inMessage);
  60. WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
  61. UserToken userToken = iUserTokenService.findByOpenId(inMessage.getFromUser());
  62. if(userToken != null){
  63. if (outMessage != null) {
  64. long msgId = 0;
  65. if (null != inMessage.getMsgId()) {
  66. msgId = inMessage.getMsgId();
  67. }
  68. iWxMpService.saveOutMsg(outMessage, msgId);
  69. // 说明是同步回复的消息
  70. // 将xml写入HttpServletResponse
  71. response.getWriter().write(outMessage.toXml());
  72. } else {
  73. // 说明是异步回复的消息,直接将空字符串写入HttpServletResponse
  74. response.getWriter().write("");
  75. }
  76. }else {
  77. //String reply = "<a href=\"info/login\">" + "请先绑定账号" + "</a>";
  78. response.getWriter().write(outMessage.toXml());
  79. }
  80. response.getWriter().close();
  81. return;
  82. }
  83. if ("aes".equals(encryptType)) {
  84. // 是aes加密的消息
  85. String msgSignature = request.getParameter("msg_signature");
  86. WxMpXmlMessage inMessage = WxMpXmlMessage.fromEncryptedXml(
  87. request.getInputStream(), wxMpConfigStorage, timestamp,
  88. nonce, msgSignature);
  89. WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
  90. response.getWriter().write(
  91. outMessage.toEncryptedXml(wxMpConfigStorage));
  92. /**
  93. * 微信服务器发送三次重复的排重问题解决流程:
  94. a.得到数据response.getWriter();
  95. b.得到数据request下的所有数据--->写入一个HashMap中
  96. c.使用response的writer返回一个空白,并且关闭writer,注意如果不关闭的话,那么这个空白消息是不会被传给微信服务器的
  97. */
  98. response.getWriter().close();
  99. return;
  100. }
  101. response.setContentType("text/html;charset=utf-8");
  102. response.setStatus(HttpServletResponse.SC_OK);
  103. response.getWriter().println("不可识别的加密类型");
  104. response.getWriter().close();
  105. return;
  106. }
  107. /**
  108. * 获取请求参数中所有的信息
  109. *
  110. * @param request
  111. * @return
  112. */
  113. public static Map<String, String> getAllRequestParam(final HttpServletRequest request) {
  114. Map<String, String> res = new HashMap<String, String>();
  115. Enumeration<?> temp = request.getParameterNames();
  116. if (null != temp) {
  117. while (temp.hasMoreElements()) {
  118. String en = (String) temp.nextElement();
  119. String value = request.getParameter(en);
  120. res.put(en, value);
  121. //logger.debug("en:"+en + ">>>>>>" + "value:" + value);
  122. if (null == res.get(en) || "".equals(res.get(en))) {
  123. res.remove(en);
  124. }
  125. }
  126. }
  127. return res;
  128. }
  129. }


4 Maven 引入 开源微信jar包,减少开发困难程度,具体请参看
  1. <!-- https://mvnrepository.com/artifact/com.github.binarywang/weixin-java-mp -->
  2. <dependency>
  3. <groupId>com.github.binarywang</groupId>
  4. <artifactId>weixin-java-mp</artifactId>
  5. <version>2.9.0</version>
  6. <scope>compile</scope>
  7. </dependency>




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/274129
推荐阅读
相关标签
  

闽ICP备14008679号