我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java怎么接入微信JS-SDK

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java怎么接入微信JS-SDK

本文小编为大家详细介绍“java怎么接入微信JS-SDK”,内容详细,步骤清晰,细节处理妥当,希望这篇“java怎么接入微信JS-SDK”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

第一步:绑定域名

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

备注:登录后可在“开发者中心”查看对应的接口权限。

第二步:引入JS文件

在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js

如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)。

备注:支持使用 AMD/CMD 标准模块加载方法加载

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

wx.config({
  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: '', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [] // 必填,需要使用的JS接口列表
});
当你完成上面三个步骤时,就可以使用微信JS-SDK的功能了,上面的步骤设置都简单,就是config签名的信息获取有点麻烦,这里主要说明下签名的获取,权限签名算法在api有简单说明,这里简单说明下签名规则。签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分),其中noncestr可以通过生成随机uuid,时间戳可以直接获取当前时间的时间,这些实现没用任何难度,接下来比较复杂的是jsapi_ticket的获取。jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。access_token一般都是设置全局缓存的,在access_token有效期内可以继续使用,本实例中我们通过单例模式实现access_token的全局缓存,这个只适合单实例的服务,如果是多实例请自行修改成数据库或redies等方式进行全局缓存。当noncestr、jsapi_ticket、timestamp、url等数据获取完成后,按照noncestr=Wm3WZYTPz0wzccnW&jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&timestamp=14145874577&url=http://mp.weixin.qq.com?params=value 进行url拼接,然后进行SHA1既可以获取到签名。

代码示例:

1.承装access_token的实体类,因为access_token的有效期是7200秒,

 1 import java.util.*;
 2 
 3 public class Singleton {
 4     //缓存accessToken 的Map  ,map中包含 一个accessToken 和 缓存的时间戳
 5     //当然也可以分开成两个属性咯
 6     private Map<String, String> map = new HashMap<>();
 7 
 8     private Singleton() {
 9     }
10 
11     private static Singleton single = null;
12 
13     // 静态工厂方法
14     public static Singleton getInstance() {
15         if (single == null) {
16             single = new Singleton();
17         }
18         return single;
19     }
20 
21     public Map<String, String> getMap() {
22         return map;
23     }
24 
25     public void setMap(Map<String, String> map) {
26         this.map = map;
27     }
28 
29     public static Singleton getSingle() {
30         return single;
31     }
32 
33     public static void setSingle(Singleton single) {
34         Singleton.single = single;
35     }
36 }

获取 jsapi_ticket以及生成签名

public class WxUtils {

    public static String appId = "微信公众号appid";

    public static String appSecret = "微信公众号appSecret ";
    //获取access_token的url
    public final static String js_api_ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";

    
    private static String getAccessToken() {
        String rel = "";
        Singleton singleton = Singleton.getInstance();
        Map<String, String> map = singleton.getMap();
        String time = map.get("access_token_time");
        String accessToken = map.get("access_token");
        Long nowDate = new Date().getTime();
        //这里设置过期时间 3000*1000就好了
        if (accessToken != null && time != null && nowDate - Long.parseLong(time) < 7200 * 1000) {
            rel = accessToken;
        } else {
            String url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", appId, appSecret);
            String result = HttpUtils.defaultGetMethod(url);
            if (StringUtils.isBlank(result)) {
                return null;
            }
            JsonObject responseJsonObject = GsonUtils.parseToJsonObj(result);
            map.put("access_token_time", nowDate + "");
            map.put("access_token", GsonUtils.getString(responseJsonObject, "access_token"));
            rel = GsonUtils.getString(responseJsonObject, "access_token");
        }
        return rel;
    }

    private static String getJsapiTicket(String accessToken) {
        String rel = "";
        Singleton singleton = Singleton.getInstance();
        Map<String, String> map = singleton.getMap();
        String js_api_ticketn_time = map.get("js_api_ticketn_time");
        String ticket = map.get("ticket");
        Long nowDate = new Date().getTime();
        if (ticket != null && js_api_ticketn_time != null && nowDate - Long.parseLong(js_api_ticketn_time) < 7200 * 1000) {
            rel = ticket;
        } else {
            String url = js_api_ticket_url.replace("ACCESS_TOKEN", accessToken);
            String result = HttpUtils.defaultGetMethod(url);
            if (StringUtils.isBlank(result)) {
                return null;
            }
            JsonObject responseJsonObject = GsonUtils.parseToJsonObj(result);
            map.put("js_api_ticketn_time", nowDate + "");
            map.put("ticket", GsonUtils.getString(responseJsonObject, "ticket"));
            rel = GsonUtils.getString(responseJsonObject, "ticket");
        }
        return rel;
    }

    public static Map getConfig(String url) {
        String accessToken = getAccessToken();
        String ticket = getJsapiTicket(accessToken);
        String nonceStr = create_nonce_str();
        String timestamp = create_timestamp();
        String string1 = "jsapi_ticket=" + ticket +
                "&noncestr=" + nonceStr +
                "&timestamp=" + timestamp +
                "&url=" + url;
        Map<String, Object> map = new HashMap<>();
        map.put("appId", appId);
        map.put("timestamp", timestamp);
        map.put("nonceStr", nonceStr);
        map.put("signature", SHA1.encode(string1));
        return map;
    }

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

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



}

SHA1签名




import java.security.MessageDigest;


public final class SHA1 {

    private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5',
            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

    
    private static String getFormattedText(byte[] bytes) {
        int len = bytes.length;
        StringBuilder buf = new StringBuilder(len * 2);
        // 把密文转换成十六进制的字符串形式
        for (int j = 0; j < len; j++) {
            buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
            buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
        }
        return buf.toString();
    }

    public static String encode(String str) {
        if (str == null) {
            return null;
        }
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
            messageDigest.update(str.getBytes());
            return getFormattedText(messageDigest.digest());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

通过上面的方法,我们已经准备好了接入微信JS-SDK的所有材料,那么怎么在前端那边使用,我们只需要请求到后台获取到config的相关数据就可以了。初次接入建议打开debug为调试模式,在debug调试模式打开的情况下接入成功会弹出成功提示。

 1 $(function () {
 2      wxConfig();//接入微信jssdk
 3 })
 4 
 5 //请求后台获取wxconfig需要的信息
 6 function  wxConfig() {
 7     $.ajax({
 8         url: '/pvmap-web/getData/wxConfig',
 9         type: 'get',
10         data: {url: window.location.href},
11         dataType: 'json',
12         success: function (data) {
13             // console.log(data)
14             if (data.data != null || data.data != "") {
15                 wx.config({
16                     debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
17                     appId: data.data.appId, // 必填,公众号的唯一标识
18                     timestamp: data.data.timestamp, // 必填,生成签名的时间戳
19                     nonceStr: data.data.nonceStr, // 必填,生成签名的随机串
20                     signature: data.data.signature,// 必填,签名
21                     jsApiList: ['openLocation'] // 必填,需要使用的JS接口列表
22                 });
23             }
24         },
25         erroe: function (e) {
26             console.log(e)
27         }
28     })
29 }

读到这里,这篇“java怎么接入微信JS-SDK”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java怎么接入微信JS-SDK

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

chatgpt怎么接入微信

本篇内容主要讲解“chatgpt怎么接入微信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“chatgpt怎么接入微信”吧!chatgpt接入微信的方法:1、使用golang进行部署修改golan
2023-07-05

详解基于Node.js的微信JS-SDK后端接口实现代码

做了一个网站,放到线上,用微信打开,点击分享,可是分享后发给朋友的链接卡片是微信默认自带的,如下:这标题,描述以及图片是默认自带的,丑不说,分享给别人还以为是盗号网站呢,而接入微信的JSSDK后,分享可以自定义内容,如下:我承认,虽然这分享
2022-06-04

ThinkPHP5怎么集成JS-SDK实现微信自定义分享功能

今天小编给大家分享一下ThinkPHP5怎么集成JS-SDK实现微信自定义分享功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下
2023-07-05

Java微信公众平台开发(1) 接入微信公众平台

前面几篇文章一直都在说微信公众平台的开发准备工作,那么从这篇开始我们就将正式的进入JAVA微信公众平台开发的整个流程,那么这篇我们开始聊聊如何将我们的服务端和微信公众平台对接!(一)接入流程解析在我们的开发过程中无论如何最好的参考工具当然是
2023-05-31

微信小程序怎么接入客服对话

本篇内容介绍了“微信小程序怎么接入客服对话”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!添加了一个客服按钮
2023-06-26

微信小程序第三方插件怎么接入

这篇文章主要介绍“微信小程序第三方插件怎么接入”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序第三方插件怎么接入”文章能帮助大家解决问题。  一、开通插件功能  小程序开发者无需重新注册帐号
2023-06-26

Android应用中怎么接入微信分享功能

今天就跟大家聊聊有关Android应用中怎么接入微信分享功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。注册应用信息并下载必要工具在微信开放平台注册应用信息下载 签名生成工具获取待
2023-05-31

chatgpt接入微信的原理是什么

chatgpt的技术原理ChatGPT是在 GPT(Generative Pre-training Transformer)模型的基础上通过改进优化得到的。GPT是一种大型语言模型,能够生成各种不同的文本类型,而ChatGPT 则是针对对话
2023-02-09

怎么用Java调用微信域名官方接口

这篇文章主要讲解了“怎么用Java调用微信域名官方接口”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Java调用微信域名官方接口”吧!接口地址1、http://www.qqdwz.cn
2023-06-04

微信小程序怎么使用全局js

今天小编给大家分享一下微信小程序怎么使用全局js的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.要注意的是必须要用modu
2023-06-26

Java接入微信支付超级详细教程——从入门到精通

源码下载 源码获取:点击获取源码 本文介绍了“二维码付款”的代码。其他微信支付方式的代码都在源码中。 一、准备开发所需的账号以及配置信息 解释:想要接入微信支付我们需要两个玩意 ,一个是公众号/小程序/企业微信(开发用的),一个是微信支付商
2023-08-17

JS怎么实现一个微信录音功能

今天小编给大家分享一下JS怎么实现一个微信录音功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。拆解需求根据原型图可以很容易
2023-07-05

springboot中怎么对接微信支付

springboot中怎么对接微信支付,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。对接的完整流程如下首先是配置gzh.appid=公众号appidwxPay.mchId=
2023-06-20

微信小程序js页面间怎么传值

本文小编为大家详细介绍“微信小程序js页面间怎么传值”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序js页面间怎么传值”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。  1.js页面间的传值:url:
2023-06-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录