在本篇博客之前,博主已经写了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_tokenMap<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);//获取ticketparams.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);//获取签名signatureString 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 StringStringBuffer 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_tokenMap<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");//获取ticketparams.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");//获取签名signatureString noncestr = UUID.randomUUID().toString();String timestamp = Long.toString(System.currentTimeMillis() / 1000);//获取请求urlString 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}', // 必填,企业号的唯一标识,此处填写企业号corpidtimestamp: parseInt("${timestamp}",10), // 必填,生成签名的时间戳nonceStr: '${noncestr}', // 必填,生成签名的随机串signature: '${signature}',// 必填,签名,见附录1jsApiList: ['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篇,将会点亮博主微信开发博客专栏(左侧可看到),欢迎订阅。

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

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

  1. 【游戏开发实战】用Go语言写一个服务器,实现与Unity客户端通信(Golang | Unity | Socket | 通信 | 教程 | 附工程源码)

    文章目录 一.前言 二.Go开发环境搭建(Windows系统) 1.安装Go命令行工具 2.创建GoWorkspace目录 3.配置GOPATH环境变量 4.配置GOPROXY代理 5.安装VSCod ...

  2. PDF文件JAVA去水印源码,给pdf文件添加防伪水印logo(附工程源码下载)

    pdf添加水印logo这种需求场景确实很少,有些时候一些销售单据生成pdf添加一个水印logo,做一个简单的防伪效果,虽然实际上并没有太大作用,但是产品经理说要,巴拉巴拉--省略一万字. 下面将源码分 ...

  3. 微信 网页开发 获取地理位置 高德地图显示

    1.微信中获取地理位置经纬度 wx.getLocation({type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02 ...

  4. 【已完结!】Java基础--学习笔记(零起点打开java世界的大门)--博客汇总表【附:视频、工程源码、资料、详细笔记】

    java零基础入门到精通(2019版)[黑马程序员] 视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:z ...

  5. 编程语言用 Java 开发一个打飞机小游戏(附完整源码)

    编程语言用 Java 开发一个打飞机小游戏(附完整源码) 上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过 ...

  6. 【游戏开发实战】Unity手游第一人称视角,双摇杆控制,FPS射击游戏Demo(教程 | 含Demo工程源码)

    文章目录 一.前言 二.实现方案 1.无主之地,第一人称视角 2.我之前做的摇杆控制 3.第一人称视角 + 摇杆控制 三.开始实战 1.资源获取:Unity AssetStore 2.Low Poly ...

  7. 基于Python+百度语音的智能语音ChatGPT聊天机器人(机器学习+深度学习+语义识别)含全部工程源码 适合个人二次开发

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 Python 环境 Pycharm 环境 ChatterBot 环境 模块实现 1. 模型构建 2. 服务器端 3. 客户端 4. 语音录入 ...

  8. 二次开发:flowable审批流程实践与创建流程源码分析

    二次开发:flowable审批流程实践与创建流程源码分析 上一篇已经描述了基于开源项目https://doc.iocoder.cn/的flowable的快速开发,创建了一个租户,创建了用户和相应的岗位 ...

  9. 前后端分离工程实现 (VUE、JAVA)、附全部源码

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 整个工程基本情况简述: 前端工程语言:vue (node.js) 后端工程语言:java (s ...

最新文章

  1. 为Qt扩展QextSerialPort类
  2. CVPR2021单目深度估计:腾讯光影研究室优势夺冠,成果落地应用
  3. ActiveX控件制作与发布,如何将您的C++程序嵌入到浏览器中
  4. 在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值
  5. ubuntu下对Atom配置python的虚拟环境
  6. 自动部署 管道 ci cd_自动化测试在CI CD管道中的作用
  7. 操作系统进程学习(Linux 内核学习笔记)
  8. 【每日一练 088】性能优化-SQL tuning(一)
  9. linux界面右键无效,在linuxtkin中运行GUI时,右键单击菜单消失得太快
  10. PR视频剪辑教学,基础工具学习教程「附软件」码住。
  11. 遇到一个奇怪的问题——关于VS2013、VS2015中字符集(多字节字符集和Unicode字符集)的选择
  12. 计算机屏幕显示电缆借口,电脑打不开,显示电缆线没有连接是什么意思?
  13. php 12306查询结果,使用php怎么编写一个12306余票查询功能
  14. 奥斯卡大乌龙,然而人工智能也预测《爱乐之城》为最佳影片
  15. 身为一个SEO/SEM/运营专员,一天的工作是怎样的?
  16. MIMO-OFDM系统原理及其关键技术
  17. 【20保研】中南大学计算机学院2019年全国优秀大学生暑期夏令营通知
  18. 可视化之circular barplot
  19. 小红书X千瓜联合发布|小红书2021年4月创作者红人榜
  20. python matplotlib 绘制布林带

热门文章

  1. JAVA中将html转换成pdf
  2. 贷款利率--等额本息和等额本金的对比
  3. Charles介绍与使用
  4. Charles工具使用教程,以及注意事项。
  5. 【花雕动手做】有趣好玩的音乐可视化系列项目(27)--磁搅LED水旋灯
  6. linux如何连接手机传文件,Ubuntu和手机通过蓝牙互传文件
  7. 摩托车头盔防护膜—给你不一样的安全感
  8. 图像变形算法:实现Photoshop液化工具箱中向前变形工具
  9. PYNQ之Jupyter Notebook
  10. 如何检测计算机主板的好坏,如何测试电脑主板上电源芯片的好坏有什么方法