热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信开发之——JSSDK,通过config接口注入权限验证配置

步骤1:绑定域名先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。备注:登录后可在“开发者中心”查看对应的接口权限。步骤2:引入js在需要调用JS接口的页面引入如下JS文件

步骤1:绑定域名

先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
备注:登录后可在“开发者中心”查看对应的接口权限。

步骤2:引入js

在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js
请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,否则将无法在iOS9.0以上系统中成功使用JSSDK.
最好下载JS到本地。

步骤3:通过config接口注入权限验证配置

先贴前台web页(test.jsp)主要代码如下:
$(function(){
var url = window.location.href;
//ajax注入权限验证
$.ajax({
url:"${basePath }JSSDK/ticket.do",
dataType: 'json',
data: {"url" : url},
complete: function(XMLHttpRequest, textStatus){

},
error: function(XMLHttpRequest, textStatus, errorThrown){
alert("发生错误:"+errorThrown);
},
success: function(res){
var appId = res.appId;
var nOncestr= res.noncestr;
var jsapi_ticket = res.jsapi_ticket;
var timestamp = res.timestamp;
var signature = res.signature;
wx.config({
debug: true, //开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: appId, //必填,公众号的唯一标识
timestamp: timestamp, // 必填,生成签名的时间戳
nonceStr: noncestr, //必填,生成签名的随机串
signature: signature,// 必填,签名,见附录1
jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ',
'onMenuShareWeibo','onMenuShareQZone','chooseImage',
'uploadImage','downloadImage','startRecord','stopRecord',
'onVoiceRecordEnd','playVoice','pauseVoice','stopVoice',
'translateVoice','openLocation','getLocation','hideOptionMenu',
'showOptionMenu','closeWindow','hideMenuItems','showMenuItems',
'showAllNonBaseMenuItem','hideAllNonBaseMenuItem'] //必填,需要使用的JS接口列表,所有JS接口列表 见附录2
});
}
});

});


${appId} 是公众号配置里获得。

${jsapi_ticket}进入后台页面访问接口获得。

url 当前web页的地址。

jsApiList 需要使用的JS接口列表


后台代码入下(主要获取jsapi_ticket以便生成签名signature,传递给前台):

public void getSignature(HttpServletRequest request, HttpServletResponse response, Model model){
String weburl = request.getParameter("url");
Long timestamp = System.currentTimeMillis()/1000;
int nOncestr= new Random().nextInt();

AccessTokenUtil accessTokenUtil = new AccessTokenUtil();
String accessToken = accessTokenUtil.getAccessToken();System.out.println("accessToken:" + accessToken);
//获取jsapi_ticket
String jsapi_ticket = null;
try {
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + "&type=jsapi";
String respOnseText= HttpUtil.get(url);
jsapi_ticket = null;
JSONObject object = JSONObject.fromObject(responseText);
if (object.containsKey("ticket")) {
jsapi_ticket = object.getString("ticket");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//生成signature
List nameList = new ArrayList();
nameList.add("noncestr");
nameList.add("timestamp");
nameList.add("url");
nameList.add("jsapi_ticket");
Map valueMap = new HashMap();
valueMap.put("noncestr", noncestr);
valueMap.put("timestamp", timestamp);
valueMap.put("url", weburl);
valueMap.put("jsapi_ticket", jsapi_ticket);
Collections.sort(nameList);
String origin = "";
for (int i = 0; i origin += nameList.get(i) + "=" + valueMap.get(nameList.get(i)).toString() + "&";
}
origin = origin.substring(0, origin.length() - 1);
String signature = sha1(origin);
Map map = new HashMap();
map.put("jsapi_ticket", jsapi_ticket);
map.put("appId", WXAccount.appid);
map.put("signature", signature.toLowerCase());
map.put("timestamp", timestamp.toString());
map.put("noncestr", String.valueOf(noncestr));
response.setContentType("application/json; charset=utf-8");
PrintWriter writer = null;
try {
writer = response.getWriter();
JSONObject respOnseObject= JSONObject.fromObject(map);
writer.print(responseObject);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
writer.flush();
writer.close();
}

}


注意:变量timestamp、noncestr 必须作为String型传递给后台,否则 IOS将一直报错 config:fail



部分摘自微信开发者文档......


推荐阅读
  • 微信登录(网站应用)ASP.NET第一步:请求CODE.第二步:通过CODE获取access_token.第三步:通过access_token调用接 ... [详细]
  • 基于SSM框架的在线考试系统:随机组卷功能详解
    本文深入探讨了基于SSM(Spring, Spring MVC, MyBatis)框架构建的在线考试系统中,随机组卷功能的设计与实现方法。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 本文探讨了异步编程的发展历程,从最初的AJAX异步回调到现代的Promise、Generator+Co以及Async/Await等技术。文章详细分析了Promise的工作原理及其源码实现,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 如何在Win10系统下通过VMware 14 Pro安装CentOS 7
    本文详细介绍了在Windows 10操作系统中使用VMware Workstation 14 Pro搭建CentOS 7虚拟环境的步骤,包括所需工具、安装过程及系统配置等。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 深入解析微信小程序开发中的全局配置文件设置与优化技巧
    本文深入探讨了微信小程序开发中全局配置文件的设置与优化技巧,详细解析了 `app.js`、`app.json`、`app.wxss` 和 `project.config.json` 的功能与最佳实践。通过合理配置这些文件,开发者可以显著提升小程序的性能和用户体验。文章还介绍了如何利用这些配置文件进行模块化开发和调试,帮助开发者更好地管理和维护小程序项目。 ... [详细]
  • 深入浅出解读奇异值分解,助你轻松掌握核心概念 ... [详细]
  • 在操作系统中,阻塞状态与挂起状态有着显著的区别。阻塞状态通常是指进程因等待某一事件(如I/O操作完成)而暂时停止执行,而挂起状态则是指进程被系统暂时移出内存,以释放资源或降低系统负载。此外,本文还深入分析了`sleep()`函数的实现机制,探讨了其在不同操作系统中的具体实现方式及其对进程调度的影响。通过这些分析,读者可以更好地理解操作系统如何管理进程的不同状态以及`sleep()`函数在其中的作用。 ... [详细]
  • 如何在微信公众平台集成新浪云服务应用摘要:新浪云服务平台SinaAppEngine(简称SAE)自2009年启动内部研发,并于同年对外开放。本文详细介绍了如何利用SAE的强大功能,在微信公众平台上构建高效、稳定的云服务应用程序,涵盖从环境配置到应用部署的全流程,为开发者提供详尽的技术指导与实践案例。 ... [详细]
  • 【转】JS键盘按钮keyCode及示例大全(JS前端)
    文章目录以功能区分布以keycode编号顺序分布简记表使用示例:组合键获取用户按下的键javascript判断是否按回车键屏蔽按键组合健获取键和相应值的js回目录 ... [详细]
author-avatar
zc43pml
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有