文档章节

java实现微信公众平台中的字典排序

binhu
 binhu
发布于 2017/03/03 08:54
字数 365
阅读 293
收藏 0

一、利用Java自带的方法实现字典序排序
 

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;



public static void main(String [] args){
/*
* 规则描述
*1. 将token、timestamp、nonce三个参数进行字典序排序
*2. 将三个参数字符串拼接成一个字符串进行sha1加密
*3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 
*/

String signature="0f829ac4e6689efbd338abda4c090f90bab60725";
String timestamp="1455868453";
String nonce="1677866950";
String token="weixin";

ArrayList<String> list=new ArrayList<String>();
list.add(nonce);
list.add(timestamp);
list.add(token);

Collections.sort(list);


System.out.println(DigestUtils.sha1Hex(list.get(0)+list.get(1)+list.get(2)));

//微信返回的加密串
System.out.println(signature2);
}

控制台输出:

0f829ac4e6689efbd338abda4c090f90bab60725
0f829ac4e6689efbd338abda4c090f90bab60725

 

二、java中对map的字典序排序

import java.util.ArrayList;  
import java.util.Collection;  
import java.util.Collections;  
import java.util.HashMap;  
import java.util.List;  
  
  
import org.apache.commons.codec.digest.DigestUtils;  
  
  
import com.opensymphony.xwork2.ActionSupport;  
  
  
public class Test extends ActionSupport {  
//测试页面  
public String test(){  
  
return SUCCESS;  
}  
  
public static void main(String [] args){  
String jsapi_ticket="kgt8ON7yVITDhtdwci0qef4Fd1u2d2iWwTE-nt2tSR7Me3FmWAhtxJa3QQCiMdLper4cUrqpDxkDJ6ljLgc7PA";  
int timestamp=1460637652;  
String nonceStr="C1WNnEpCwq4wa158";  
String url="http://qq.test.com/test/index.html";  
  
  
  
//字典序排序  
HashMap<String,String> map=new HashMap<String,String>();  
  
map.put("jsapi_ticket", jsapi_ticket);  
map.put("timestamp", timestamp+"");  
map.put("nonceStr", nonceStr);  
map.put("url", url);  
  
Collection<String> keyset= map.keySet();   
  
List list=new ArrayList<String>(keyset);  
  
Collections.sort(list);  
//这种打印出的字符串顺序和微信官网提供的字典序顺序是一致的  
for(int i=0;i<list.size();i++){  
System.out.println(list.get(i)+"="+map.get(list.get(i)));  
}  
  
//微信官网写的按照字典序排序后的字符串  
String sign="jsapi_ticket="+jsapi_ticket+"&noncestr="+nonceStr+"×tamp="+timestamp+"&url="+url;  
  
  
  
//System.out.println(DigestUtils.shaHex("jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com?params=value"));  
//微信返回的加密串  
String signature=DigestUtils.sha1Hex(sign);//sha1加密  
System.out.println(signature);  
  
  
}  
}  

 

© 著作权归作者所有

上一篇: mavn打jar包
binhu
粉丝 18
博文 209
码字总数 205648
作品 0
合肥
私信 提问
Java微信开发_00_资源汇总贴

1.微信公众平台技术文档(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432) 2.微信企业号开发接口文档(http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%BB%E......

rayner
2017/08/07
0
0
在BAE代码部署中遇到问题

@using 你好,想跟你请教个问题:看了您分享的“在百度BAE java环境搭建属于自己的微信公众平台接口”,首先感谢您的无私分享,然后我先现在也申请到了资源,别且建了java-jetty类型应用,但...

山水与共
2014/03/06
329
3
JeeWx 捷微 2.3 发布,JAVA微信管家平台

JeeWx,敏捷微信开发,简称“捷微”,捷微是一款免费开源的JAVA微信管家平台 一、简介 Jeewx是一个开源、高效、敏捷的微信开发平台,采用JAVA语言基于Jeecg快速开发框架实现,Jeewx开源版实现...

Jeecg
2016/03/24
10.6K
0
weixin公众平台相关

@廖凯 你好,想跟你请教个问题: 关于微信公众平台,模拟登陆实现群发功能(主动推送消息),网上有PHP版本的,但是我是做JAVA的,不太清除PHP,能否提供相关JAVA的资料给我下,或者有DEMO,...

battier
2013/06/03
345
3
微信公众帐号开发教程第4篇-消息及消息处理工具的封装

工欲善其事必先利其器!本篇内容主要讲解如何将微信公众平台定义的消息及消息相关的操作封装成工具类,方面后期的使用。这里需要明确的是消息其实是由用户发给你的公众帐号的,消息先被微信平...

bliver
2013/11/29
0
2

没有更多内容

加载失败,请刷新页面

加载更多

springboot+jpa 错误信息org.springframework.beans.factory.BeanCreationException

报错信息 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/a......

冥焱
9分钟前
0
0
威胁快报|新兴挖矿团伙借助shodan作恶,非web应用安全再鸣警钟

近日,阿里云安全发现了一个使用未授权访问漏洞部署恶意Docker镜像进行挖矿的僵尸网络团伙。我们给这一团伙取名为Xulu,因为该团伙使用这个字符串作为挖矿时的用户名。 Xulu并不是第一个攻击...

迷你芊宝宝
16分钟前
0
0
十大经典排序算法动画与解析

排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序。 内部排序是数据记录在内存中进行排序。 而外部排序是因排序的数据很大,一次不能容纳全部的排序记...

夜黑人模糊灬
19分钟前
2
0
7. java枚举

1. 枚举是什么 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便 2. 为什么不用静态常量来替代枚举类呢? 3. 常用方式 3.1 方式1 枚举类: package cn.ali.tencent...

20190513
20分钟前
0
0
elasticsearch – 弹性搜索:“Term”,“Match Phrase”和“Query String”之间的差异

术语查询匹配单个术语,因为它是:不分析值。 所以,它不必根据你索引的情况而降低。 如果您在索引时间提供Bennett并且未分析该值,则以下查询将不返回任何内容: { "query": { "te...

xiaomin0322
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部