微信JS-SDK获取signature签名以及config配置(微信转发分享页面需要)
Js代码
|
其中主要获取signature这个参数,官方文档地址 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
获取signature主要分四部
1、使用APPID和APPSecret获取access_token;
2、使用access_token获取jsapi_ticket ;
3、用时间戳、随机数、jsapi_ticket和要访问的url按照签名算法拼接字符串;
4、对第三步的字符串进行SHA1加密,得到签名。
注意事项:
1、签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
2、签名用的url必须是调用JS接口页面的完整URL。
3、出于安全考虑,开发者必须在服务器端实现签名的逻辑。
第一步:获取access_token(需要在服务器上 )
/** * 微信小程序获取accessToken * * @author Mr.Wen * @time 2017年8月28日 */ public class GetAccessTokenUtil {// 网页授权接口 public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET"; public static Map<String, String> getAccessToken(String appid, String appsecret) {String requestUrl = GetPageAccessTokenUrl.replace("APPID", appid).replace("SECRET", appsecret); HttpClient client = null; Map<String, String> result = new HashMap<String, String>(); String accessToken = null; try {client = new DefaultHttpClient(); HttpGet httpget = new HttpGet(requestUrl); ResponseHandler<String> responseHandler = new BasicResponseHandler(); String response = client.execute(httpget, responseHandler); JSONObject OpenidJSONO = JSONObject.fromObject(response); accessToken = String.valueOf(OpenidJSONO.get("access_token")); result.put("accessToken", accessToken); } catch (Exception e) {e.printStackTrace(); } finally {client.getConnectionManager().shutdown(); }return result; } }
/** * @author Mr.Wen * @description 获取ticket * @date 2018/3/29 */ public class JsapiTicketUtil {// 网页授权接口 public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi"; public static Map<String, String> JsapiTicket(String accessToken) {String requestUrl = GetPageAccessTokenUrl.replace("ACCESS_TOKEN", accessToken); HttpClient client = null; Map<String, String> result = new HashMap<String, String>(); try {client = new DefaultHttpClient(); HttpGet httpget = new HttpGet(requestUrl); ResponseHandler<String> responseHandler = new BasicResponseHandler(); String response = client.execute(httpget, responseHandler); JSONObject OpenidJSONO = JSONObject.fromObject(response); String errcode = String.valueOf(OpenidJSONO.get("errcode")); String errmsg = String.valueOf(OpenidJSONO.get("errmsg")); String ticket = String.valueOf(OpenidJSONO.get("ticket")); String expires_in = String.valueOf(OpenidJSONO.get("expires_in")); result.put("errcode", errcode); result.put("errmsg", errmsg); result.put("ticket", ticket); result.put("expires_in", expires_in); } catch (Exception e) {e.printStackTrace(); } finally {client.getConnectionManager().shutdown(); }return result; } }
第三部:用时间戳、随机数、jsapi_ticket和要访问的url按照签名算法拼接字符串
String noncestr = WXUtil.generate();//随机字符串 String timestamp = String.valueOf(System.currentTimeMillis() / 1000);//时间戳 //4获取url //5、将参数排序并拼接字符串 String str = "jsapi_ticket="+ticket+"&noncestr="+noncestr+"×tamp="+timestamp+"&url="+url;
第四部:对第三步的字符串进行SHA1加密,得到签名,并返回结果
String str = "jsapi_ticket="+ticket+"&noncestr="+noncestr+"×tamp="+timestamp+"&url="+url; //6、将字符串进行sha1加密 String signature = SHA1.SHA1(str); Map<String,String> map=new HashMap(); map.put("timestamp",timestamp); map.put("accessToken",accessToken); map.put("ticket",ticket); map.put("noncestr",noncestr); map.put("signature",signature);
测试返回的结果为:
此时前端js为:
- wx.config({
- debug: true, //调试阶段建议开启
- appId: "APPID",//APPID
- timestamp: "timestamp",//上面main方法中拿到的时间戳timestamp
- nonceStr: "nonceStr",//上面main方法中拿到的随机数nonceStr
- signature: "signature",//上面main方法中拿到的签名signature
- jsApiList: [
- //所有要调用的 API 都要加到这个列表中
- "chooseImage"//从本地的相册、图库选择图片
- ]
- });
以上的时间戳、随机数、签名一定要跟main方法中获取到的一致,否则会报invalid signature错误。
另外,这个签名的有效时间为7200秒,也就是2个小时,因此当超过两个小时候,再访问也会报invalid signature错误。
另外还有一个错误:invalid url domain
这个跟生成签名时用的url有关系,官网的说法是:
invalid url domain当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名,如果使用了端口号,则配置的绑定域名也要加上端口号(一个appid可以绑定三个有效域名)
这个url必须是:“公众号设置---功能设置----JS接口安全域名”中绑定的三个域名之一
若是以上的配置没有问题,且dubug也设置为了true,那么再访问的时候,就会出现一个config:ok,这就说明配置成功了。
微信JS-SDK获取signature签名以及config配置(微信转发分享页面需要)相关推荐
- 微信-js sdk invalid signature签名错误 问题解决
微信-js sdk invalid signature签名错误 问题解决 参考文章: (1)微信-js sdk invalid signature签名错误 问题解决 (2)https://www.cn ...
- 微信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开放,前端开发者“鸡冻”了!
HTML5又一次逆袭了,其实之前微信也是有一些JS API的,比如分享.但这次一股脑开放了拍摄.录音.语音识别.二维码.地图.支付.分享.卡券等几十个API,这条消息不需宣传,瞬间就占满了HTML5从 ...
- 实战微信JS SDK开发:贺卡制作与播放(1)
前段时间忙于CanTK 2.0的开发,所以博客一直没有更新.CanTK 2.0主要增强了游戏和富媒体的开发,现在编码和测试基本完成了,等文档完成了再正式发布,里面有不少激动人心的功能,等发布时再一一细 ...
- 微信js sdk 分享 失败 有时候好 有时候坏
微信js sdk 分享 失败 有时候好 有时候坏 用了一个www开头的域名 和一个xx.com的域名 两个在解析上有问题. 实践是www.xx.com的比较 稳定 转载于:https://www.c ...
- 微信公众号/微信小程序获取用户信息以及推送微信模版消息_MQ
微信公众号/微信小程序获取用户信息以及推送微信模版消息_MQ 一.获取用户信息 1.首先我们需要了解什么是微信用户的OpenID 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密 ...
- jsessionid 对微信JS SDK 签名的影响
用户第一次访问微信公众号页面,获取的URL通常会带有 jsessionid,例如:http://www.baidu.com/test;jsessionid=*******, 测试时发现首次进入微信会出 ...
- 微信JS SDK开发 共享问题小结
首先,我要吐槽一下这个SDK,看了第一遍,完全不知所云,一会获取这个,一会获取那个,也没确切的告诉怎么获取. 和腾讯客服(拿钱不干事的好工作)讨教,人家不懂技术,不知道怎么解决,也没有相关技术人员对应 ...
最新文章
- 循环for语句 if语句
- 为什么智能车竞赛没有清华学生参加比赛呢?
- Office 365系列(3)------Office 365认证使用ADFS安装部署参考
- Hud 敌兵布阵 --线段树的插点问线
- spring el 三元表达式
- python 复制文件_10 行 Python 代码写 1 个 USB 病毒
- 从“做什么”到“怎么做”,说说一只蚊子
- 阿里云基础产品技术月刊 2018年12月
- Android pad适配札记
- oracle用exp定时备份数据库,oracle exp备份数据库
- Mac读写NTFS移动硬盘
- python把句子里单词最后一个字母换成大写
- Flutter列表ListView学习
- 5个Libra协会成员加入,这家创业公司凭什么与Facebook 竞争?
- 语音识别ASR和NLP有什么区别?
- flyway的checksum
- 基于LightGBM分类实现英雄联盟数据预测(二)
- VisionMobile 2011年智能手机数据
- python中的Queue
- 【物联网平台】ThingsBoard 是一个用于数据收集、处理、可视化和设备管理的开源物联网平台
热门文章
- 【装机必看】主板该怎么选
- vue组件传值之事件总线
- 微信三方登录与注册逻辑处理
- Debian安装nodejs
- 安卓再无甜点,但船长觉得是个好事!
- 【游记】GDKOI2023游寄
- 文本框输入位数 html,[求助]请问如何在文本框中限制输入数字的位数(已解决)...
- java如何设置1.5倍行距_【转】如何解决mathtype公式拉大word中行间距的问题
- mac简体拼音打出来是英文_Mac如何打出各种标点符号、特殊符号、注音文、全角英文?...
- vue框架下的TodoMVC