zoukankan      html  css  js  c++  java
  • 微信开发获取地理位置实例

    # 获取签名工具类(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;
        }
    }
    View Code

    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;    
     
        }    
    }
    View Code

    # 前端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({
         beta: true,// 必须这么写,否则在微信插件有些jsapi会有问题
            debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: '${appId}', // 必填,企业号的唯一标识,此处填写企业号corpid
            timestamp: parseInt("${timestamp}",10), // 必填,生成签名的时间戳
            nonceStr: '${noncestr}', // 必填,生成签名的随机串
            signature: '${signature}',// 必填,签名,见附录1
            jsApiList: ['getLocation','openLocation'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        });
        wx.ready(function(){
             var isCheck=false;
             wx.checkJsApi({
               jsApiList: [
                 'getLocation'
               ],
             })
        });
     
        wx.error(function(res){
        });
    </script>
    </head>
    <body>
    <button id="getBBS" style="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>
     
     
     
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server"><title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no;" /> 
    <script type="text/javascript" src="../../js/jquery.1.11.1.min.js"></script>
    <script type="text/javascript" src="../../js/jweixin-1.0.0.js"></script>
    <script type="text/javascript">   
        $(function () {
            wx.config({
                debug: false,
                appId: '<%=app_Id%>',
                timestamp: <%=timestamp%>,
                nonceStr: '<%=nonceStr%>',
                signature: '<%=signature%>',
                jsApiList: [
                  'checkJsApi',             
                  'getLocation'
                ]
            });
            wx.ready(function () {
                var isCheck=false;
                wx.checkJsApi({
                    jsApiList: [
                      'checkJsApi',  
                      'getLocation'
                    ],
                    success: function (res) {
                        //alert(JSON.stringify(res));
                        isCheck=res.checkResult.getLocation;
                    }
                });
                document.querySelector('#btnLocation').onclick = function () {
                    if(!isCheck){
                        msgtip("您的微信版本不支持获取位置!");
                        return;
                    }
                    wx.getLocation({
                        success: function (res) {
                            alert(JSON.stringify(res));
                        },
                        cancel: function (res) {
                            alert('发生错误');
                        }
                    });
                };
            });
            wx.error(function (res) {
                alert(res.errMsg);
            });
    
        });
       
    </script>
    </head>
    <body>
        <form id="form1" runat="server">
            <header class="ui-header ui-header-positive ui-border-b">
                <i class="ui-icon-return" onclick="history.back()"></i><h1>获取地址位置</h1><a href="Default.aspx?open_id=" class="sp-back sp-home"></a> 
            </header>
            <div class="panel-body" style="margin-top:45px;">
                 <input type="button" id="btnLocation" value="取得位置" />
                <asp:Literal ID="lblInfo" runat="server"></asp:Literal>
               </div>
            <div class="ui-poptips ui-poptips-warn" id="divInfo" style="display:none;">
                <div class="ui-poptips-cnt"><i></i><span id="spntool"></span></div><input type="hidden" id="hideCard_no" />
            </div><div id="datePlugin"></div><asp:HiddenField ID="hideOpen_id" runat="server" />            
        </form>
    </body>
    </html>
  • 相关阅读:
    学习笔记之C++ How to Program(part)
    Makefile相关资料
    [ZZ]指针Guide
    [ZZ]make命令与makefile文件的写法
    SQLite数据库简介及资源下载
    程序员天生码农命?
    Application标签中有三个事件运行顺序
    Flex 项目案例集锦
    flex简介
    Flex连接数据库三种方法
  • 原文地址:https://www.cnblogs.com/tuziling/p/10787103.html
Copyright © 2011-2022 走看看