步骤看官网文档,这里只有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版相关推荐

  1. C# 微信JS-SDK之config接口注入权限验证invalid signature签名错误

    文章目录 1.开发环境 2.我的代码 3.问题描述 4.问题分析 5.问题根源 6.解决办法 记一次使用微信JS-SDK分享接口,config接口注入权限验证失败, 提示invalid signatu ...

  2. 微信js sdk图片接口 上传图片

    开发微信平台网页不可避免的需要调用微信提供的接口.微信JS-SDK提供了方便的调用. 需要实现上传图片更换头像的功能,要用到图片相关的几个接口.根据微信开发者文档的说明,步骤一绑定域名,步骤二引入js ...

  3. PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述和通过config接口注入权限验证配置 由于微信的临时素材(如:录音文件)上传到微信服务器上,微信后台保存时间为3天. ...

  4. 微信js sdk 授权上传头像下载代码片段和注意事项

    /*  * 描述:当前页授权  * @param url   例:index.html / 如果有参数,需加密index.html?id=1     */ 1.对需要运用js sdk的页面授权 get ...

  5. 使用微信js sdk关于选择及上传图片至腾讯云COS

    使用微信js sdk关于选择及上传图片至腾讯云COS 使用微信js sdk关于选择及上传图片至腾讯云COS 背景 名词 参考 效果图展示 开发步骤 1:概要步骤 2:上代码 结束: 使用微信js sd ...

  6. 实战微信JS SDK开发:贺卡制作与播放(1)

    前段时间忙于CanTK 2.0的开发,所以博客一直没有更新.CanTK 2.0主要增强了游戏和富媒体的开发,现在编码和测试基本完成了,等文档完成了再正式发布,里面有不少激动人心的功能,等发布时再一一细 ...

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

    微信-js sdk invalid signature签名错误 问题解决 参考文章: (1)微信-js sdk invalid signature签名错误 问题解决 (2)https://www.cn ...

  8. 微信js sdk 分享 失败 有时候好 有时候坏

    微信js sdk 分享 失败  有时候好 有时候坏 用了一个www开头的域名 和一个xx.com的域名 两个在解析上有问题. 实践是www.xx.com的比较 稳定 转载于:https://www.c ...

  9. 微信JS SDK开放,前端开发者“鸡冻”了!

    HTML5又一次逆袭了,其实之前微信也是有一些JS API的,比如分享.但这次一股脑开放了拍摄.录音.语音识别.二维码.地图.支付.分享.卡券等几十个API,这条消息不需宣传,瞬间就占满了HTML5从 ...

最新文章

  1. Python快速入门,你想要的就在这里了!
  2. 双稳态电路的两个稳定状态是什么_振荡器基础4——什么是多谐振荡器(又称:弛张振荡器)?...
  3. Python 常见的17个错误分析
  4. mysql explain的使用(优化查询)
  5. ios开发之.pch文件的使用
  6. R plot图片背景设置为透明_R语言入门第十二讲:基础绘图(二)------plot与par函数(1)...
  7. 关于“三门问题”的一些想法
  8. 架构设计 例子和实践
  9. 你以为PHP那么好自定义升级?
  10. HTML5写的简单小游戏-绵羊快跑
  11. 六石管理学:谈谈工作技能培训
  12. Android签名证书:jks和keystore
  13. 基于POP3协议收取邮件
  14. 计算机导论alu的全名,计算机导论试题1.doc
  15. mac安装WireShark2.0新手教程
  16. 基于curl 的zabbix API调用
  17. 如何给信号加噪声,matlab
  18. LeetCode-64.最小路径和
  19. SQL数据库基础操作
  20. Protege 5.5 的OWLViz堆叠一块无法正常显示,通过下载设置GraphViz解决

热门文章

  1. 微信小程序实现抽奖走马灯+圆点闪烁
  2. 雷军不再担任小米生态链企业紫米电子股东
  3. MAC Office 2016数据文件位置
  4. 好用!期待已久的文本块功能究竟如何在 Java 13 中发挥作用?
  5. php 转换成字节数组吗,在PHP中如何将字节数组转换成字符串?
  6. ACTIVITI 5.22 表结构详情
  7. Spring整合Mybatis注解方式
  8. Ubuntu 20.04LTS 安装openni2、编译opencv、连接Kinect v2
  9. Golang常用设计模式
  10. QEMU中的CPU类型设计