<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                在本篇博客之前,博主已經寫了4篇關于微信相關文章,其中三篇是本文基礎: 1、[微信開發之入門教程](http://blog.csdn.net/u013142781/article/details/50318181),該文章詳細講解了企業號體驗號免費申請與一些必要的配置,以及如何調用微信接口。 2、[微信開發之通過代理調試本地項目](http://blog.csdn.net/u013142781/article/details/50345117),該文章詳細講解了如何調試本地項目,使用工具的詳細安裝與配置。 3、[微信開發之使用java獲取簽名signature(貼源碼,附工程)](http://blog.csdn.net/u013142781/article/details/50429704),該文詳細講些了如何獲取簽名,代碼十分詳細。 對于初學者,可能還不知道訂閱號、服務號、和企業號的區別,博主之前也是一直沒有弄清楚,因此查閱資料整理了一篇博客供大家閱讀:[微信服務號、訂閱號和企業號的區別(運營和開發兩個角度)](http://blog.csdn.net/u013142781/article/details/50493918)。建議有時間得猿友還是閱讀一下為好。 上面的文章內容雖然有點多而且繁瑣,看完之后不敢說已經入門,但是初步了解,自己寫實例是沒有問題的。不積跬步無以至千里,希望猿友們耐心繼續下去!!!!!! 上面的文章內容雖然有點多而且繁瑣,看完之后不敢說已經入門,但是初步了解,自己寫實例是沒有問題的。不積跬步無以至千里,希望猿友們耐心繼續下去!!!!!! 上面的文章內容雖然有點多而且繁瑣,看完之后不敢說已經入門,但是初步了解,自己寫實例是沒有問題的。不積跬步無以至千里,希望猿友們耐心繼續下去!!!!! 期間可能會遇到一些坑,歡迎與博主評論交流 有了上面的基礎,接下來博主將分享一個具體的微信開發實例,獲取用戶當前的地理位置。 ### 一、結果演示 ![這里寫圖片描述](https://box.kancloud.cn/2016-03-02_56d69fc0ce0e6.jpg "") ![這里寫圖片描述](https://box.kancloud.cn/2016-03-02_56d69fc103dfd.jpg "") ![這里寫圖片描述](https://box.kancloud.cn/2016-03-02_56d69fc121785.jpg "") ![這里寫圖片描述](https://box.kancloud.cn/2016-03-02_56d69fc141a70.jpg "") ###二、代碼及代碼講解 本工程使用的環境是eclipse + maven + springmvc,下面附上關鍵代碼,springmvc和web.xml相關配置和maven相關依賴就不一一列舉,最后會附上工程供大家下載。 **2.1、獲取簽名工具類(httpclient和sha1加密)** ~~~ package com.luo.util; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; import net.sf.json.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; public class HttpXmlClient { public static String post(String url, Map<String, String> params) { DefaultHttpClient httpclient = new DefaultHttpClient(); String body = null; HttpPost post = postForm(url, params); body = invoke(httpclient, post); httpclient.getConnectionManager().shutdown(); return body; } public static String get(String url) { DefaultHttpClient httpclient = new DefaultHttpClient(); String body = null; HttpGet get = new HttpGet(url); body = invoke(httpclient, get); httpclient.getConnectionManager().shutdown(); return body; } private static String invoke(DefaultHttpClient httpclient, HttpUriRequest httpost) { HttpResponse response = sendRequest(httpclient, httpost); String body = paseResponse(response); return body; } private static String paseResponse(HttpResponse response) { HttpEntity entity = response.getEntity(); String charset = EntityUtils.getContentCharSet(entity); String body = null; try { body = EntityUtils.toString(entity); } catch (ParseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return body; } private static HttpResponse sendRequest(DefaultHttpClient httpclient, HttpUriRequest httpost) { HttpResponse response = null; try { response = httpclient.execute(httpost); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return response; } private static HttpPost postForm(String url, Map<String, String> params) { HttpPost httpost = new HttpPost(url); List<NameValuePair> nvps = new ArrayList<NameValuePair>(); Set<String> keySet = params.keySet(); for (String key : keySet) { nvps.add(new BasicNameValuePair(key, params.get(key))); } try { httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return httpost; } public static void main(String[] args) { //獲取access_token Map<String, String> params = new HashMap<String, String>(); params.put("corpid","wx5f24fa0db1819ea2"); params.put("corpsecret","uQtWzF0bQtl2KRHX0amekjpq8L0aO96LSpSNfctOBLRbuYPO4DUBhMn0_v2jHS-9"); String xml = HttpXmlClient.post("https://qyapi.weixin.qq.com/cgi-bin/gettoken",params); JSONObject jsonMap = JSONObject.fromObject(xml); Map<String, String> map = new HashMap<String, String>(); Iterator<String> it = jsonMap.keys(); while(it.hasNext()) { String key = (String) it.next(); String u = jsonMap.get(key).toString(); map.put(key, u); } String access_token = map.get("access_token"); System.out.println("access_token=" + access_token); //獲取ticket params.put("access_token",access_token); xml = HttpXmlClient.post("https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket",params); jsonMap = JSONObject.fromObject(xml); map = new HashMap<String, String>(); it = jsonMap.keys(); while(it.hasNext()) { String key = (String) it.next(); String u = jsonMap.get(key).toString(); map.put(key, u); } String jsapi_ticket = map.get("ticket"); System.out.println("jsapi_ticket=" + jsapi_ticket); //獲取簽名signature String noncestr = UUID.randomUUID().toString(); String timestamp = Long.toString(System.currentTimeMillis() / 1000); String url="http://mp.weixin.qq.com"; String str = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url; //sha1加密 String signature = SHA1(str); System.out.println("noncestr=" + noncestr); System.out.println("timestamp=" + timestamp); System.out.println("signature=" + signature); //最終獲得調用微信js接口驗證需要的三個參數noncestr、timestamp、signature } /** * @author:羅國輝 * @date: 2015年12月17日 上午9:24:43 * @description: SHA、SHA1加密 * @parameter: str:待加密字符串 * @return: 加密串 **/ public static String SHA1(String str) { try { MessageDigest digest = java.security.MessageDigest .getInstance("SHA-1"); //如果是SHA加密只需要將"SHA-1"改成"SHA"即可 digest.update(str.getBytes()); byte messageDigest[] = digest.digest(); // Create Hex String StringBuffer hexStr = new StringBuffer(); // 字節數組轉換為 十六進制 數 for (int i = 0; i < messageDigest.length; i++) { String shaHex = Integer.toHexString(messageDigest[i] & 0xFF); if (shaHex.length() < 2) { hexStr.append(0); } hexStr.append(shaHex); } return hexStr.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } } ~~~ **2.2、controller代碼(盡可能仔細閱讀下面的每一行代碼,特別是url部分)** ~~~ package com.luo.controller; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import net.sf.json.JSONObject; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.luo.util.HttpXmlClient; @Controller public class UserController { @RequestMapping("/") public ModelAndView getIndex(HttpServletRequest request){ ModelAndView mav = new ModelAndView("index"); //獲取access_token Map<String, String> params = new HashMap<String, String>(); params.put("corpid","wx7099477f2de8aded"); params.put("corpsecret","4clWzENvHVmpcyuA4toys0URkfYanIqWtxZ5plbisn6Cd5AVTF0thpaK6UAhjIvN"); String xml = HttpXmlClient.post("https://qyapi.weixin.qq.com/cgi-bin/gettoken",params); JSONObject jsonMap = JSONObject.fromObject(xml); Map<String, String> map = new HashMap<String, String>(); Iterator<String> it = jsonMap.keys(); while(it.hasNext()) { String key = (String) it.next(); String u = jsonMap.get(key).toString(); map.put(key, u); } String access_token = map.get("access_token"); //獲取ticket params.put("access_token",access_token); xml = HttpXmlClient.post("https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket",params); jsonMap = JSONObject.fromObject(xml); map = new HashMap<String, String>(); it = jsonMap.keys(); while(it.hasNext()) { String key = (String) it.next(); String u = jsonMap.get(key).toString(); map.put(key, u); } String jsapi_ticket = map.get("ticket"); //獲取簽名signature String noncestr = UUID.randomUUID().toString(); String timestamp = Long.toString(System.currentTimeMillis() / 1000); //獲取請求url String path = request.getContextPath(); //以為我配置的菜單是http://yo.bbdfun.com/first_maven_project/,最后是有"/"的,所以url也加上了"/" String url = request.getScheme() + "://" + request.getServerName() + path + "/"; String str = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url; //sha1加密 String signature = HttpXmlClient.SHA1(str); mav.addObject("signature", signature); mav.addObject("timestamp", timestamp); mav.addObject("noncestr", noncestr); mav.addObject("appId", "wx7099477f2de8aded"); System.out.println("jsapi_ticket=" + jsapi_ticket); System.out.println("noncestr=" + noncestr); System.out.println("timestamp=" + timestamp); System.out.println("url=" + url); System.out.println("str=" + str); System.out.println("signature=" + signature); return mav; } } ~~~ **2.3、前端js代碼(盡可能仔細閱讀下面的每一行代碼)** ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script> wx.config({ debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。 appId: '${appId}', // 必填,企業號的唯一標識,此處填寫企業號corpid timestamp: parseInt("${timestamp}",10), // 必填,生成簽名的時間戳 nonceStr: '${noncestr}', // 必填,生成簽名的隨機串 signature: '${signature}',// 必填,簽名,見附錄1 jsApiList: ['getLocation'] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2 }); wx.ready(function(){ }); wx.error(function(res){ }); </script> </head> <body> <button id="getBBS" style="width:1000px;height:600px;font-size:150px;" onclick="submitOrderInfoClick();">獲取地理位置</button> </body> <script type="text/javascript"> function submitOrderInfoClick(){ wx.getLocation({ success: function (res) { alert("小寶鴿獲取地理位置成功,經緯度為:(" + res.latitude + "," + res.longitude + ")" ); }, fail: function(error) { AlertUtil.error("獲取地理位置失敗,請確保開啟GPS且允許微信獲取您的地理位置!"); } }); } </script> </html> ~~~ ### 三、源碼下載 [http://download.csdn.net/detail/u013142781/9400470](http://download.csdn.net/detail/u013142781/9400470) 加上這篇文章,博主微信相關文章就有5篇,將會點亮博主微信開發博客專欄(左側可看到),歡迎訂閱。 歡迎相互關注交流,博主會不斷將工作上遇到的技術點寫成博客分享給大家。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看