千家信息网

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

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,这篇文章主要介绍"微信开发中获取前端jssdk启调参数的方法",在日常操作中,相信很多人在微信开发中获取前端jssdk启调参数的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2025年02月05日微信开发中获取前端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安全错误 数据库的锁怎样保障安全 用来测试ajax的服务器 广州焦点互联网科技 怎么进入unix系统中的数据库 电话响铃无法连接服务器 软件开发公司有什么好处 青海数据库监控 xp系统管理服务器在哪里 淘宝图片数据库使用 网页版数据库系统时间 六大区块链项目入围网络安全 如何区分软件开发和培训服务 奥丁神叛服务器无法创建角色 济南学软件开发哪所学校好 语音聊天软件开发的基本流程 网络安全法 电子商务法 宁都租房网络安全 投票代理服务器 高级数据库难学吗 王者进不去服务器一直转圈圈 杨浦区优势软件开发服务装饰 ctp 交易软件开发 华为服务器管理网口 教育部学生数据库 华为设备怎么添加录播服务器 简历上熟悉嵌入式软件开发 数据库实验数据更新答案 如何维护监狱的网络安全意识 医院信息系统网络安全文章 软件开发合同价格不合理纠纷 怎么免费获得腾讯云服务器
0