Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信公众号开发之如何使用JSSDK

微信公众号开发之如何使用JSSDK

作者头像
Javen
发布于 2018-08-21 03:03:40
发布于 2018-08-21 03:03:40
4.7K00
代码可运行
举报
文章被收录于专栏:酷玩时刻酷玩时刻
运行总次数:0
代码可运行

查看公众号是否有使用JSSDK的权限

服务号、订阅号可以通过登录微信公众平台查看开发>接口权限

使用JSSDK主要包括 1、判断当前客户端版本是否支持指定JS接口、 2、分享接口(微信认证) 3、图像接口 4、音频接口 5、智能接口(识别语音并返回结果) 6、设备信息(获取网络状态) 7、地理位置 8、界面操作 9、微信扫一扫 10、微信小店(服务号必须通过微信认证) 11、微信卡券 (微信认证) 12、微信支付(服务号必须通过微信认证)

使用JSSDK步骤

官方参考文档

步骤一:绑定域名

先登录微信公众平台进入公众号设置功能设置里填写JS接口安全域名

JS接口安全域名.png

步骤二:引入JS文件 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js 如需使用摇一摇周边功能,请引入 http://res.wx.qq.com/open/js/jweixin-1.1.0.js 备注:支持使用 AMD/CMD 标准模块加载方法加载

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见附录1
    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

签名算法生成规则

官方参考文档

下面具体来讲讲 开源项目weixin_guide中的封装。

使用的时候只要在Controller方法上添加一个拦截器 JSSDKInterceptor 来实现签名验证再将wx.config需要的参数设置对应的属性在页面上进行获取。

拦截器实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class JSSDKInterceptor   implements Interceptor{
  /**
   * 如果要支持多公众账号,只需要在此返回各个公众号对应的 ApiConfig 对象即可 可以通过在请求 url 中挂参数来动态从数据库中获取
   * ApiConfig 属性值
   */
  public ApiConfig getApiConfig() {
    ApiConfig ac = new ApiConfig();

    // 配置微信 API 相关常量
    ac.setToken(PropKit.get("token"));
    ac.setAppId(PropKit.get("appId"));
    ac.setAppSecret(PropKit.get("appSecret"));

    /**
     * 是否对消息进行加密,对应于微信平台的消息加解密方式: 1:true进行加密且必须配置 encodingAesKey
     * 2:false采用明文模式,同时也支持混合模式
     */
    ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false));
    ac.setEncodingAesKey(PropKit.get("encodingAesKey",
        "setting it in config file"));
    return ac;
  }
  
  @Override
  public void intercept(Invocation inv) {
    inv.invoke();
    Controller controller = inv.getController();
    ApiConfigKit.setThreadLocalApiConfig(getApiConfig());
    JsTicket jsApiTicket = JsTicketApi.getTicket(JsApiType.jsapi);
    String jsapi_ticket = jsApiTicket.getTicket();
    String nonce_str = create_nonce_str();
    // 注意 URL 一定要动态获取,不能 hardcode.
    String url = "http://" + controller.getRequest().getServerName() // 服务器地址
        // + ":"
        // + getRequest().getServerPort() //端口号
        + controller.getRequest().getContextPath() // 项目名称
        + controller.getRequest().getServletPath();// 请求页面或其他地址
    String qs = controller.getRequest().getQueryString(); // 参数
    if (qs != null) {
      url = url + "?" + (controller.getRequest().getQueryString());
    }
    System.out.println("url>>>>" + url);
    String timestamp = create_timestamp();
    // 这里参数的顺序要按照 key 值 ASCII 码升序排序
    //注意这里参数名必须全部小写,且必须有序
    String  str = "jsapi_ticket=" + jsapi_ticket +
        "&noncestr=" + nonce_str +
        "&timestamp=" + timestamp +
        "&url=" + url;

    String signature = HashKit.sha1(str);

    System.out.println("appId " + ApiConfigKit.getApiConfig().getAppId()
        + "  nonceStr " + nonce_str + " timestamp " + timestamp);
    System.out.println("url " + url + " signature " + signature);
    System.out.println("nonceStr " + nonce_str + " timestamp " + timestamp);
    System.out.println(" jsapi_ticket " + jsapi_ticket);
    System.out.println("nonce_str  " + nonce_str);
    
    controller.setAttr("appId", ApiConfigKit.getApiConfig().getAppId());
    controller.setAttr("nonceStr", nonce_str);
    controller.setAttr("timestamp", timestamp);
    controller.setAttr("url", url);
    controller.setAttr("signature", signature);
    controller.setAttr("jsapi_ticket", jsapi_ticket);
  }

  private static String create_timestamp() {
    return Long.toString(System.currentTimeMillis() / 1000);
  }

  private static String create_nonce_str() {
    return UUID.randomUUID().toString();
  }
}

在Controller中使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 对整个Controller或者其中的方法添加JSSDK签名验证拦截器
 */
@Before(JSSDKInterceptor.class)
public class JSSDKController extends Controller{
  //@Before(JSSDKInterceptor.class)
  public void index(){
    render("share.jsp");
  }
  
  public void customer(){
    render("customer.jsp");
  }
  
  public void pic(){
    render("pic.jsp");
  }
}

JSP页面上面使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
 wx.config({
    debug: true,
      appId:'${appId}',
      timestamp: '${timestamp}',
      nonceStr: '${nonceStr }',
      signature: '${signature}',
      jsApiList: [
        'checkJsApi',
        'onMenuShareTimeline',
        'onMenuShareAppMessage',
        'onMenuShareQQ',
        'onMenuShareWeibo',
        ...
      ]
  });

  </script>

测试结果

在AppConfig 中添加路由me.add("/jssdk", JSSDKController.class,"/view");手机中访问 http://域名[/项目名称]/jssdk ,如果设置了 debug= true 成功了就会弹出

JSSDK 签名验证.png

如果出现 {"errorMsg":"config:invalid url domian"} 请检查步骤一:绑定域名 与你访问的域名是否在安全域名列表当中

步骤四:通过ready接口处理成功验证

config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.ready(function(){
    // 1 判断当前版本是否支持指定 JS 接口,支持批量判断
  document.querySelector('#checkJsApi').onclick = function () {
    wx.checkJsApi({
      jsApiList: [
        'getNetworkType',
        'previewImage'
      ],
      success: function (res) {
        alert(JSON.stringify(res));
      }
    });
  };
//下面就可以写一系列的接口了
......
});

步骤五:通过error接口处理失败验证

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.error(function (res) {
  alert(res.errMsg);
});

步骤六:接口调用

拦截器具体实现 参考地址 点这里 js 接口调用参考地址 点这里

以上就是JSSDK使用的介绍。 欢迎留言、转发、打赏项目

源码参考地址 点我点我--欢迎Start

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.09.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微信公众号是html页面吗,微信公众号网页开发
如果有相关接口权限无法开启,推荐使用:微信公众平台-开发-开发者工具-公众平台测试帐号开发
全栈程序员站长
2022/09/06
14.5K0
微信公众号是html页面吗,微信公众号网页开发
微信公众号网页开发之拍照、上传本地图片
JS-SDK说明文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#0
全栈程序员站长
2022/09/02
1.5K0
微信公众号x低代码,微搭公众号应用开发快速上手教程
基于大家对"漫话开发者"前面的微信支付x低代码、微信小程序消息推送x低代码等系列文章的关注,最近也有同学问到公众号相关的问题,今天就简单介绍下低代码开发的H5应用如何调用微信公众号的能力,目前的方式主要有如下两种,大家可按需选取适用方案。
漫话开发者
2023/01/28
2.5K0
微信公众号x低代码,微搭公众号应用开发快速上手教程
微信JSSDK接入Java版--步骤及问题处理和解决
可以关注测试微信号,查看效果  服务器是个人的。请不要恶意攻击。 JSSDK使用步骤 http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp142
小帅丶
2018/02/09
3.9K0
微信JSSDK接入Java版--步骤及问题处理和解决
微信公众号开发——2、微信网页开发
在公众号平台下,自定义菜单,添加菜单,并选择菜单内容跳转到指定页面地址即可(需认证后方可添加页面地址,个人账号暂不支持认证)。
全栈程序员站长
2022/09/01
7.8K0
Web端声纹识别
本文作者:IMWeb ssttm169 原文出处:IMWeb社区 未经同意,禁止转载 最近做一个微信的口令红包的功能,准备都要投入使用了, 老板突然发愁,他说 现在的羊毛党这么猖狂,一不小心,1
IMWeb前端团队
2019/12/03
3.3K0
Web端声纹识别
微信中页面二次分享小图标丢失问题
在我们有房APP1.1的版本中增加了房产资讯的功能,昨天晚上有同事在群里反馈从APP中分享的资讯到微信中,然后再次分享出去的时候标题和小图标不见了,见下图:
猿天地
2018/07/25
3.3K0
微信中页面二次分享小图标丢失问题
Java微信公众平台开发(十一)--微信JSSDK中Config配置 (一)在微信公众平台绑定安全域名(二)后端接口实现JS-SDK配置需要的参数 (三)页面实现JS-SDk中con
JSSDK曾经引爆前端以及后端的工程师,其魔性的力量毋庸置疑,在我们的技术眼里它的实现原理和根本是不能够被改变的,这篇文章就不对其js的实现做任何评价和解说了(因为我也不是很懂,哈哈),这里要说的是它的config配置实现,参考文档:http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html !
用户2417870
2019/09/18
3.2K0
Java微信公众平台开发(十一)--微信JSSDK中Config配置

        (一)在微信公众平台绑定安全域名(二)后端接口实现JS-SDK配置需要的参数 (三)页面实现JS-SDk中con
Java调用微信扫一扫
公司公众号二次开发需要调用微信扫一扫接口,在网上查了很多相关资料感觉也不是特别的全,在此特意整理一遍资料,供给自己和大家参考,如有相关缺陷请大家指出。
gang_luo
2020/08/13
3.1K0
Java调用微信扫一扫
uni-app使用微信JS-SDK
前段时间因为修改bug的原因学习了下如何在uni-app下面使用多图上传,所以基于uni-app做了一个微信JS-SDK调用的Demo
薛定喵君
2021/07/28
7.2K0
微信公众号开发 —— 自定义分享
微信公众号开发JS-SDK说明文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 1.绑定JS域名,不需要加h
JaneYork
2023/10/11
5810
微信公众号开发 —— 自定义分享
Web前端学习 第11章 微信开发4 JS-SDK接口
微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。例如我们网页中希望实现扫一扫、获取本地相册、位置信息、分享功能等,都可以使用JS-SDK来实现。
学习猿地
2020/07/09
2.4K0
Web前端学习 第11章 微信开发4 JS-SDK接口
Java企业微信开发_07_JSSDK多图上传
 所有的JS接口只能在企业微信应用的可信域名下调用(包括子域名),可在企业微信的管理后台“我的应用”里设置应用可信域名。这个域名必须要通过ICP备案,不然jssdk会配置失败
shirayner
2018/08/10
3.6K0
Java企业微信开发_07_JSSDK多图上传
网站搜索框使用微信扫码
客户要求可以直接识别标签二维码对某些仪器设备进行管理,类似于淘宝搜索框可以直接拍照搜索商品一样。前面已经做了一个网页调用摄像头识别二维码的功能,此功能有两个缺陷:
用户6362579
2019/09/29
1.9K0
网站搜索框使用微信扫码
Yii2.0实现微信公众号后台开发
1.用户授权接口:获取access_token、openid等;获取并保存用户资料到数据库
botkenni
2019/09/02
9910
微信公众号开发之授权获取用户信息
测试号:找到 网页授权获取用户基本信息>点击修改>设置域名 服务号:找到 开发>接口权限>网页授权获取用户基本信息>>点击修改>设置域名
Javen
2018/08/21
3.7K1
微信公众号开发之授权获取用户信息
关于微信二次分享,描述变链接的解决方法(一)----文档说明
声明: 本篇博文只是个人工作中的分享总结,仅代表个人观点,虽然解决了不少网友的问题,但同时也引来了一些网友的不满,所以特此声明,当您遇到本博文解决不了的问题,可以尝试重新进行其他搜索或者一起交流,相信总归能解决,而不是言语攻击!该博文的解决方案毕竟不是万金油,解决不了所有问题! 前言: 最近工作中遇到了使用微信二次分享的时候,标题被截短,描述也变成了链接,图片也没有,运营人员半夜还在嚷嚷,无奈只好硬着头皮去百度,去google,但是悲催的是没有详细的解决方法,最终只能自己去研究,还好最终搞出来了,决定分享一
joshua317
2018/04/16
4.4K0
关于微信二次分享,描述变链接的解决方法(一)----文档说明
Java微信公众平台开发_07_JSSDK图片上传
(2)对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式 (即 key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
shirayner
2018/08/10
2.5K0
Java微信公众平台开发_07_JSSDK图片上传
微信分享等设置 -- 缩略图等
debug:测试各绑定事件传入的测试(PC端打开,控制台console能看到各传入参数),上线改为false appId:公众号的唯一标识,为了安全考虑,后端传过来 timestamp:签名时间戳,例如:1414587457 nonceStr:签名随机字符串,例如:Wm3WZYTPz0wzccnW signature:签名 -- 通过appId请求到access_token,然后通过access_token请求到jsapi_ticket,通过jsapi_ticket、timestamp、nonceStr、url用sha1()加密生成signature; 为了安全考虑,这四个参数都由后台请求或者生成,然后前端请求使用。参考:微信公众平台JS-SDK说明文档附录1-JS-SDK使用权限签名算法
Rattenking
2021/01/29
1.3K0
微信公众平台开发[2] —— 微信端分享功能
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/51870790
泥豆芽儿 MT
2018/09/11
5.7K0
微信公众平台开发[2] —— 微信端分享功能
推荐阅读
相关推荐
微信公众号是html页面吗,微信公众号网页开发
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验