温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java如何获取微信timestamp,nonceStr,signature参数

发布时间:2021-01-18 11:46:12 来源:亿速云 阅读:2100 作者:小新 栏目:移动开发

这篇文章主要介绍java如何获取微信timestamp,nonceStr,signature参数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

用java代码来实现获取timestamp,nonceStr,signature这三个参数

Sign代码:

package com.test.util; import java.util.UUID; import java.util.Map; import java.util.HashMap; import java.util.Formatter; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.io.UnsupportedEncodingException;     public class Sign {     public static void main(String[] args) {         String jsapi_ticket =JsapiTicketUtil.getJSApiTicket();;         // 注意 URL 一定要动态获取,不能 hardcode         String url = "http://www.vxzsk.com/xx/x.do";//url是你请求的一个action或者controller地址,并且方法直接跳转到使用jsapi的jsp界面         Map<String, String> ret = sign(jsapi_ticket, url);         for (Map.Entry entry : ret.entrySet()) {             System.out.println(entry.getKey() + ", " + entry.getValue());         }     };   public static Map<String, String> sign(String jsapi_ticket, String url) {         Map<String, String> ret = new HashMap<String, String>();         String nonce_str = create_nonce_str();         String timestamp = create_timestamp();         String string1;         String signature = "";           //注意这里参数名必须全部小写,且必须有序         string1 = "jsapi_ticket=" + jsapi_ticket +                   "&noncestr=" + nonce_str +                   "&timestamp=" + timestamp +                   "&url=" + url;         System.out.println(string1);           try         {             MessageDigest crypt = MessageDigest.getInstance("SHA-1");             crypt.reset();             crypt.update(string1.getBytes("UTF-8"));             signature = byteToHex(crypt.digest());         }         catch (NoSuchAlgorithmException e)         {             e.printStackTrace();         }         catch (UnsupportedEncodingException e)         {             e.printStackTrace();         }           ret.put("url", url);         ret.put("jsapi_ticket", jsapi_ticket);         ret.put("nonceStr", nonce_str);         ret.put("timestamp", timestamp);         ret.put("signature", signature);           return ret;     }       private static String byteToHex(final byte[] hash) {         Formatter formatter = new Formatter();         for (byte b : hash)         {             formatter.format("%02x", b);         }         String result = formatter.toString();         formatter.close();         return result;     }       private static String create_nonce_str() {         return UUID.randomUUID().toString();     }       private static String create_timestamp() {         return Long.toString(System.currentTimeMillis() / 1000);     } }

第16行main方法中的一个变量url就是你请求的一个action或者controller地址,并且方法直接跳转到使用jsapi的jsp界面

获取jsapi_ticket工具类代码:


package com.test.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection;   import net.sf.json.JSONObject; import com.test.weixin.TestAcessToken; /***  * @author V型知识库  www.vxzsk.com  *  */ public class JsapiTicketUtil {           /***      * 模拟get请求      * @param url      * @param charset      * @param timeout      * @return      */      public static String sendGet(String url, String charset, int timeout)       {         String result = "";         try         {           URL u = new URL(url);           try           {             URLConnection conn = u.openConnection();             conn.connect();             conn.setConnectTimeout(timeout);             BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset));             String line="";             while ((line = in.readLine()) != null)             {                             result = result + line;             }             in.close();           } catch (IOException e) {             return result;           }         }         catch (MalformedURLException e)         {           return result;         }                 return result;       }      public static String getAccessToken(){             String appid="你公众号基本设置里的应用id";//应用ID             String appSecret="你公众号基本设置里的应用密钥";//(应用密钥)             String url ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appSecret+"";             String backData=TestAcessToken.sendGet(url, "utf-8", 10000);             String accessToken = (String) JSONObject.fromObject(backData).get("access_token");               return accessToken;      }           public static String getJSApiTicket(){          //获取token         String acess_token= JsapiTicketUtil.getAccessToken();         String urlStr = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+acess_token+"&type=jsapi";           String backData=TestAcessToken.sendGet(urlStr, "utf-8", 10000);           String ticket = (String) JSONObject.fromObject(backData).get("ticket");           return  ticket;                   }             public static void main(String[] args) {         String jsapiTicket = JsapiTicketUtil.getJSApiTicket();         System.out.println("调用微信jsapi的凭证票为:"+jsapiTicket);       }   }


读者可直接把代码复制到myeclipse或者Eclipse中运行main方法即可,但是在这里提示读者JsapiTicketUtil中获取acces_token方法中需要读者自行填写自己的appid和appsecret。

以上是“java如何获取微信timestamp,nonceStr,signature参数”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI