千家信息网

微信开发中获取前端jssdk启调参数的方法

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"微信开发中获取前端jssdk启调参数的方法",在日常操作中,相信很多人在微信开发中获取前端jssdk启调参数的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2026年11月02日微信开发中获取前端jssdk启调参数的方法

这篇文章主要介绍"微信开发中获取前端jssdk启调参数的方法",在日常操作中,相信很多人在微信开发中获取前端jssdk启调参数的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"微信开发中获取前端jssdk启调参数的方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在进行微信开发时,微信开发前端要启调微信jssdk相关服务常常需要使用一些秘密的参数,这些参数暴露在外不是一件好事情,素以需要后端区调取这些jssdk参数,这是我在开发过程中和获取jssdk参数开发相关的code。

一、编辑jssdk参数类

@Getter@Setter@ToStringpublic class JSSDKConfig {    private Boolean debug;    private String appId;    private Long timestamp;    private String nonceStr;    private String signature;    private List jsApiList;}

二、获取jssdk中signature的工具类

参数url是前端起吊当前location.herf(注意:url不能转码)
参数appid......
参数jsapiTicket是微信jsapiticket票据,需要另外获得。

import java.security.MessageDigest;import java.util.*;public class JSSDKSignatureUtil {    /**     * 获取JSSDKConfig对象     *     * @param url     * @param appid     * @param jsapiTicket     * @return     */    public static JSSDKConfig createJSSDKConfig(String url, String appid, String jsapiTicket) {        String noncestr = getRandomStr();        Long timestamp = getTimeStamp();        JSSDKConfig jssdkConfig = new JSSDKConfig();        jssdkConfig.setDebug(false);        jssdkConfig.setAppId(appid);        jssdkConfig.setTimestamp(timestamp);        jssdkConfig.setNonceStr(noncestr);        jssdkConfig.setSignature(createSignature(jsapiTicket, url, noncestr, timestamp));        List jsApiList = new ArrayList<>();        jssdkConfig.setJsApiList(jsApiList);        return jssdkConfig;    }    /**     * 创建SHA1签名     * l     *     * @param jsapiTicket     * @param url     * @return     */    private static String createSignature(String jsapiTicket, String url, String noncestr, Long timestamp) {        SortedMap signParams = new TreeMap();        signParams.put("noncestr", noncestr);        signParams.put("jsapi_ticket", jsapiTicket);        signParams.put("timestamp", timestamp);        signParams.put("url", url);        return createSignature(signParams);    }    /**     * 创建SHA1签名     *     * @param params     * @return SHA1签名     */    private static String createSignature(SortedMap params) {        return sha1Encrypt(sortParams(params));    }    /**     * 根据参数名称对参数进行字典排序     *     * @param params     * @return     */    private static String sortParams(SortedMap params) {        StringBuffer sb = new StringBuffer();        for (String key : params.keySet()) {            sb.append(key).append("=").append(params.get(key)).append("&");        }        return sb.substring(0, sb.lastIndexOf("&"));    }    /**     * 使用SHA1算法对字符串进行加密     *     * @param str     * @return     */    private static String sha1Encrypt(String str) {        if (str == null || str.length() == 0) {            return null;        }        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',                'a', 'b', 'c', 'd', 'e', 'f'};        try {            MessageDigest mdTemp = MessageDigest.getInstance("SHA1");            mdTemp.update(str.getBytes("UTF-8"));            byte[] md = mdTemp.digest();            int j = md.length;            char buf[] = new char[j * 2];            int k = 0;            for (int i = 0; i < j; i++) {                byte byte0 = md[i];                buf[k++] = hexDigits[byte0 >>> 4 & 0xf];                buf[k++] = hexDigits[byte0 & 0xf];            }            return new String(buf);        } catch (Exception e) {            return null;        }    }    /**     * 生成时间戳     *     * @return     */    private static Long getTimeStamp() {        return System.currentTimeMillis() / 1000;    }    /**     * 生成6位随机字符串     *     * @return     */    private static String getRandomStr() {        int length = 6;        String base = "abcdefghijklmnopqrstuvwxyz0123456789";        Random random = new Random();        StringBuffer sb = new StringBuffer();        for (int i = 0; i < length; i++) {            int number = random.nextInt(base.length());            sb.append(base.charAt(number));        }        return sb.toString();    }}

三、获取jsapiTicket票据

jsapiTicket参数不会过期,所以可以放入缓存中 参数包括access_token(该参数隔一段时间刷新,所以要也需要放入缓存) 其中appendParameterToUrl()是将map参数拼接到url后

    public String getJsapiTicket() {        String jsapiTicket = redisService.get("jsapi_ticket");        if (StringUtils.isBlank(jsapiTicket)) {            try {                Map map = new HashMap<>(2);                map.put("access_token", this.getAccessToken());                map.put("type", "jsapi");                String result = restTemplate.getForObject(this.appendParameterToUrl(weiXinConfig.jsapiTicketUrl, map), String.class);                jsapiTicket = JsonUtils.parse(result, new String[]{"ticket"});                Integer expires = JsonUtils.parseInteger(result, new String[]{"expires_in"});                this.saveValueToRedisAndSetexpiresIn("jsapi_ticket", jsapiTicket, expires);            } catch (IOException e) {                e.printStackTrace();                log.error(Arrays.toString(e.getStackTrace()));                throw new RuntimeException("获取jsapi_ticket时的结果,json解析失败");            }        }        return jsapiTicket;    }

appendParameterToUrl():

    /**     * 将map拼接到url后面     *     * @param url     * @param map     * @return     */    private String appendParameterToUrl(String url, Map map) {        StringBuilder sb = new StringBuilder(url);        sb.append("?");        for (Object o : map.keySet()) {            sb.append(o.toString()).append("=").append(map.get(o).toString()).append("&");        }        return sb.toString().substring(0, sb.length() - 1);    }

四、获取access_token参数

通过微信公众平台开发者模式中的,appid和appSecret来获access_token(注意:注意调用时的参数名称)

    public String getAccessToken() {        String accessToken = (String) redisService.get("access_token");        if (StringUtils.isBlank(accessToken)) {            try {                Map map = new HashMap<>(3);                map.put("grant_type", "client_credential");                map.put("appid", weiXinConfig.appid);                map.put("secret", weiXinConfig.appsecret);                String accessTokenResult = restTemplate.getForObject(this.appendParameterToUrl(weiXinConfig.accessTokenUrl, map), String.class);                accessToken = JsonUtils.parse(accessTokenResult, new Object[]{"access_token"});                Integer expiresIn = JsonUtils.parseInteger(accessTokenResult, new Object[]{"expires_in"});                this.saveValueToRedisAndSetexpiresIn("access_token", accessToken, expiresIn);            } catch (IOException e) {                e.printStackTrace();                log.error(Arrays.toString(e.getStackTrace()));                throw new RuntimeException("获取access_token时的结果,json解析失败");            }        }        return accessToken;    }

并给access_token添加缓存,并给key加上过期时间

    /**     * 将value保存起来,并且设置过期时间     *     * @param key     * @param value     * @param expiresIn     */    private void saveValueToRedisAndSetexpiresIn(String key, String value, Integer expiresIn) {        if (StringUtils.isNotBlank(key) && expiresIn != null) {            redisService.set(key, value);            redisService.expire(key, expiresIn);        }    }

五、登录微信公众号进行配置

将后端服务器的IP地址添加报名单。

将前端页面的域名配置到该公众号设置的功能设置中。

到此,关于"微信开发中获取前端jssdk启调参数的方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

参数 开发 前端 方法 时间 学习 公众 缓存 名称 字符 字符串 更多 票据 结果 帮助 服务 生成 配置 实用 接下来 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技卖菜 互联网 科技公司 互联网的科技创新 无线互联网科技 郑州华宇互联网科技 一五八零互联网科技 互联网金融科技委员会 深圳卡尔迅互联网科技有限公司怎么样 新华互联网科技校企合作 云创客互联网科技公司 荆州市昕露互联网络科技有限公司 互联网媒体平台算高科技产业 深圳市优智互联网科技有限公司 群盈汇互联网科技有限公司 互联网公司高科技产品 银行科技岗属于互联网吗 广州富喜互联网络科技 互联网营销推广黑科技 厦门江牛科技互联网 株洲百竞科技的互联网营销顾问 互联网金融 科技 合肥互联网科技公司 时间互联网络科技 北京大学互联网科技怎么样 创业天下互联网科技有限公司 电子科技大学互联网创业大赛 威龙国际互联网科技公司 朱啸虎曾投资哪些互联网科技企业 福建互联网展示科技馆设计 科技互联网专业务虚会材料
0