微信开发获取地理位置实例(java,非常详细,附工程源码)
来源:互联网 发布:华彩软件下载站 编辑:程序博客网 时间:2024/06/05 17:37
在本篇博客之前,博主已经写了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 +
"×tamp="
+ 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 +
"×tamp="
+ 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
- 微信开发获取地理位置实例(java,非常详细,附工程源码)
- 微信开发获取地理位置实例(java,非常详细,附工程源码)
- 微信开发获取地理位置实例(java,非常详细,附工程源码)
- 微信开发获取地理位置实例(java,非常详细,附工程源码)
- 微信开发之使用java获取签名signature(贴源码,附工程)
- Java微信公众平台开发之获取地理位置
- Java微信公众号开发(附源码!!!)
- Java微信公众号开发(附源码!!!)
- php微信开发 (获取用户地理位置)
- 微信获取地理位置
- 微信公众平台开发教程(四) 实例入门:机器人(附源码)
- 微信公众平台开发教程(四) 实例入门:机器人(附源码)
- 微信公众平台开发教程(四) 实例入门:机器人(附源码)
- 微信公众平台开发教程(四) 实例入门:机器人(附源码)
- 微信公众平台开发教程(四) 实例入门:机器人(附源码)
- ContentProvider详细介绍(附实例源码)
- ContentProvider详细介绍(附实例源码)
- 微信获取地理位置接口
- Redis为什么这么快?
- 调用了错误的保存、删除重载方法
- javaBean的概念
- hrbust 1313 火影忍者之~静音【优先队列STL+模拟】
- RS232,RS485波形分析
- 微信开发获取地理位置实例(java,非常详细,附工程源码)
- 树状数组
- 如何开发系统参数
- Ligerui之grid表格的dataAction的local和server的区别
- 【VS开发】OpenCV2:Mat属性type,depth,step
- 学生
- Tyvj_P1028
- LigerUI之grid表格点击表头标题排序实现
- 模板别名