package com.dhht.wechat.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import java.util.HashMap;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap; /**
* @Author: sh
* @Description: WechatUtil
* @Date: 17:46 2019/10/15
*/
public class WechatUtil { final static String KEY_S = "SIGNKEY-"; public static String getSignKey(String url){
return KEY_S+url;
} /**
* 获取access_token
*
* @param appId
* @param secret
* @return
*/
public static String getAccessToken(String appId, String secret) {
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + secret;
JSONObject jsonObject = SendMsgUtil.httpRequest(url, "GET", "{}");// 获取openid
String access_token = jsonObject.getString("access_token");
return access_token;
} /**
* 获取ticket
*
* @param accessToken
* @return
*/
public static String getJsapiTicket(String accessToken) {
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + "&type=jsapi";
JSONObject jsonObject = SendMsgUtil.httpRequest(url, "GET", "{}");
String ticket = jsonObject.getString("ticket");
return ticket;
} public static String geneJSSDKSign(String jsapiTicket, String url) {
Map<String, String> configMap = new HashMap<>(8);
String nonceStr = DateUtil.get32UUIDMilli();
String timestamp = Long.toString(System.currentTimeMillis() / 1000);
configMap.put("noncestr", nonceStr);
configMap.put("jsapi_ticket", jsapiTicket);
configMap.put("timestamp", timestamp);
configMap.put("url", url);
String sign = gengeSign(configMap);//SignUtils.createSign(configMap, "sha1", mechKey, null);
configMap.put("signature",sign);
configMap.remove("noncestr");
configMap.put("nonceStr",nonceStr);
Map result = new HashMap();
result.put("code",1);
result.put("message","OK");
result.put("data",configMap);
return JSON.toJSONString(result);
} public static String gengeSign(Map<String, String> params) {
SortedMap<String, String> sortedMap = new TreeMap<>(params);
StringBuilder toSign = new StringBuilder();
for (String key : sortedMap.keySet()) {
String value = params.get(key);
toSign.append(key).append("=").append(value).append("&");
}
String val = toSign.toString();
val = val.substring(0,val.lastIndexOf("&"));
System.out.println(val);
String digest = SignatureUtil.sha1Encrypt(val);
return digest;
} public static void main(String[] args) {
String time = Long.toString(System.currentTimeMillis() / 1000);
System.out.println(time);
System.out.println(geneJSSDKSign("sdfdsfds", "fdfdfd@@8"));
}
}

微信请求参数生成SHA1签名的更多相关文章

  1. postman发送HTTP请求自动生成MD5签名

    POSTMAN是常用的接口测试工具 如何进行MD5签名呢? 代码如下: /** * 通过request.data获取body的内容,这个是postman内置变量 * 常用内置参数如下: * reque ...

  2. java微信开发(wechat4j)——得到微信请求参数

    微信平台会在请求的post数据中带有一些参数,例如用户的openid之类的信息,当你使用了wechat4j之后,得到这些信息是非常方便的. public class Lejian extends We ...

  3. jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战

    背景及思路: 需求:要做 创建新卡 接口的测试,要求: 1. 不需要每次手动修改请求参数. 方案:文中先用excle将数据准备好,导出为csv格式,再用jmeter的csv请求进行参数化 2. 卡号需 ...

  4. 微信-js sdk invalid signature签名错误 问题解决

    如果出现 invalid signature,首先可以确定的是你的签名算法有问题.建议:首先查看微信官方网站给出的解决方案,链接为: http://mp.weixin.qq.com/wiki/7/aa ...

  5. 【转】js生成接口请求参数签名加密

    js生成接口请求参数签名加密 签名算法规则: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=v ...

  6. js生成接口请求参数签名加密

    js生成接口请求参数签名加密 定义规则:将所有参数字段按首字母排序, 拼接成key1 = value1 & key2 = value2的格式,再在末尾拼接上key = appSecret, 再 ...

  7. 【支付专区】之微信支付构建请求参数xml

    /** * <p>Desc:weChat构建请求参数</p> * <p>参数名ASCII码从小到大排序(字典序)</p> * @param params ...

  8. 微信小程序:post请求参数放在请求体中还是拼接到URL中需要看后台是如何接收的

    前端发送post请求时,请求参数可以放在请求中,代码如下: function post(url, data, callback) { wx.request({ method: 'POST', url: ...

  9. 前端请求参数MD5加密校验,参数串解密

    首先引入MD5加密库:=>https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js; 步骤:=>1.请求前对参数进行字典升序排序,排 ...

随机推荐

  1. php.basic.functions

    array_unshift call_user_func_array闭包 下面是学院的代码 class Container { protected $binds; protected $instanc ...

  2. Web.config中executionTimeout的单位

    executionTimeout:表示允许执行请求的最大时间限制,单位为秒

  3. idea导入新项目后右键main方法没有Run xxx.main()

    刚安装的idea2019.1,基本上没有什么配置.导入从github clone下来的工程.鼠标右键main方法时没有发现 run 选项,如下图所示: 这里是配置有问题造成的,对比下正常的工程,可以发 ...

  4. BZOJ:2190: [SDOI2008]仪仗队

    题解:欧拉函数 #include<iostream> #include<cstdio> #include<cstring> using namespace std; ...

  5. mysql数据库索引优化

    参考 :http://www.cnblogs.com/yangmei123/archive/2016/04/10/5375723.html MySQL数据库的优化:    数据库优化的目的:     ...

  6. docker修改存储路径(转载)

    系统盘只有40G,有时docker镜像会占据大量的存储空间,于是想把docker的默认存储位置改成挂载的数据盘.docker的默认存储位置未为:/var/lib/docker 更改docker的默认存 ...

  7. 阿里云服务器搭建详解——Ubuntu

    由于自己电脑配置跟不上,双系统一开,整个电脑就会变得非常卡顿,所以决定在阿里云买一个云服务器.听朋友说,学生买的话是非常便宜的,比每月开个SVIP还便宜.今天上网看了下,果然如此,每月只要9.9,确实 ...

  8. go 的参数传递

    再go语言中没有引用传递,所有都是按照值拷贝的方式传递的. 数组:实际就是堆栈上的一段连续内存,和c类似.(可以更加反编译代码推断 go tool compile -S main.go > ma ...

  9. sed使用案例

    简介: sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用 ...

  10. SpringCloud学习之Stream消息驱动【自定义通道】(十一)

    如果不清楚本篇内容的,请务必先去看完上一篇再看本篇,否则阅读起来可能会有部分障碍和困难: 上一篇文章<SpringCloud学习之Stream消息驱动[默认通道](十)>我们简单用自定义通 ...