微信开发获取地理位置实例(java,非常详细,附工程源码)

来源:互联网 发布:浙师大网络培训平台 编辑:程序博客网 时间:2024/06/11 01:49

在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础:

1、微信开发之入门教程,该文章详细讲解了企业号体验号免费申请与一些必要的配置,以及如何调用微信接口。

2、微信开发之通过代理调试本地项目,该文章详细讲解了如何调试本地项目,使用工具的详细安装与配置。

3、微信开发之使用java获取签名signature(贴源码,附工程),该文详细讲些了如何获取签名,代码十分详细。

对于初学者,可能还不知道订阅号、服务号、和企业号的区别,博主之前也是一直没有弄清楚,因此查阅资料整理了一篇博客供大家阅读:微信服务号、订阅号和企业号的区别(运营和开发两个角度)。建议有时间得猿友还是阅读一下为好。

上面的文章内容虽然有点多而且繁琐,看完之后不敢说已经入门,但是初步了解,自己写实例是没有问题的。不积跬步无以至千里,希望猿友们耐心继续下去!!!!!!

上面的文章内容虽然有点多而且繁琐,看完之后不敢说已经入门,但是初步了解,自己写实例是没有问题的。不积跬步无以至千里,希望猿友们耐心继续下去!!!!!!

上面的文章内容虽然有点多而且繁琐,看完之后不敢说已经入门,但是初步了解,自己写实例是没有问题的。不积跬步无以至千里,希望猿友们耐心继续下去!!!!!!

期间可能会遇到一些坑,欢迎与博主评论交流

有了上面的基础,接下来博主将分享一个具体的微信开发实例,获取用户当前的地理位置。

一、结果演示

这里写图片描述 这里写图片描述
这里写图片描述 这里写图片描述

二、代码及代码讲解

本工程使用的环境是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

加上这篇文章,博主微信相关文章就有5篇,将会点亮博主微信开发博客专栏(左侧可看到),欢迎订阅。

欢迎相互关注交流,博主会不断将工作上遇到的技术点写成博客分享给大家。

6 0
原创粉丝点击