开始接入
因微信公众号开发需要实际注册公众号服务,所以这边采用微信测试号进行开发。
传送门: 微信公众平台接口测试帐号申请
所谓的代公众号指的就是将公众号授权给第三方平台进行管理,第三方平台拥有全部或部分的该公众号的接口权限,可以帮助管理运营公众号。
此处展示的为测试号后台配置
公众平台配置
消息加解密方式选择安全模式。启用服务器配置时,微信需要验证所填服务器地址url是否可用,开发时使用内网穿透外网工具。url的接口开发完成后才能保存成功。
- IP白名单不要忘记配置,多个IP换行分隔。
- 如果启用了服务器配置,微信公众平台将不再提供自定义菜单、自动回复等基础功能,平台上原有的菜单将会失效。
场景:公众号由运营人员运营,开发人员需要在自家的产品上嵌入公众号。很尴尬的情况出现了,运营人员不能放弃使用微信公众平台,开发人员需要接入公众号。对于这种情况,可以在公众号关闭服务器配置,将公众号授权给第三方平台,微信会将公众号的事件推送给第三方平台,以第三方平台的方式进行开发。(意思就是自己开发一个第三方模块,替换掉微信公众号因服务器配置而关闭的服务。)
开发前准备
-
消息加解密工具
微信提供了java版本的加解密的工具类,但是不是maven工程,楼主打包了一份maven工程,内容如上,自行deploy到maven仓库中。
配置文件中添加appID和appsecret
#微信公众号配置
wx:
mp:
#公众号开发者ID
app-id: 微信管理后台提供的公众号appId
#开发者密码
secret: 微信管理后台提供的公众号开发者密码
#消息加解密密钥
encodingAESKey: 微信管理后台提供的加解密密钥
后端微信接入接口(填写url时,ip要用内网穿透工具解析成外网域名)
/**
* 微信接入接口
* @param request
* @param response
* @throws IOException
* @throws WxErrorException
*/
@RequestMapping(value = "/test",method = RequestMethod.GET)
@ResponseBody
public Object init(HttpServletRequest request , HttpServletResponse response) throws IOException {
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
String[] arrs = {WeinController.TOKEN,nonce,timestamp};
Arrays.sort(arrs);
StringBuffer sb = new StringBuffer();
for (String a : arrs){
sb.append(a);
}
String sha1 = SecurtiyKit.sha1(sb.toString());
System.out.println(sha1);
if(sha1.equals(signature)){
System.out.println("接入成功");
return echostr;
}
System.out.println("接入失败");
return null;
}
定义TOKEN(此处在微信公众配置处同步设置)
public static final String TOKEN = "weixin";
sh1加密方法
public String sha1(String str){
try {
StringBuffer sb = new StringBuffer();
MessageDigest md = null;
md = MessageDigest.getInstance("sha1");
md.update(str.getBytes());
byte[] msg = md.digest();
for (byte b :msg){
sb.append(String.format("%02x",b));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
点击配置提交 通过验证接口验证成功即配置成功