美文网首页
微信JSSDKconfig接口注入权限验证配置的参数获取--ja

微信JSSDKconfig接口注入权限验证配置的参数获取--ja

作者: 打不死的小强8号 | 来源:发表于2019-05-09 12:36 被阅读0次

    参考文档
    微信官网文档

    步骤看官网文档,这里只有java后台代码

    签名工具类

    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.*;
    
    /**
     * @author xmg
     * @Description 签名工具类
     * @Date:2019/5/7
     */
    public class SignUtil {
    
        /**
         * 前端jssdk页面配置需要用到的配置参数
         * @param url
         * @return {appid,timestamp,nonceStr,signature}
         * @throws Exception
         */
        public static HashMap<String, String> jsSDK_Sign(String url) throws Exception {
            String nonce_str = create_nonce_str();
            String timestamp= System.currentTimeMillis()/1000 + "";
            String jsapi_ticket= WxService.getJsSdkTicket();
            // 注意这里参数名必须全部小写,且必须有序
            // 参数
            Map<String, String> packageParams = new HashMap<>();
            packageParams.put("url", url);
            packageParams.put("noncestr", nonce_str);
            packageParams.put("jsapi_ticket", jsapi_ticket);
            packageParams.put("timestamp", timestamp);
    
            // 获得拼接好的参数,按照ASCLL大小排序
            String createLinkString = createLinkString(packageParams);
            String signature = SHA1(createLinkString);
            // 参数封装,返回前台
            HashMap<String, String> jssdk=new HashMap<String, String>();
            jssdk.put("appId", WxService.APP_ID);
            jssdk.put("timestamp", timestamp);
            jssdk.put("nonceStr", nonce_str);
            jssdk.put("signature", signature);
            return jssdk;
        }
    
        public static String SHA1(String decript) {
            try {
                MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
                digest.update(decript.getBytes());
                byte messageDigest[] = digest.digest();
                // Create Hex String
                StringBuffer hexString = new StringBuffer();
                // 字节数组转换为 十六进制 数
                for (int i = 0; i < messageDigest.length; i++) {
                    String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                    if (shaHex.length() < 2) {
                        hexString.append(0);
                    }
                    hexString.append(shaHex);
                }
                return hexString.toString();
    
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            return "";
        }
        /**
         * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
         * @param params 需要排序并参与字符拼接的参数组
         * @return 拼接后字符串
         */
        public static String createLinkString(Map<String, String> params) {
            List<String> keys = new ArrayList<String>(params.keySet());
            Collections.sort(keys);
            String prestr = "";
            for (int i = 0; i < keys.size(); i++) {
                String key = keys.get(i);
                String value = params.get(key);
                if (i == keys.size() - 1) {// 拼接时,不包括最后一个&字符
                    prestr = prestr + key + "=" + value;
                } else {
                    prestr = prestr + key + "=" + value + "&";
                }
            }
            return prestr;
        }
    
        private static String create_nonce_str() {
            return UUID.randomUUID().toString();
        }
    }
    
    
    /**
     * @author xmg
     * @Description Ticket封装
     * @Date:2019/5/7 0:31
     */
    public class Ticket {
        /** ticket */
        private String ticket;
        /** 过期时间 */
        private long expiresTime;
    
        public String getTicket() {
            return ticket;
        }
    
        public void setTicket(String ticket) {
            this.ticket = ticket;
        }
    
        public long getExpiresTime() {
            return expiresTime;
        }
    
        public void setExpiresTime(long expiresTime) {
            this.expiresTime = expiresTime;
        }
    
        public Ticket(String ticket, String expiresIn) {
            super();
            this.ticket = ticket;
            this.expiresTime = System.currentTimeMillis() + Integer.parseInt(expiresIn)*1000;
        }
    
        /**
         * 判断token是否过期
         * @return
         */
        public boolean isExpired(){
            return System.currentTimeMillis() > this.expiresTime;
        }
    }
    
    
    import org.apache.commons.lang3.StringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.client.RestTemplate;
    
    import javax.annotation.Resource;
    import java.io.InputStream;
    import java.util.*;
    
    /**
     * @author xmg
     * @Description
     * @email 463364973@qq.com
     * <p>
     * Date:2019/4/5 15:25
     */
    @Service
    public class WxService {
    
        private final static Logger LOGGER = LoggerFactory.getLogger(WxService.class);
        /** 获取ticket地址 */
        private final static String GET_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";
        /** appid */
        public final static String APP_ID = "你自己appid";
        /** appsecret */
        public final static String APP_SECRET = "你自己的secret";
    
        private static Ticket TICKET;
    
        /**
         * 获取ticket
         */
        private static void getTicket(){
          // RestTemplate 
            RestTemplate restTemplate = new RestTemplate();
            String url = GET_TICKET_URL.replace("ACCESS_TOKEN",getAccessToken());
            String forObject = restTemplate.getForObject(url, String.class);
            JSONObject jsonObject = JSONUtil.parseObj(forObject);
            String ticket = jsonObject.getStr("ticket");
            String expiresIn = jsonObject.getStr("expires_in");
            // 创建token对象,并存起来
            TICKET = new Ticket(ticket,expiresIn);
        }
        /**
         * 向外暴露的获取Ticket方法
         * @return
         */
        public static String getJsSdkTicket(){
            if (TICKET == null || TICKET.isExpired()){
                getTicket();
            }
            return TICKET.getTicket();
        }
    }
    
    

    相关文章

      网友评论

          本文标题:微信JSSDKconfig接口注入权限验证配置的参数获取--ja

          本文链接:https://www.haomeiwen.com/subject/zigboqtx.html