• 在进行微信运营的时候,用户地理位置是我们进行营销策划、广告活动投放、用户精准营销的重要依据,今天我们就来分析一下微信开发中如何获取获取用户地理位置获取用户地理位置,你需要在微信公众平台开发者中心...

    在进行微信运营的时候,用户地理位置是我们进行营销策划、广告活动投放、用户精准营销的重要依据,今天我们就来分析一下微信开发中如何获取获取用户地理位置。

    获取用户地理位置,你需要在微信公众平台开发者中心开启上报地理位置接口功能,开启之后会在用户首次进入公众号时,弹出是否允许上报地理位置选项,如果选择允许则在用户每次进入公众号会话的时候微信会以xml形式将用户的地理位置上报到你开发者中心填写的url上。

    注意:用户地理位置是被动获取的,需用户同意后才会上报,微信公众平台开发不能主动获取用户地理位置。

    先看看官方给出的xml示例及解析。

    推送XML数据包示例:

    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[LOCATION]]></Event>
    <Latitude>23.137466</Latitude>
    <Longitude>113.352425</Longitude>
    <Precision>119.385040</Precision>
    </xml>
    参数说明:


    下面来记录用户的地理位置信息到数据库.

    首先引用Wechat SDK,

    若对Wechat SDK不了解的,请点击查博客中对Wechat SDK详情。

    use  Com\Wechat;

    将数据插入数据库

    public function index(){
        	$agent = $_SERVER['HTTP_USER_AGENT']; 
    	if(!strpos($agent,"MicroMessenger")) {
    		echo '只能在微信浏览器中使用';
    		exit;
    	}
    
            $token = '7894578953485348944qwe'; //微信后台填写的TOKEN         
    	/* 加载微信SDK */
    	$wechat = new Wechat($token);
    	/* 获取请求信息 */
    	$data = $wechat->request();		 
    	if($data && is_array($data)){
    		M('wxuser_location')->add($data); 
                    //此处为写入数据库操作,至于数据库结构,数据定入操作根据你的系统决定
    	}
    }
    保存到数据库中结果如下,

    这就把用户的地理位置数据记录下来了,以后如果需要根据用户地理位置推送某些消息(如附近的门店),就可以在数据库中查询用户的最近的一次地理位置信息来推送了,如你的微信菜单上有一个按钮叫做“附近门店”,就可以把这个地理位置再匹配你门店地理位置选择性的向用户推送,这个留在下一节来讲,敬请关注。


    转载地址:http://www.360doc.com/content/15/0818/16/10227105_493229885.shtml

    详细参考:http://blog.csdn.net/fanhu6816/article/details/52123394

    展开全文
  • 在项目的逻辑业务当中,有时候需要获取用户当前所在的地理位置。那么,我们怎么去获取用户的地理位置定位呢?  可以采用百度地图接口获取用户的地理位置定位。要使用该服务,你得先注册成为百度地图开发者。...

           在项目的逻辑业务当中,有时候需要获取用户当前所在的地理位置。那么,我们怎么去获取用户的地理位置定位呢?

           可以采用百度地图接口获取用户的地理位置定位。要使用该服务,你得先注册成为百度地图开发者。http://lbsyun.baidu.com/  百度地图开放平台地址

           注册成为开发者后,你会获取到百度地图给你的一个密匙key,这个密匙key就是你以后获取用户地理位置的一个凭证。

          且使用该地图接口的时候要注意以下几点:

           每一个开发者帐号每天使用普通IP定位服务和经纬度定位服务的使用次数是有限的,即配额有限。

           每一个开发者帐号在每分钟内使用普通IP定位服务的次数是有限的,即并发量有限。

           同一个帐号下的HTTP/HTTPS请求,配额、并发共享。


           首先,我先讲解通过经纬度获取用户的地理位置信息。

           1、获取地理位置定位(微信)  wx.getLocation  接口

           如果你熟悉微信开发,那么在微信开发当中,有一个接口权限叫   获取地理位置定位    该权限是包含在js接口中的,也就是说你要使用该服务你就得先注册微信网页的js接口服务。然后才能调用该权限(不熟悉的朋友可以先看看微信开发手册)。

           1、通过该微信网页js接口  你可以拿到用户当前所在的地理位置信息(该接口调用了手机GPS地理位置定位接口,如果手机没有开启GPS,那么微信会提示该用户是否开启GPS地理位置定位的)的经、纬度(如   29.586331,106.311926)

           2、从微信网页上拿到的经纬度和百度认可的经纬度是否区别的(因为双方遵循的标准不同),所以要进行坐标转换,调用百度的坐标转换接口将从微信获取的经纬度转换成百度认可的经纬度

           3、将转换的经纬度,调用百度地理位置获取接口,获取用户当前所在地理位置。

          如php源码

    /**
     * 经纬度转换
     * @param 
     * int type 需要转换的目标类型
     * int to   百度类型
     * String $x,$y 经纬度
     */
    function getXy($x,$y,$ak,$type,$to)
    {
    	//调用百度地图接口
    	$apiUrl = "http://api.map.baidu.com/geoconv/v1/?coords={$x},{$y}&from={$type}&to={$to}&ak={$ak}";
    	
    	$jsonData = curlHttp($apiUrl);
    
    	$data = json_decode($jsonData,true);
    
    	return $data;
    }
    /**
     * @param
     * $x $y 微信获取的经纬度
     * $ak 百度地图key   通过注册成为开放者得到
     */
    function getAddress($x,$y,$ak){
    	
    	//转换成百度认可的经纬度
    	$res = getXy($x,$y,$ak,1,5);
    	
    	$y1 = $res['result'][0]['y'];
    	$x1 = $res['result'][0]['x'];
    	
        //调用百度地图接口
        $apiUrl = "http://api.map.baidu.com/geocoder/v2/?location={$y1},{$x1}&output=json&ak={$ak}";   //百度地图接口地址
        
        $jsonData = curlHttp($apiUrl);                                                                                                                   //curl 获取百度地理位置接口
    
        $data = json_decode($jsonData,true);                                                                                                    // 将返回的结果进行json处理
    
        return $result;
    }
    
    /*curl*/
    function curlHttp($url,$https = false,$post = false,$post_data = array())
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_HEADER,0);
        /*是否post提交数据*/
        if($post){
            curl_setopt($ch,CURLOPT_POST,1);
            if(!empty($post_data)){
                curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
            }
        }
        /*是否需要安全证书*/
        if($https){
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    // https请求 不验证证书和hosts
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        }
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }
    
    //test
    $x = '';
    $y = '';
    $ak= '';
    var_dump(getAddress($x,$y,$ak));



    明白了吧。先获取用户的经纬度,再获取用户具体的地理位置信息。  且获取到的地理位置精度很高。


    2、通过普通IP定位地理位置

    普通IP定位效果一般,只能针对IP返回大致位置信息,适用于对位置精度要求不高的应用。

    @param

    $ip  用户的ip地址

    $ak  百度地图key

    function getAddress($ip,$ak)
    {
        //调用百度地图接口
        $apiUrl = "$api = "http://api.map.baidu.com/location/{$ip}?ak={$ak}&coor=bd09ll"";   //百度地图接口地址
        
        $jsonData = curlHttp($apiUrl);                                                                                                                   //curl 获取百度地理位置接口

        $data = json_decode($jsonData,true);                                                                                                    // 将返回的结果进行json处理

        return $result;
    }


    觉得满意请打赏,您的十分满意是笔者前进的动力



    展开全文
  • 微信开发获取地理位置实例(java),使用环境 eclipse + maven + springmvc,虽然项目名是first_maven_project,但是确实是微信开发实例哈,不要有任何怀疑,免费分享啦,哈哈。实例讲解欢迎访问博主博客...
  • 在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础:1、微信...3、微信开发之使用java获取签名signature(贴源码,附工程),该文详细讲些了如何获取签名,代码十分详细。对于初学者,可能还不知

    在本篇博客之前,博主已经写了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篇,将会点亮博主微信开发博客专栏(左侧可看到),欢迎订阅。

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

    展开全文
  • 微信企业号开发之地理位置信息获取

    1.官方文档说明

    上报地理位置事件

    成员同意上报地理位置后,每次在进入应用会话时都会上报一次地理位置,或在进入应用会话后每5秒上报一次地理位置。企业可以在管理端修改应用的以上设置。上报地理位置时,微信会将此事件推送到企业应用在管理端设置的URL(以下假设该URL为http://api.3dept.com)。

    • 请求说明

    Http请求方式: POST

    http://api.3dept.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS&timestamp=13500001234&nonce=123412323

    • 参数说明
    <xml>
       <ToUserName><![CDATA[toUser]]></ToUserName>
       <FromUserName><![CDATA[FromUser]]></FromUserName>
       <CreateTime>123456789</CreateTime>
       <MsgType><![CDATA[event]]></MsgType>
       <Event><![CDATA[LOCATION]]></Event>
       <Latitude>23.104105</Latitude>
       <Longitude>113.320107</Longitude>
       <Precision>65.000000</Precision>
       <AgentID>1</AgentID>
    </xml>
    

    参数 说明
    ToUserName 企业号CorpID
    FromUserName 成员UserID
    CreateTime 消息创建时间(整型)
    MsgType 消息类型,此时固定为:event
    Event 事件类型,此时固定为:LOCATION
    Latitude 地理位置纬度
    Longitude 地理位置经度
    Precision 地理位置精度
    AgentID 企业应用的id,整型。可在应用的设置页面查看

    管理中心的回调模式中有个上报地理位置设置:

    可以选择进入应用上报一次,或者5秒钟上报一次。

    2.处理

    解析xml然后读取地理位置,存入数据库中,方便下次调用(我试了放入httpsession中,可是下次并不能取到。。。)

    <span style="white-space:pre">			</span>Map<String, String> requestMap = MessageUtil.parseXml(sMsg);
    			String fromUserName = requestMap.get("FromUserName");
    			String toUserName = requestMap.get("ToUserName");
    			String msgType = requestMap.get("MsgType");
    			if (requestMap.get("Latitude")!=null) {
    				X=requestMap.get("Latitude");
    				Y=requestMap.get("Longitude");
    				System.out.println("------------------维度:"+X+"经度:"+Y+"-------------");
    			}

    这里X Y就是所需要的维度和经度

    3.作用

    可以用维度和经度获取城市代号,调用天气Api,也可以用来监测企业员工的位置,今天你有没有迟到或者早退啊



    展开全文
  • 先用微信sdk的定位功能,获取用户的经纬度  2.把经纬度通过百度地图接口转换经纬度  3.通过百度地图接口,通过转换后的经纬度获取对应的位置信息 一.微信公众好SDK使用 步骤一:绑定域名 先登录微信公众...

    思路:1.先用微信sdk的定位功能,获取到用户的经纬度

              2.把经纬度通过百度地图接口转换经纬度

             3.通过百度地图接口,通过转换后的经纬度获取对应的位置信息

    一.微信公众好SDK使用

    步骤一:绑定域名

    先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

    备注:登录后可在“开发者中心”查看对应的接口权限。

     

    步骤二:引入JS文件

    在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js

    备注:支持使用 AMD/CMD 标准模块加载方法加载

     

    步骤三:通过config接口注入权限验证配置

    所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。

    wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: '', // 必填,公众号的唯一标识
        timestamp: , // 必填,生成签名的时间戳
        nonceStr: '', // 必填,生成签名的随机串
        signature: '',// 必填,签名
        jsApiList: [] // 必填,需要使用的JS接口列表
    });

    步骤四:通过ready接口处理成功验证

    wx.ready(function(){
        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
    });

     

    获取地理位置接口

    wx.getLocation({
    type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
    success: function (res) {
    var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
    var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
    var speed = res.speed; // 速度,以米/每秒计
    var accuracy = res.accuracy; // 位置精度
    }
    });

    具体查看微信skd文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

     

     前端获取经纬度信息,通过ajax给接口处理。

     // 定位功能
        function location_weixin()
        {
            // 获取地理位置接口
            wx.getLocation({
                type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
                success: function (res) {
                    var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
                    var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
                    var speed = res.speed; // 速度,以米/每秒计
                    var accuracy = res.accuracy; // 位置精度
                    var openid = "<?=$openid?>";
                    $.ajax({
                        url:"../../2018_action/weixin_city_change/weixin_user_city_change_ajax.php",
                        type:'post',
                        data:{action:1,x:longitude,y:latitude,openid:openid},
                        success:function(res){
                            return false;
                        }
                    });
                    
                },
                cancel:function(){
                        return false;
                }
            });
        }

     

    二 . 把微信经纬度转为百度

    /**
     * 经纬度转换
     * @param 
     * int type 需要转换的目标类型
     * int to   百度类型
     * String $x,$y 经纬度
     */
    function getXy($x,$y,$ak,$type,$to)
    {
    	//调用百度地图接口
    	$apiUrl = "http://api.map.baidu.com/geoconv/v1/?coords={$x},{$y}&from={$type}&to={$to}&ak={$ak}";
    	$jsonData = curlHttp($apiUrl);
    	$data = json_decode($jsonData,true);
    	return $data;
    }
    

    三.利用经纬度,获取位置信息,百度地图key值需要去百度地图开放平台注册,创建应用。http://lbsyun.baidu.com/

    /**
     * @param
     * $x $y 微信获取的经纬度
     * $ak 百度地图key   通过注册成为开放者得到
     */
    function getAddress1($x,$y,$ak){
    	//转换成百度认可的经纬度
    	$res = getXy($x,$y,$ak,1,5);
    	$y1 = $res['result'][0]['y'];
    	$x1 = $res['result'][0]['x'];
        //调用百度地图接口
        $apiUrl = "http://api.map.baidu.com/geocoder/v2/?location={$y1},{$x1}&output=json&ak={$ak}";   //百度地图接口地址
        $jsonData = curlHttp($apiUrl);                                                                                                                   //curl 获取百度地理位置接口
        $data = json_decode($jsonData,true);                                                                                                    // 将返回的结果进行json处理
        return $data;
    }
    
    /*curl*/
    function curlHttp($url,$https = false,$post = false,$post_data = array())
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_HEADER,0);
        /*是否post提交数据*/
        if($post){
            curl_setopt($ch,CURLOPT_POST,1);
            if(!empty($post_data)){
                curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
            }
        }
        /*是否需要安全证书*/
        if($https){
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    // https请求 不验证证书和hosts
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        }
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }
    
    

     

    展开全文
  • 很久没搞微信的js-sdk了, 搞了一下午, 刷新页面老是失败, 没想到结合经验给大家展示下获取用户地理位置 第一步:登录微信公众号https://mp.weixin.qq.com 首先先设置最基本的配置(这一步大家应该都会)   第二...
  • 如果用户微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。 现在,我们要实现一个微信内网页,通过微信访问网页时,网页会展示微信用户的个人信息。因为涉及...
  • ThinkPHP5.0微信开发获取用户地理位置
  • 微信公众平台开发微信用户开发管理是子恒老师《微信公众平台开发》视频教程的第7部。详细讲解了用php开发微信,对微信公众平台中的粉丝用户管理开发。内容包含微信公众平台用户分组,获取微信用户列表,查询用户...
  • 最近一直在做公众号开发,这两天公司让我做一个类似钉钉打卡的功能,这时候我需要获取用户的经纬度, 但是在这之前我只知道在关注微信公众号的时候获取用户地理位置:...
  • 微信公众号开发获取用户地理位置微信公众号需要设置JS安全访问域名 域名设置请不要加上https: 如果你的域名是https://mp.csdn.net/postedit 请设置为:mp.csdn.net/postedit 1、后台获取验证签名信息 ...
  • 用户点击微信公众号底部【校区位置】菜单,打开应用页面,该页面中调用微信JSSDK打开微信内置地图,并设置目标地点(叩丁狼教育校区),此时可看到用户当前位置与目标地点位置的距离,还可通过右下角绿色按钮,调用...
  • 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。 官方文档 一、...
  • 开发微信公众号,首先要先成为开发者。请自行百度。 在微信公众平台开启接口权限——接口权限—网页服务—地理位置—开启 JSSDK使用步骤 步骤一:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”...
  • 微信公众服务号开发需求中经常有获取用户位置信息的功能,通过用户的位置信息,可以做一些地图导航,以及基于LBS的营销活动。 下面通过给大家介绍微信服务号获取用户位置信息的原理与步骤。原理 1. 位置信息获取...
  • 怎么可以实现微信用户给公共号发送信息的同时,微信公共号获取用户位置信息
  • 一、开始开发  1、该功能的实现需要调用微信公众号的js-sdk接口实现 ... 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信
  • 微信公众号开发获取openID以及用户详细信息,超详细步骤,亲测开发
  • 本文目录 : ...获取用户详细信息列表,有人会说直接去微信开发文档找到对应的Api不就得了,还有什么东西可写? 首先,微信没有直接提供这样的Api,所以只能将相关的接口进行组合使用。姑且做一下开发记录。
1 2 3 4 5 ... 20
收藏数 172,938
精华内容 69,175