Эта часть требует использования JS-SDK от WeChat, который является инструментом веб-разработки, основанным на WeChat, предоставленном общественной платформой WeChat для веб-разработчиков.
Используя WeChat JS-SDK, веб-разработчики могут использовать WeChat для эффективного использования возможности фотографирования, выбора изображений, голоса, местоположения и других мобильных систем, и могут напрямую использовать уникальные возможности WeChat, такие как обмен WeChat, сканирование, купоны на карты и платеж для предоставления пользователям WeChat лучше.
Официальная документация
1. Введение JS-SDK
1. Войдите на общедоступную платформу WeChat и введите «Настройки функции» в «Настройках публичной учетной записи» и заполните имя домена безопасности «JS Interface Security». Так же, как авторизация веб -страницы, это просто доменное имя.
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/jwixin-1.2.0.js"> </script>
2. Проверьте конфигурацию через интерфейс конфигурации
wx.config ({Debug: true, // Включить режим отладки, возвращаемые значения всех API, вызванных клиентом, будут предупреждены. Чтобы просмотреть пропущенные параметры, вы можете открыть их на стороне ПК. noncestr: '', // требуется, случайная строка, сгенерированная для подписи подписи: '', // требуется, подпись Jsapilist: [] // требуется, список интерфейсов JS, которые необходимо использовать});Во -первых, перед созданием этой подписи необходимо получить временный билет jsapi_ticket. JSAPI_TICKET - это временный билет, используемый официальной учетной записью, чтобы позвонить в интерфейс WeChat JS. При нормальных обстоятельствах период достоверности jsapi_ticket составляет 7200 секунд, который получается через Access_token. Поскольку количество вызовов API для получения JSAPI_TICKET очень ограничено, частое обновление JSAPI_TICKET приведет к ограничению вызовов API, влияющих на его собственный бизнес, а также необходимо контролировать освежение центрального сервера управления.
1. Получить временные заметки
Инкапсуляция возвращает результат
пакет com.phil.wechatauth.model.resp; Import Com.phil.common.Result.ResultState; / *** jsapi_ticket -это временный билет, используемый официальной учетной записью, чтобы вызвать интерфейс WeChat JS* @author Phil* @date 21 августа 2017 г.**/ Public Class Jsapiticket Extends ResultState {/ ****/ Private Static Long Long SerialversionUID = -35700911078237650303L; частный билет строк; // jsapi_ticket private string expires_in; public String getTicket () {return Ticket; } public void Centicket (String Ticket) {this.ticket = ticket; } public String getExpires_in () {return expires_in; } public void setExpires_in (string expires_in) {this.expires_in = expires_in; }}Как это получить
/ *** Получите временный билет, чтобы позвонить в интерфейс WeChat JS от JSAPI_TICKET* @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. Сгенерируйте подпись и параметры возврата
Правила генерации подписей следующие: поля, участвующие в подписи, включают в себя uncestr (случайная строка), действительный JSAPI_Ticket, TimeStamp (TimeStamp), URL (URL -адрес текущей веб -страницы, не включая # и ее последующие части). После сортировки всех параметров, которые должны быть подписаны от малого до большого (словарь-порядок) в соответствии с кодом ASCII имени поля, формат пары значений ключей URL (то есть key1 = value1 & key2 = value2…) используется для разбивания в строкости строки1. Здесь следует отметить, что все имена параметров являются нижними символами. String1 зашифруется, а имя поля и значение поля являются исходными значениями, и не выполняется выход URL.
Пример String1 заключается в следующем
jsapi_ticket = sm4aovdwfpe4dxkxges8vmcpggvi4c3vm0p37wvucfvkvay_90u5h9nbslyy3-htdfl2fzfy1a OCHKP7QG & nonCESTR = WM3WZYTPZ0WZCCNW × TAMP = 1414587457 & url = http: //mp.wexin.qq.com? Params = значение
Здесь есть яма. Страница не является CCESTR, но подписанное поле не является COESTR. Обратите внимание на простую инкапсуляцию информации конфигурации JS-SDK.
пакет com.phil.wechatauth.model.resp; / *** Информация о конфигурации страницы JS-SDK* @author Phil* @date 22 августа 2017 г.**/ public jswechatconfig {private String Appid; Частная длинная метка времени; частная строка не Cestr; Частная строковая подпись; 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 = noncest; } public String getSignature () {return Signature; } public void setSignature (строковая подпись) {this.Signature = Signature; }}Добавить информацию о конфигурации на страницу
/ ** * */ package com.phil.wechatauth.controller; Импорт java.util.sortedMap; импортировать java.util.treemap; Импорт javax.servlet.http.httpservletrequest; Импорт org.springframework.beans.factory.annotation.autowired; Import org.springframework.sterotype.controller; Импорт org.springframework.web.bind.annotation.requestmapping; Import com.phil.common.config.systemconfig; Import com.phil.common.config.wechatconfig; Import com.phil.common.util.dateTimeutil; Импорт com.phil.common.util.payutil; Импорт com.phil.common.util.signatureutil; Import com.phil.wechatauth.model.resp.jswechatconfig; Import com.phil.wechatauth.service.wechatauthservice; /** * js-sdk * @author phil * @date 21 августа 2017 г. * */@controller @Requestmapping ("/auth") открытый класс weChatauthController {@autowired private weChatauthservice weChatauthservice; /** * Получить географическое местоположение * @param запрос * @return * @throws Exception */@requestmapping ("/getLocation") public String getLocation (httpservlectrequest), бросает исключение {jswechconfig jswechatconfig = new jswechatconfig (); jsweChatconfig.setAppid (weChatconfig.app_id); jsweChatConfig.setTimeStamp (datetimeUtil.currenttime ()); jswechatconfig.setnoncestr (payutil.createnoncestr ()); SortedMap <объект, объект> 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 ()); Строка Signature = SignatureUtil.createsha1Sign (map, null, systemConfig.character_encoding); jswechatconfig.setsignature (подпись); request.setAttribute ("jsweChatConfig", jsweChatConfig); вернуть "weChatauth/getLocation"; }}Метод подписи
/ *** Участие в подписи через все элементы в карте <sortedMap, Object>** @param Map Коллекция карт, которые должны быть подписаны* @params apikey apikey, если пуст, он не будет участвовать в подписи, а если не пуст, он будет участвовать в Signature* @return*/ public static struesha1sign (sortedmap <объект, объект> apke apke apke apke apke apke apke apked apkeod apkeend, apkeend apil notsignParams (карта, apikey); MessagegeIgest md = null; try {md = messagegest.getinstance ("sha-1"); byte [] digest = md.digest (result.getbytes ()); result = bytetoStr (digest); } catch (nosuchalgorithmexception e) {e.printstacktrace (); } return Result; }Другие методы подписи
3. Успешная проверка через обработку готового интерфейса
Вышеупомянутое выполнение завершено, и введена полная страница
<%@ 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/tml4/html4/html. <html> <Head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <Title> Получить географическое место src = "http://res.wx.qq.com/open/js/jweixin-1.2.0.js"> </script> <link rol = "styleSheet" href = "http://cdn.bootcss.com/bootstrap/3.5.5/cssssssssssssssssssss.min.cssssssss.com/bootstrap/3.3.5/cssssssssssssssssssssssssss. src = "http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"> </script> </head> <body> <br> <div> <div> <label for = "firstname"> Адрес: </label> <div id = item-if "> <input =" value "value =" vally = "vally =" valy = " Placeholder = «Географическое местоположение получается" tabIndex = "1" autoCOMPLETE = "OFF"/> <div ID = "ime"> </div> </div> </div> </div> </body> <script type = "text/javascript"> Wx.config ({Debug: True, // Включение в режим Debug, возвращается. Параметры, вы можете открыть их на стороне ПК. '$ {jswechatconfig.noncestr}', // требуется, случайная строка, сгенерированная для подписи подписи подписи: '$ {jswechatconfig.signature}', // Требуем JS -интерфейсы показаны в Приложении 2}); wx.checkjsapi ({jsapilist: ['getLocation'], // Список интерфейсов JS, которые необходимо обнаружить. См. Приложение 2 для всех интерфейсов JS. Успех: Функция (Res) {if (res.CheckResult.getLocation == False) {alert (ваш weChat версии слишком низкий и не поддерживает weChat. версия! '); var широта; варь долгота; var speed; Точность VAR; wx.ready (function () {// После проверки информации о конфигурации будет выполнен метод готового. нужно размещать в готовой функции. Alert (Latitude); wx.error (function (res) {// Если информация конфигурации не подтверждается, функция ошибки будет выполнена. Если подпись истекает, проверка не выполняется. Для конкретных сообщений об ошибках вы можете открыть режим отладки конфигурации, или просмотреть ее в возвращенном параметре Res. Для спа -салонов вы можете обновить сигнатуру здесь. Alert («ошибка проверки»);}); </script> </html>Вы можете отлаживать его через инструмент WeChat Web Developer, официально предоставленный WeChat.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.