网站首页 > 技术教程 正文
这几年微信公众平台开发比较热门,但是微信公众平台的SDK和java的sample比较少,很多都是靠自己摸索,首先进行微信公众号的开发,你必须得有个公众号或者测试号,有了这些条件后,你可以在后台里面进行配置,验证服务器的操作。如果对我的文章有兴趣,欢迎订阅我的头条号,一点热,yeehot.com
1、登陆微信服务器后台,输入你的服务器地址,还有生成你的token和EncodingAESKey
这里就说明一下,其中URL是开发者用来接收微信服务器数据的接口URL。Token我们可以自己输入的,这个和我们的oauth 的token是一样的。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。如下图
2、创建一个srpingmvc的项目
这里我就不作详细的介绍了。我之前的文章已经做了一个图文的直播了。如果需要看回之前的文章,请自行查找
IntelliJ IDEA搭建springmvc项目图文介绍
3、查看微信开发者的文档
根据微信公众账号的文档,里面要验证开发者这个步骤,首先你需要验证URL有效性,开发者在微信后台提交上面的参数后,微信会发一个get的请求到你的服务器URL,当然这个URL必须是可以外网访问到的,里面包含了四个参数。
signature,用来比对我们自己本地生成的sign和这个signature是否相等的。相等就返回参数echostr。
timestamp:时间戳
nonce:随机数
echostr:一个随机字符串
开发者通过检验signature对请求进行校验,若确认此次GET请求来自微信服务器,原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
详情可以阅读
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318183&token=&lang=zh_CN
4、创建一个controller
了解上面的规则后,我们可以开发这个微信验证的controller,我们会收到四个参数,
我们需要timestamp参数和nonce参数和从服务器后台配置的token 按照字母的升序进行拼接,然后使用SHA-1对字符散列,然后判断获得加密后的字符串可与signature对比,如果成功返回nonce
@ResponseBody
@RequestMapping(value = "/wx/developer", method = RequestMethod.GET)
public String index(HttpServletRequest request) {
Map<String, String> params = new HashMap<String, String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
params.put(name, valueStr);
}
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
String token="后台的token,自行设置";
String sign=digest(params,token);
if (sign.equals(signature))
{
return echostr;
}
else {
return "";
}
}
5、将参数进行排序,
我们这里只需要对token,timestamp,nonce进行排序,所以直接取出获得的参数和服务器的token进行排序就可以了。
public static String digest(Map<String, String> params,String token) {
StringBuilder result = new StringBuilder();
List<String> keys = new ArrayList<String>();
keys.add(token);
keys.add(params.get("timestamp"));
keys.add(params.get("nonce"));
Collections.sort(keys);
for (Iterator<String> iterator = keys.iterator(); iterator.hasNext(); ) {
String key = iterator.next();
result.append(key);
}
System.out.println("sign="+result.toString());
String reuslt="";
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(result.toString().getBytes("UTF-8"));
reuslt = byteToHex(crypt.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
System.out.println("result="+reuslt);
return reuslt;
}
5、使用SHA-1需要转换层十六进制的字符输出
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
6、打包程序发布到服务器,然后在后台验证一下
当验证成功后可以看到我们的配置信息
当然我们也可以本地模拟一下数据来测试一下
http://localhost:8080/wx/developer?signature=d3c933fd3ba7b7c8b3e0b2fd906b00001fbc25de×tamp=1469529446&nonce=494132107&echostr=7427120323186098047
今天就讲到这里,欢迎继续关注我,我的头条号,一点热,www.yeehot.com
如果有问题欢迎留言咨询,欢迎转发与收藏,如果转载到其他地方,请与我联系。
猜你喜欢
- 2025-07-21 “很快”“《欢乐颂》微信公众号热点洞察”报告发布
- 2025-07-21 微信公众号现全国性瘫痪 开发哥为鹅厂庆生耽误事?
- 2025-07-21 心理测评测试h5公众号字节微信小程序app开源版开发
- 2025-07-21 微信订阅号和服务号有什么区别?什么是微信公众号
- 2025-07-21 公众号+微商城+小程序+视频号+直播+朋友圈+企业微信...
- 2025-07-21 微信公众号如何选择推送内容,淄博微信开发
- 2025-07-21 微信公众号开发出现 cURL error 60: SSL certificate problem ssl证书
- 2025-07-21 Zoho CRM如何无需API开发连接OA系统、公众号、钉钉、企业微信?
- 2025-07-21 “西安交警”微信公众号将开发新功能
- 2025-07-21 nodejs微信公众号开发上传图文消息素材报错-40007
你 发表评论:
欢迎- 07-23NAS实现自己的网盘搜索网站,网盘搜索程序——爱盼
- 07-23不再下载垃圾,快速找到下载链接秘诀
- 07-23软件下载精准查找下载链接终极大招
- 07-23吾爱大佬魔改,这个软件太有料(吾爱修改)
- 07-23全能下载神器文件蜈蚣体验(全能工具箱软件下载)
- 07-23跨域问题解决方案:开发代理(本地开发跨域问题)
- 07-23在群晖NAS上搭建网站的完整指南(群晖nas部署)
- 07-23Nginx负载均衡:nginx.conf配置文件说明!
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)