亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java微信公眾平臺之獲取地理位置

2024-07-14 08:40:40
字體:
來源:轉載
供稿:網友

本部分需要用到微信的JS-SDK,微信JS-SDK是微信公眾平臺面向網頁開發者提供的基于微信內的網頁開發工具包。
通過使用微信JS-SDK,網頁開發者可借助微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時可以直接使用微信分享、掃一掃、卡券、支付等微信特有的能力,為微信用戶提供更優質的網頁體驗。

官方文檔

一、JS-SDK引入

1.先登錄微信公眾平臺進入“公眾號設置”的“功能設置”里填寫“JS接口安全域名”,和網頁授權一樣只是個域名。

2.在需要調用JS接口的頁面引入如下JS文件之一

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

二、通過config接口注入權限驗證配置

wx.config({  debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。  appId: '', // 必填,公眾號的唯一標識  timestamp: , // 必填,生成簽名的時間戳  nonceStr: '', // 必填,生成簽名的隨機串  signature: '',// 必填,簽名  jsApiList: [] // 必填,需要使用的JS接口列表 }); 

首先生成這個signature之前需要獲取到一個臨時票據jsapi_ticket,jsapi_ticket是公眾號用于調用微信JS接口的臨時票據。正常情況下,jsapi_ticket的有效期為7200秒,通過access_token來獲取。由于獲取jsapi_ticket的api調用次數非常有限,頻繁刷新jsapi_ticket會導致api調用受限,影響自身業務,同樣也需要個中控服務器控制刷新。

1、獲取臨時票據

封裝返回結果

package com.phil.wechatauth.model.resp;  import com.phil.common.result.ResultState;  /**  * jsapi_ticket是公眾號用于調用微信JS接口的臨時票據  * @author phil  * @date 2017年8月21日  *  */ public class JsapiTicket extends ResultState {   /**  *  */  private static final long serialVersionUID = -357009110782376503L;   private String ticket; //jsapi_ticket   private String expires_in;   public String getTicket() {  return ticket;  }   public void setTicket(String ticket) {  this.ticket = ticket;  }   public String getExpires_in() {  return expires_in;  }   public void setExpires_in(String expires_in) {  this.expires_in = expires_in;  } } 

獲取方法

/**  * 獲取jsapi_ticket 調用微信JS接口的臨時票據  * @return  */ public String getTicket(String accessToken) {  JsapiTicket jsapiTicket = null;  Map<String,String> params = new TreeMap<String,String>();  params.put("access_token",accessToken);  params.put("type", "jsapi");  String result = HttpReqUtil.HttpDefaultExecute(HttpReqUtil.GET_METHOD, WechatConfig.GET_TICKET_URL, params,"");  if(StringUtils.isNotBlank(result)){  jsapiTicket = JsonUtil.fromJson(result, JsapiTicket.class);  }  if(jsapiTicket.getErrcode()==0){  return jsapiTicket.getTicket();  }  return null; } 

2、生成簽名并返回參數

signature生成規則如下:參與簽名的字段包括noncestr(隨機字符串), 有效的jsapi_ticket, timestamp(時間戳), url(當前網頁的URL,不包含#及其后面部分) 。對所有待簽名參數按照字段名的ASCII 碼從小到大排序(字典序)后,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1。這里需要注意的是所有參數名均為小寫字符。對string1作sha1加密,字段名和字段值都采用原始值,不進行URL 轉義。

string1示例如下

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com?params=value 

這里有個坑,頁面是nonceStr,但是簽名的字段是noncestr,注意大小寫
簡單封裝下JS-SDK config配置信息

package com.phil.wechatauth.model.resp;  /**  * JS-SDK的頁面配置信息  * @author phil  * @date 2017年8月22日  *  */ public class JsWechatConfig {   private String appId;   private long timestamp;   private String noncestr;   private String signature;   public String getAppId() {  return appId;  }   public void setAppId(String appId) {  this.appId = appId;  }   public long getTimestamp() {  return timestamp;  }   public void setTimestamp(long timestamp) {  this.timestamp = timestamp;  }   public String getNoncestr() {  return noncestr;  }   public void setNoncestr(String noncestr) {  this.noncestr = noncestr;  }   public String getSignature() {  return signature;  }   public void setSignature(String signature) {  this.signature = signature;  } } 

添加配置信息到頁面

/**  *  */ package com.phil.wechatauth.controller;  import java.util.SortedMap; import java.util.TreeMap;  import javax.servlet.http.HttpServletRequest;  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;  import com.phil.common.config.SystemConfig; import com.phil.common.config.WechatConfig; import com.phil.common.util.DateTimeUtil; import com.phil.common.util.PayUtil; import com.phil.common.util.SignatureUtil; import com.phil.wechatauth.model.resp.JsWechatConfig; import com.phil.wechatauth.service.WechatAuthService;  /**  * JS-SDK  * @author phil  * @date 2017年8月21日  *  */ @Controller @RequestMapping("/auth") public class WechatAuthController {   @Autowired  private WechatAuthService wechatAuthService;   /**  * 獲取地理位置  * @param request  * @return  * @throws Exception  */  @RequestMapping("/getLocation")  public String getLocation(HttpServletRequest request) throws Exception{  JsWechatConfig jsWechatConfig = new JsWechatConfig();  jsWechatConfig.setAppId(WechatConfig.APP_ID);  jsWechatConfig.setTimestamp(DateTimeUtil.currentTime());  jsWechatConfig.setNoncestr(PayUtil.createNonceStr());  SortedMap<Object,Object> map = new TreeMap<Object,Object>();  map.put("jsapi_ticket", wechatAuthService.getTicket(wechatAuthService.findlastestToken()));  map.put("noncestr", jsWechatConfig.getNoncestr());  map.put("timestamp", jsWechatConfig.getTimestamp());  map.put("url", request.getRequestURL().toString());  String signature = SignatureUtil.createSha1Sign(map, null, SystemConfig.CHARACTER_ENCODING);  jsWechatConfig.setSignature(signature);  request.setAttribute("jsWechatConfig", jsWechatConfig);  return "wechatauth/getLocation";  } } 

簽名方法

/**  * 通過Map<SortedMap,Object>中的所有元素參與簽名  *  * @param map 待參與簽名的map集合  * @params apikey apikey中 如果為空則不參與簽名,如果不為空則參與簽名  * @return  */ public static String createSha1Sign(SortedMap<Object, Object> map, String apiKey, String characterEncoding) {  String result = notSignParams(map, apiKey);  MessageDigest md = null;  try {  md = MessageDigest.getInstance("SHA-1");  byte[] digest = md.digest(result.getBytes());  result = byteToStr(digest);  } catch (NoSuchAlgorithmException e) {  e.printStackTrace();  }  return result; } 

其他的簽名方法

三、通過ready接口處理成功驗證

以上執行完成,進入的完整的頁面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>獲取地理位置</title> <!-- 微信 js-sdk --> <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css"> <script src="http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> </head> <body>  <br>  <div class="container">  <div class="form-group">   <label for="firstname" class="col-sm-2 control-label">地址:</label>   <div class="col-sm-10" id="item-ifo">   <input type="text" value="" class="form-control"    name="location.address" id="address" placeholder="正在獲取地理位置" tabindex="1" autocomplete="off" />   <div class="i-name ico" id="i-name"></div>   </div>  </div>  </div>  </body> <script type="text/javascript">  wx.config({  debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。  appId: '${jsWechatConfig.appId}', // 必填,公眾號的唯一標識  timestamp: '${jsWechatConfig.timestamp}' , // 必填,生成簽名的時間戳  nonceStr: '${jsWechatConfig.noncestr}', // 必填,生成簽名的隨機串  signature: '${jsWechatConfig.signature}',// 必填,簽名,見附錄1  jsApiList: [ 'checkJsApi', 'openLocation', 'getLocation'] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2  });   wx.checkJsApi({  jsApiList: ['getLocation'], // 需要檢測的JS接口列表,所有JS接口列表見附錄2,  success: function(res) {   if (res.checkResult.getLocation == false) {   alert('你的微信版本太低,不支持微信JS接口,請升級到最新的微信版本!');   return;   }  }  });  var latitude;  var longitude;  var speed;  var accuracy;  wx.ready(function(){  // config信息驗證后會執行ready方法,所有接口調用都必須在config接口獲得結果之后,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調用相關接口,則須把相關接口放在ready函數中調用來確保正確執行。對于用戶觸發時才調用的接口,則可以直接調用,不需要放在ready函數中。  wx.getLocation({   success : function(res) {   latitude = res.latitude; // 緯度,浮點數,范圍為90 ~ -90   longitude = res.longitude; // 經度,浮點數,范圍為180 ~ -180。   speed = res.speed; // 速度,以米/每秒計   accuracy = res.accuracy; // 位置精度   alert(latitude);   alert(accuracy);   },   cancel : function(res) {   alert('未能獲取地理位置');   }  });  });   wx.error(function(res){  // config信息驗證失敗會執行error函數,如簽名過期導致驗證失敗,具體錯誤信息可以打開config的debug模式查看,也可以在返回的res參數中查看,對于SPA可以在這里更新簽名。  alert("驗證出錯");  }); </script> </html> 

可以通過微信官方提供的微信web開發者工具調試。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久亚洲影院你懂的| 九九精品在线观看| 国产成人精品久久| 日本高清不卡在线| 久久精品视频在线播放| 亚洲自拍中文字幕| 欧美日韩国产在线播放| 中文字幕亚洲欧美日韩2019| 在线观看视频亚洲| 26uuu亚洲伊人春色| 国语自产精品视频在免费| 精品中文字幕久久久久久| 国产亚洲成av人片在线观看桃| 最近2019中文字幕大全第二页| 久久久久久久久久久91| 性欧美在线看片a免费观看| 欧美成人久久久| 午夜剧场成人观在线视频免费观看| 97人人爽人人喊人人模波多| 日韩av手机在线| 亚洲最大福利网站| 成人国产精品久久久| 欧美日韩免费区域视频在线观看| 亚洲欧美另类自拍| 欧美日韩精品中文字幕| 高清日韩电视剧大全免费播放在线观看| 一区二区三区视频在线| 久久久久久久久久久亚洲| 国产精品高清在线观看| 亚洲福利在线看| 色综合久综合久久综合久鬼88| 久久夜色精品国产欧美乱| 欧美老肥婆性猛交视频| 国产精品欧美亚洲777777| 国产精品久久久久久一区二区| 欧美另类极品videosbest最新版本| 欧美二区在线播放| 国产在线98福利播放视频| 亚洲精品99999| 成人中文字幕在线观看| 欧美激情亚洲视频| 亚州精品天堂中文字幕| 国产一区二区丝袜| 亚洲午夜av久久乱码| 久久国产色av| 欧美一乱一性一交一视频| 亚洲精品99久久久久| 91手机视频在线观看| 国产精品视频导航| 98精品在线视频| 亚洲性线免费观看视频成熟| 欧美性69xxxx肥| 欧美乱人伦中文字幕在线| 亚洲精品美女网站| 亚洲va久久久噜噜噜久久天堂| 精品国产乱码久久久久酒店| 精品亚洲夜色av98在线观看| 最近中文字幕mv在线一区二区三区四区| 欧美剧在线观看| 亚洲一区二区三区在线免费观看| 亚洲精美色品网站| 欧美极品少妇全裸体| 欧美视频一二三| 亚洲激情自拍图| 久久久久久成人精品| 91丨九色丨国产在线| 岛国精品视频在线播放| 精品久久久久久中文字幕大豆网| 国产精品视频精品| 久久久91精品| 久久精品国亚洲| 992tv成人免费影院| 92看片淫黄大片欧美看国产片| 亚洲男人第一av网站| 国产精品一区电影| 日韩av在线直播| 色yeye香蕉凹凸一区二区av| 亚洲一区二区三区四区视频| 日韩大陆毛片av| 午夜精品久久久久久久99热浪潮| 亚洲网在线观看| 欧美日韩国产精品专区| 亚洲欧洲国产一区| 欧美高清在线观看| 韩国精品美女www爽爽爽视频| 中国人与牲禽动交精品| 亚洲精选一区二区| 欧美激情精品久久久久| 久久国产精品久久国产精品| 欧美高清视频免费观看| 日韩视频免费在线| 欧美精品九九久久| 亚洲色图美腿丝袜| 久久69精品久久久久久久电影好| 亚洲天堂av高清| 欧美一级大胆视频| 国产日韩欧美夫妻视频在线观看| 亚洲图片在线综合| 国产精品久久不能| 亚洲欧洲av一区二区| 亚洲电影av在线| 欧美视频裸体精品| 成人激情视频小说免费下载| 日本一区二区不卡| 亚洲片国产一区一级在线观看| 国产不卡精品视男人的天堂| 中文精品99久久国产香蕉| 久青草国产97香蕉在线视频| 国产日韩在线免费| 日韩风俗一区 二区| 国产精品一二三在线| 欧美激情亚洲综合一区| 俺去亚洲欧洲欧美日韩| 国产在线观看精品一区二区三区| 色999日韩欧美国产| 午夜精品福利视频| 欧美日韩高清在线观看| 国产精品福利观看| 国产日韩欧美中文在线播放| 久久av中文字幕| 欧美日韩在线观看视频小说| 国产精品天天狠天天看| 欧美成人在线网站| 欧美色另类天堂2015| 国产欧美精品在线播放| 亚洲精品永久免费| 最新国产精品亚洲| 国产精品扒开腿做爽爽爽男男| 日韩av在线导航| 国产精品精品一区二区三区午夜版| 91大神福利视频在线| 精品亚洲一区二区三区在线播放| 一区二区三区美女xx视频| 亚洲第一福利网站| 亚洲精品视频播放| 亚洲欧美成人网| 国产精品日韩精品| 亚洲精美色品网站| 欧美在线国产精品| 欧美在线精品免播放器视频| 成人网在线观看| 97碰在线观看| 久久久精品在线观看| 欧美成人四级hd版| 992tv成人免费视频| 国产精品久久久久久亚洲影视| 亚洲v日韩v综合v精品v| 欧洲成人午夜免费大片| 欧美一级片免费在线| 欧美日韩在线影院| 成人免费福利在线| 日韩免费观看在线观看| 亚洲成在人线av| 17婷婷久久www| 欧美精品生活片| 在线观看欧美日韩| 国产一级揄自揄精品视频| www.99久久热国产日韩欧美.com| 91精品中文在线| 精品福利在线看| 国产日韩综合一区二区性色av| 尤物yw午夜国产精品视频明星| 91精品在线观看视频| 一本色道久久88综合亚洲精品ⅰ|