微信开发者接入官方文档 : https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

一、微信公共号通讯机制

作为开发者,我们需要面对的主要有两个对象:微信服务器和应用程序(网站)服务器。 
当微信用户向你的公众平台发送一条消息,实际上这条消息首先发送到微信服务器,由微信服务器向网站服务器(我们开发的后台服务)发起另外一个请求,网站服务器返回这个请求的结果,再由微信服务器发送到微信客户端。

整个消息通讯流程如下图: 

具体请求流程见下图:

二、 外网映射工具(开发调试)

1、 外网映射工具介绍

微信公众平台在访问后台时,必须提供能够正确访问的外网地址,因为我们在本地开发,IP:127.0.0.1 ,所以要通过内网穿透,提供给外网的微信公众平台正确访问,微信平台对后台URL的要求有两点:

要求:① 必须能够用公网访问    ② 必须使用80端口

(1)natapp (很稳定,极力首推) 

官网 :https://natapp.cn/

(2)ngrok

官网:https://www.ngrok.cc/

(3)nat123

官网:http://www.nat123.com/

(4)花生壳

花生壳服务网址:价格地址,直达地址

使用花生壳外网映射的可以参考这篇博客:http://www.souvc.com/?p=2272

(5)uTools(完全免费,推荐)

地址:https://www.u.tools/

2、我这里选择的是ngrok外网映射工具  

使用ngrok:

(1). ngrok下载: 链接:https://pan.baidu.com/s/1PeVRF2lfNoQYro3YJW_7JQ 密码:s7bm

(2).进入ngrok安装文件所在的目录执行:ngrok -config ngrok.cfg -subdomain mywx 8080,之后出现如下图说明配置成功。(成功的前提是本地服务已经部署到Tomcat并且正常开启,访问本地服务正常)

a.ngrok所在目录

b、切换到该目录下执行上述命令

c、本地服务映射成到外网成功效果图

二、填写服务器配置信息的介绍

1、登录微信公众平台官网后,进入到公众平台后台管理页面。

选择 公众号基本设置-》基本配置 ,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey。

微信公众号配置界面:

服务器配置:

 URL:是开发者用来接收微信消息和事件 的接口URL。(http://公网地址/项目名称/请求路径)

  Token:可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。注意必须为英文或数字,长度为3-32字符,在校验的时候需要用到,随便输入一个字符串就可以了。

EncodingAESKey:由开发者手动填写或随机生成,将用作消息体加解密密钥。(消息加密密钥由43位字符组成,可随机修改,字符范围为A-Z,a-z,0-9。)

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数 
    参数 描述 
signature :微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 
timestamp :时间戳 
nonce: 随机数

echostr: 随机字符串

2、编写相应的Controller(采用spring MVC)

package com.thinkgem.jeesite.modules.app.api;import java.io.IOException;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;/*** * @ClassName: WeiXinController* @Description: TODO(对微信请求校验,成为开发者)* @author CaoWenCao* @date 2018年6月6日 下午2:09:38*/
@Controller
@RequestMapping(value = "weixin")
public class WeiXinController {private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };@RequestMapping(value = "getWeiXinMethod", method = RequestMethod.GET)@ResponseBodypublic void getWeiXinMethod(HttpServletRequest request, HttpServletResponse response) throws IOException {boolean validate = validate(request);if (validate) {response.getWriter().write(request.getParameter("echostr"));response.getWriter().close();}}private boolean validate(HttpServletRequest req) throws IOException {String signature = req.getParameter("signature");// 微信加密签名String timestamp = req.getParameter("timestamp");// 时间戳String nonce = req.getParameter("nonce");// 随机数List<String> list = new ArrayList<String>();list.add("caowencao");list.add(timestamp);list.add(nonce);Collections.sort(list);// 字典排序String str = "";for (int i = 0; i < list.size(); i++) {str += (String) list.get(i);}if (encode("SHA1", str).equalsIgnoreCase(signature)) {return true;}else {return false;}}public static String encode(String algorithm, String str) {if (str == null) {return null;}try {// Java自带的加密类MessageDigest messageDigest = MessageDigest.getInstance(algorithm);// 转为bytemessageDigest.update(str.getBytes());return getFormattedText(messageDigest.digest());}catch (Exception e) {throw new RuntimeException(e);}}private static String getFormattedText(byte[] bytes) {int len = bytes.length;StringBuilder buf = new StringBuilder(len * 2);// 把密文转换成十六进制的字符串形式for (int j = 0; j < len; j++) {buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);buf.append(HEX_DIGITS[bytes[j] & 0x0f]);}return buf.toString();}
}

3、点击提交按钮,此时验证和调用没问题,已经成功接入开发者模式。

Java微信公众号开发之微信公众平台接入开发者相关推荐

  1. 微信公众号开发 - 配置表设计以及接入公众号接口开发

    微信公众号开发文章目录 1.微信公众号开发 - 环境搭建 2.微信公众号开发 - 配置表设计以及接入公众号接口开发 3.微信公众号开发 - token获取(保证同一时间段内只请求一次) 4.微信公众号 ...

  2. 微信公众号开发(一)------对接公众号

    微信公众号开发(一)------对接公众号 前言 一直以来对微信公众号开发想去了解一下,刚好最近有时间去学习,在这里记录一下,方便以后查阅. 正文 微信公众号对接服务器 一.接入 首先我们要去申请一个 ...

  3. 微信公众 mysql回复图片_微信公众号开发之微信公共平台消息回复类实例

    本文实例讲述了微信公众号开发之微信公共平台消息回复类.分享给大家供大家参考.具体如下: 微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,这里就给各位 ...

  4. 视频教程-基于python的微信公众号开发教程-微信开发

    基于python的微信公众号开发教程 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考)--"信 ...

  5. 微信公众号开发之微信公众平台与公众号第三方平台区别

    微信公众号开发分为微信公众平台和公众号第三方平台. 首先需要一个认证服务号,然后在设置,基本配置里面配置公众号开发信息和服务器配置. 这是我们会得到开发者ID(AppID),开发者密码(AppSecr ...

  6. Java微信公众号开发之微信粉丝信息一键同步

    1.前言 在公众号开发的过程中,一般都需要获取粉丝资料,针对单个粉丝,我们可以通过openid获取其粉丝信息: 但不排除这种业务,比如目前开发的公众号已经在使用中,,当前的框架或者功能已经不能够满足用 ...

  7. 【java 微信公众号开发】 微信端获取code和opendId,access_token 步骤调试

    一.网页授权 页面授权获取code,到微信公众平台配置, https://open.weixin.qq.com/connect/oauth2/authorize?appid=Appid&red ...

  8. 微信公众号开发以及测试公众号菜单配置

    微信公众号开发 测试号申请 测试号配置 公众号菜单配置 1.获取access_token 2.新增自定义菜单 微信扫描关注公众号微信公众平台 测试号申请 1.测试号申请 开发的时候需要一个个人的公众号 ...

  9. 微信公众号开发__微信网页授权并获取用户基本信息(是否关注公众号、头像、昵称等)

    本人最近要做微信公众号网页开发的项目,其中有个需求是判断用户是否关注公众号,由于之前没有接触过微信授权的东西,所以提前开始做调研.在度娘上看了好多博客.百度知道.百度经验.知乎问答等,还仔细阅读了微信 ...

  10. H5微信公众号开发,微信支付

    (如需完整代码,开发遇到什么问题,可与本人联系,代码给大家下载并帮你解决问题,微信号:1131237188) 1.公众号开发,首先需要微信公众号的appId,secret 相当于账号密码 2.到公众号 ...

最新文章

  1. bldc不同载波频率_广播百科 频率调制
  2. SLAM-ch2-使用kdevelop创建helloWorld程序
  3. pyqt5 listview 不默认选中_pyqt5 商店小票打印的实现模板
  4. C++读取numpy数据二进制文件
  5. 华为AR engine 应用开发学习教程
  6. Catalan数表达式完整推导
  7. java ee 设计模式_Java EE 设计模式解析与应用_源雷技术空间
  8. SQLPLUS登陆命令
  9. dubbo架构概览-dubbo源码解析
  10. 如何利用卡诺云系统管理早教机构?昆明收银系统还有此妙用!
  11. Cortex m0+笔记
  12. 容斥原理解决某个区间[1,n]闭区间与m互质数数量问题
  13. Ubuntu/Debian 微信安装
  14. 那些年看过的电影之《绿皮书》
  15. 争对让望对思野葛对山栀注解_中华经典名著《笠翁对韵》全文解释(上卷四支)...
  16. 【ESP 保姆级教程】疯狂毕设篇 —— 案例:基于阿里云、小程序、Arduino的温湿度监控系统
  17. The song from the Chef
  18. 从零开始搭建多租户自洽的权限数据配置模块(一)
  19. B/S、C/S与RIA
  20. linux下修改IP的方法

热门文章

  1. 约瑟夫出圈问题之幼儿园做游戏
  2. Apache Velocity 模板语言 特殊字符${ $!{ 原样输出问题 转义符 # ! 无效
  3. 云架构Linux运维,【Linux云计算架构:第三阶段-Linux高级运维...
  4. ios appstore 审核 Guideline 5.2.2 资讯类APP解决方案
  5. android正反面切换,普通安卓手机数据线可以正反插吗?你一定猜错了
  6. 手机/微信/浏览器的字体设置太大,rem 计算不准确
  7. 可以帮助提升程序员高效工作效率的常用小工具推荐
  8. 解封ChatGPT我只用了一句话
  9. 彩色图像增强opencv
  10. 【COCOS2DX-BOX2D游戏开发之一】Box2d概念