java 配置微信js sdk,微信JSSDKconfig接口注入权限验证配置的参数获取--java版
步骤看官网文档,这里只有java后台代码
签名工具类
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
/**
* @author xmg
* @Description 签名工具类
* @Date:2019/5/7
*/
public class SignUtil {
/**
* 前端jssdk页面配置需要用到的配置参数
* @param url
* @return {appid,timestamp,nonceStr,signature}
* @throws Exception
*/
public static HashMap jsSDK_Sign(String url) throws Exception {
String nonce_str = create_nonce_str();
String timestamp= System.currentTimeMillis()/1000 + "";
String jsapi_ticket= WxService.getJsSdkTicket();
// 注意这里参数名必须全部小写,且必须有序
// 参数
Map packageParams = new HashMap<>();
packageParams.put("url", url);
packageParams.put("noncestr", nonce_str);
packageParams.put("jsapi_ticket", jsapi_ticket);
packageParams.put("timestamp", timestamp);
// 获得拼接好的参数,按照ASCLL大小排序
String createLinkString = createLinkString(packageParams);
String signature = SHA1(createLinkString);
// 参数封装,返回前台
HashMap jssdk=new HashMap();
jssdk.put("appId", WxService.APP_ID);
jssdk.put("timestamp", timestamp);
jssdk.put("nonceStr", nonce_str);
jssdk.put("signature", signature);
return jssdk;
}
public static String SHA1(String decript) {
try {
MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
digest.update(decript.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
/**
* 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
* @param params 需要排序并参与字符拼接的参数组
* @return 拼接后字符串
*/
public static String createLinkString(Map params) {
List keys = new ArrayList(params.keySet());
Collections.sort(keys);
String prestr = "";
for (int i = 0; i < keys.size(); i++) {
String key = keys.get(i);
String value = params.get(key);
if (i == keys.size() - 1) {// 拼接时,不包括最后一个&字符
prestr = prestr + key + "=" + value;
} else {
prestr = prestr + key + "=" + value + "&";
}
}
return prestr;
}
private static String create_nonce_str() {
return UUID.randomUUID().toString();
}
}
/**
* @author xmg
* @Description Ticket封装
* @Date:2019/5/7 0:31
*/
public class Ticket {
/** ticket */
private String ticket;
/** 过期时间 */
private long expiresTime;
public String getTicket() {
return ticket;
}
public void setTicket(String ticket) {
this.ticket = ticket;
}
public long getExpiresTime() {
return expiresTime;
}
public void setExpiresTime(long expiresTime) {
this.expiresTime = expiresTime;
}
public Ticket(String ticket, String expiresIn) {
super();
this.ticket = ticket;
this.expiresTime = System.currentTimeMillis() + Integer.parseInt(expiresIn)*1000;
}
/**
* 判断token是否过期
* @return
*/
public boolean isExpired(){
return System.currentTimeMillis() > this.expiresTime;
}
}
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.io.InputStream;
import java.util.*;
/**
* @author xmg
* @Description
* @email 463364973@qq.com
*
* Date:2019/4/5 15:25
*/
@Service
public class WxService {
private final static Logger LOGGER = LoggerFactory.getLogger(WxService.class);
/** 获取ticket地址 */
private final static String GET_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";
/** appid */
public final static String APP_ID = "你自己appid";
/** appsecret */
public final static String APP_SECRET = "你自己的secret";
private static Ticket TICKET;
/**
* 获取ticket
*/
private static void getTicket(){
// RestTemplate
RestTemplate restTemplate = new RestTemplate();
String url = GET_TICKET_URL.replace("ACCESS_TOKEN",getAccessToken());
String forObject = restTemplate.getForObject(url, String.class);
JSONObject jsonObject = JSONUtil.parseObj(forObject);
String ticket = jsonObject.getStr("ticket");
String expiresIn = jsonObject.getStr("expires_in");
// 创建token对象,并存起来
TICKET = new Ticket(ticket,expiresIn);
}
/**
* 向外暴露的获取Ticket方法
* @return
*/
public static String getJsSdkTicket(){
if (TICKET == null || TICKET.isExpired()){
getTicket();
}
return TICKET.getTicket();
}
}
java 配置微信js sdk,微信JSSDKconfig接口注入权限验证配置的参数获取--java版相关推荐
- C# 微信JS-SDK之config接口注入权限验证invalid signature签名错误
文章目录 1.开发环境 2.我的代码 3.问题描述 4.问题分析 5.问题根源 6.解决办法 记一次使用微信JS-SDK分享接口,config接口注入权限验证失败, 提示invalid signatu ...
- 微信js sdk图片接口 上传图片
开发微信平台网页不可避免的需要调用微信提供的接口.微信JS-SDK提供了方便的调用. 需要实现上传图片更换头像的功能,要用到图片相关的几个接口.根据微信开发者文档的说明,步骤一绑定域名,步骤二引入js ...
- PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
2019独角兽企业重金招聘Python工程师标准>>> 一.概述和通过config接口注入权限验证配置 由于微信的临时素材(如:录音文件)上传到微信服务器上,微信后台保存时间为3天. ...
- 微信js sdk 授权上传头像下载代码片段和注意事项
/* * 描述:当前页授权 * @param url 例:index.html / 如果有参数,需加密index.html?id=1 */ 1.对需要运用js sdk的页面授权 get ...
- 使用微信js sdk关于选择及上传图片至腾讯云COS
使用微信js sdk关于选择及上传图片至腾讯云COS 使用微信js sdk关于选择及上传图片至腾讯云COS 背景 名词 参考 效果图展示 开发步骤 1:概要步骤 2:上代码 结束: 使用微信js sd ...
- 实战微信JS SDK开发:贺卡制作与播放(1)
前段时间忙于CanTK 2.0的开发,所以博客一直没有更新.CanTK 2.0主要增强了游戏和富媒体的开发,现在编码和测试基本完成了,等文档完成了再正式发布,里面有不少激动人心的功能,等发布时再一一细 ...
- 微信-js sdk invalid signature签名错误 问题解决
微信-js sdk invalid signature签名错误 问题解决 参考文章: (1)微信-js sdk invalid signature签名错误 问题解决 (2)https://www.cn ...
- 微信js sdk 分享 失败 有时候好 有时候坏
微信js sdk 分享 失败 有时候好 有时候坏 用了一个www开头的域名 和一个xx.com的域名 两个在解析上有问题. 实践是www.xx.com的比较 稳定 转载于:https://www.c ...
- 微信JS SDK开放,前端开发者“鸡冻”了!
HTML5又一次逆袭了,其实之前微信也是有一些JS API的,比如分享.但这次一股脑开放了拍摄.录音.语音识别.二维码.地图.支付.分享.卡券等几十个API,这条消息不需宣传,瞬间就占满了HTML5从 ...
最新文章
- linux c 命令行参数处理函数 getopt()和getopt_long()
- 皮一皮:所以这也是大数据的一种?
- mybatis sql标签_这谁顶得住?Mybatis 十八连环问
- Azure实践之automation自动整理资产信息
- Redis 面试题 50 问,史上最全
- Python有哪些是必须学的运算符?
- Swift面向对象基础(上)——Swift中的类和结构体(下)
- python方向键键值_python字典键值对的添加和遍历方法
- android纹理存储,Android:OpenGL存储纹理多长时间?
- 程序员的进阶课-架构师之路(3)-线性表
- 管道符和作业控制 shell变量 环境变量配置文件
- Activiti 工作流变量的修改方法
- 2.第一个页面amp;amp;分辨率和rpx
- 计算机硬盘通过usb接口,并口硬盘转usb接口的方法介绍【详解】
- Python自学教程3-英语不好,变量怎么命名
- foxmail群发邮件怎么发?
- apktool 回编译说文件名或扩展名太长
- 关于ios9中得AddressBook和AddressBookUI框架过时问题
- java 笔记本i7 i5_笔记本i7低压cpu性能抵不过i5标压cpu,为什么还叫i7
- 使用BadBoy录制JMeter脚本