Java微信公众号开发之微信公众平台接入开发者
微信开发者接入官方文档 : 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.微信公众号开发 - 环境搭建 2.微信公众号开发 - 配置表设计以及接入公众号接口开发 3.微信公众号开发 - token获取(保证同一时间段内只请求一次) 4.微信公众号 ...
- 微信公众号开发(一)------对接公众号
微信公众号开发(一)------对接公众号 前言 一直以来对微信公众号开发想去了解一下,刚好最近有时间去学习,在这里记录一下,方便以后查阅. 正文 微信公众号对接服务器 一.接入 首先我们要去申请一个 ...
- 微信公众 mysql回复图片_微信公众号开发之微信公共平台消息回复类实例
本文实例讲述了微信公众号开发之微信公共平台消息回复类.分享给大家供大家参考.具体如下: 微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,这里就给各位 ...
- 视频教程-基于python的微信公众号开发教程-微信开发
基于python的微信公众号开发教程 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考)--"信 ...
- 微信公众号开发之微信公众平台与公众号第三方平台区别
微信公众号开发分为微信公众平台和公众号第三方平台. 首先需要一个认证服务号,然后在设置,基本配置里面配置公众号开发信息和服务器配置. 这是我们会得到开发者ID(AppID),开发者密码(AppSecr ...
- Java微信公众号开发之微信粉丝信息一键同步
1.前言 在公众号开发的过程中,一般都需要获取粉丝资料,针对单个粉丝,我们可以通过openid获取其粉丝信息: 但不排除这种业务,比如目前开发的公众号已经在使用中,,当前的框架或者功能已经不能够满足用 ...
- 【java 微信公众号开发】 微信端获取code和opendId,access_token 步骤调试
一.网页授权 页面授权获取code,到微信公众平台配置, https://open.weixin.qq.com/connect/oauth2/authorize?appid=Appid&red ...
- 微信公众号开发以及测试公众号菜单配置
微信公众号开发 测试号申请 测试号配置 公众号菜单配置 1.获取access_token 2.新增自定义菜单 微信扫描关注公众号微信公众平台 测试号申请 1.测试号申请 开发的时候需要一个个人的公众号 ...
- 微信公众号开发__微信网页授权并获取用户基本信息(是否关注公众号、头像、昵称等)
本人最近要做微信公众号网页开发的项目,其中有个需求是判断用户是否关注公众号,由于之前没有接触过微信授权的东西,所以提前开始做调研.在度娘上看了好多博客.百度知道.百度经验.知乎问答等,还仔细阅读了微信 ...
- H5微信公众号开发,微信支付
(如需完整代码,开发遇到什么问题,可与本人联系,代码给大家下载并帮你解决问题,微信号:1131237188) 1.公众号开发,首先需要微信公众号的appId,secret 相当于账号密码 2.到公众号 ...
最新文章
- bldc不同载波频率_广播百科 频率调制
- SLAM-ch2-使用kdevelop创建helloWorld程序
- pyqt5 listview 不默认选中_pyqt5 商店小票打印的实现模板
- C++读取numpy数据二进制文件
- 华为AR engine 应用开发学习教程
- Catalan数表达式完整推导
- java ee 设计模式_Java EE 设计模式解析与应用_源雷技术空间
- SQLPLUS登陆命令
- dubbo架构概览-dubbo源码解析
- 如何利用卡诺云系统管理早教机构?昆明收银系统还有此妙用!
- Cortex m0+笔记
- 容斥原理解决某个区间[1,n]闭区间与m互质数数量问题
- Ubuntu/Debian 微信安装
- 那些年看过的电影之《绿皮书》
- 争对让望对思野葛对山栀注解_中华经典名著《笠翁对韵》全文解释(上卷四支)...
- 【ESP 保姆级教程】疯狂毕设篇 —— 案例:基于阿里云、小程序、Arduino的温湿度监控系统
- The song from the Chef
- 从零开始搭建多租户自洽的权限数据配置模块(一)
- B/S、C/S与RIA
- linux下修改IP的方法
热门文章
- 约瑟夫出圈问题之幼儿园做游戏
- Apache Velocity 模板语言 特殊字符${ $!{ 原样输出问题 转义符 # ! 无效
- 云架构Linux运维,【Linux云计算架构:第三阶段-Linux高级运维...
- ios appstore 审核 Guideline 5.2.2 资讯类APP解决方案
- android正反面切换,普通安卓手机数据线可以正反插吗?你一定猜错了
- 手机/微信/浏览器的字体设置太大,rem 计算不准确
- 可以帮助提升程序员高效工作效率的常用小工具推荐
- 解封ChatGPT我只用了一句话
- 彩色图像增强opencv
- 【COCOS2DX-BOX2D游戏开发之一】Box2d概念