精华内容
下载资源
问答
  • 关于使用高德地图API Web端(JS API)

    千次阅读 2018-08-28 10:09:36
    关于使用高德地图API web端(JS API) 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QZPHP_L 本次集成了浏览器定位,拖拽选址,POI周边搜索三个功能 浏览器定位 只需要...

    关于使用高德地图API web端(JS API)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QZPHP_L/article/details/82143240


    本次集成了浏览器定位拖拽选址POI周边搜索三个功能

    这里写图片描述

    浏览器定位

    只需要使用官网浏览器定位demo中一小段js代码

     //精确定位
     map.plugin('AMap.Geolocation', function() {
        geolocation = new AMap.Geolocation({
            enableHighAccuracy: true,//是否使用高精度定位,默认:true
            timeout: 10000,          //超过10秒后停止定位,默认:无穷大
            buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
            zoomToAccuracy: true,      //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
            buttonPosition:'RB'
         });
         map.addControl(geolocation);
         geolocation.getCurrentPosition();
         AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息
         AMap.event.addListener(geolocation, 'error', onError);      //返回定位出错信息
      });

    拖拽选址

    此功能需要引入高德地图的UI,否则页面上一些按键不显示

    <script type="text/javascript" src='//webapi.amap.com/maps?v=1.4.9&key=key值&plugin=AMap.ToolBar'></script>
    <!-- UI组件库 1.0 -->
    <script src="//webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>
    <script type="text/javascript">
       AMapUI.loadUI(['misc/PositionPicker'], function(PositionPicker) {
           var map = new AMap.Map('container', {
                zoom: 16,
                scrollWheel: false,
                resizeEnable: true     
           })
           var positionPicker = new PositionPicker({
                mode: 'dragMap',
                map: map
           });
          //精确定位
        map.plugin('AMap.Geolocation', function() {
           geolocation = new AMap.Geolocation({
              enableHighAccuracy: true,//是否使用高精度定位,默认:true
              timeout: 10000,          //超过10秒后停止定位,默认:无穷大
              buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
              zoomToAccuracy: true,      //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
              buttonPosition:'RB'
           });
           map.addControl(geolocation);
           geolocation.getCurrentPosition();
           AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息
           AMap.event.addListener(geolocation, 'error', onError);      //返回定位出错信息
          });
          //精确定位结束
          //拖拽成功触发
          positionPicker.on('success', function(positionResult) {
                document.getElementById('address').innerHTML = positionResult.address;      
                AMap.service(["AMap.PlaceSearch"], function() {
            var placeSearch = new AMap.PlaceSearch({ //构造地点查询类
                pageSize: 5,
                pageIndex: 1,
                panel: "panel"
            }); 
            var cpoint = [ positionResult.position]; //中心点坐标
            placeSearch.searchNearBy('', cpoint, 200, function(status, result) {
            });
        });
            });
            positionPicker.on('fail', function(positionResult) {
                document.getElementById('address').innerHTML = '获取位置信息失败';
            });
            var onModeChange = function(e) {
                positionPicker.setMode(e.target.value)
            }
            positionPicker.start();
            map.panBy(0, 1);
            map.addControl(new AMap.ToolBar({
                liteStyle: true
            }))
        });
        </script>

    到此基本实现定位和微调功能,下面可以根据需要加入POI周边搜索

    POI周边搜索

    浏览器定位成功后,自动检索周边一定范围内的地点
    var cpoint = [ positionResult.position]; //中心点坐标
    这里的positionResult.position是根据上文中拖拽选址成功后的返回值得来的
    这段js需要加到拖拽选址positionPicker.on返回success的函数中·

         AMap.service(["AMap.PlaceSearch"], function() {
            var placeSearch = new AMap.PlaceSearch({ //构造地点查询类
                pageSize: 5,
                pageIndex: 1,
                panel: "panel"
            });
    
            var cpoint = [ positionResult.position]; //中心点坐标
            placeSearch.searchNearBy('', cpoint, 200, function(status, result) {
    
            });
        });

    以上实现了定位,拖拽选址,POI周边功能
    需要特别注意的是Key值必须是Web端(JS API)的key值,这个Key值可以在高德开发平台的控制台中添加Key,
    选择Web端(JS API)点击生成Key。使用android或其他生成的key值,可以实现定位,但是其他功能都不会实现。

    测试时需放入环境中, 使用localhost127.0.0.1访问

    这里写图片描述

    下面贴出html部分

    css可根据需要自行修改

    <!doctype html>
    <html lang="zh-CN">
    <head>
        <!-- 原始地址://webapi.amap.com/ui/1.0/ui/misc/PositionPicker/examples/positionPicker.html -->
        <base href="//webapi.amap.com/ui/1.0/ui/misc/PositionPicker/examples/" />
        <meta charset="utf-8">
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
        <title>高德地图</title>
        <style>
        html,
        body {
            height: 100%;
            margin: 0;
            width: 100%;
            padding: 0;
            overflow: hidden;
            font-size: 13px;
        }
    
        .map {
            height: 310px;
            width: 100%;
    
        }
    
        #right {
            color: #444;
            background-color: #f8f8f8;
            min-width: 30px;
            line-height:30px;
            height: 30px;
            position: absolute; 
            top: 0;
            left: 0;
    
        }
    
        .title {
            width: 100%;
            background-color: #dadada
        }
    
        button {
            border: solid 1px;
            margin-left: 15px;
            background-color: #dadafa;
        }
    
        .c {
            font-weight: 600;
            padding-left: 15px;
            padding-top: 4px;
        }
    
        #lnglat,
        #address,
        #nearestJunction,
        #nearestRoad,
        #nearestPOI,
        .title {
            padding-left: 15px;
        }
        #panel {
               position: absolute; 
                background-color: white;
                height: 150px;
                overflow-y: auto;
                bottom: 0px;
                width: 100%;
                border-bottom: solid 1px silver;
            }
          .poi-img,.amap-zoomcontrol,.poi-tel,.poi-more{
            display:none;
          }
        </style>
    </head>
    <body>
        <div id="container" class="map" tabindex="0"></div>
        <div id='right'>
            <div>
                <div id='address'></div>
            </div>
        </div>
      <div id="panel"></div>
    </body>
    </html>
    展开全文
  • 回顾篇:淘宝API web开发二 调用API

    万次阅读 2014-07-13 19:33:13
    调用API接口 webERP / api / taobao / common / taobaoClient.php /** * 这个文件包含taobaoClient类 */ /** * taobaoClient类 根据参数生成签名 * 将参数拼接成指定规则的URL,通过HTTP请求到淘宝开发平台 * 解析...

    上一篇已经说明了如何引导用户授权登录,获取access_token。这样,我们就可以正式调用API了。

    淘宝提供了两种调用方法,一种为http调用方法,一种为https免签调用方式。因为项目用的是第一种方法,那么在这里,我们就只介绍http的调用方法。

    淘宝API采用REST风格,我们需要按照淘宝开发平台的规范拼装一个正确的URL,通过HTTP请求到http://gw.api.taobao.com/router/rest(测试环境为http://gw.api.tbsandbox.com/router/rest),就可以获取到自己需要的数据。

    调用API时,需要传入系统参数和应用参数。

    系统参数如下:

    名称

    类型

    是否必须

    描述

    method

    string

    Y

    API接口名称
    timestamp

    string

    Y

    时间戳,格式为yyyy-mm-dd HH:mm:ss,例如:2013-05-06 13:52:03。淘宝API服务端允许客户端请求时间误差为6分钟。
    format

    string

    N

    可选,指定响应格式。默认xml,目前支持格式为xml,json
    app_key

    string

    Y

    TOP分配给应用的AppKey ,创建应用时可获得
    v

    string

    Y

    API协议版本,可选值:2.0。
    sign

    string

    Y

    对 API 输入参数进行 md5 加密获得,下面会介绍到sign
    sign_method

    string

    Y

    参数的加密方法选择,可选值是:md5,hmac
    session

    string

    N

    TOP分配给用户的SessionKey(或 Access Token),通过登陆授权获取(可参考上一篇博文) 。API 文档上 “API用户授权类型” 标识为“需要”的,调用时均要传该参数
    应用参数是根据不同的API而不同的,我们就以taobao.trades.sold.increment.get(增量订单)为例,来做说明。

    应用参数如下:

    名称

    类型

    是否必须

    描述

    fields

    Field List

    Y

    获取到数据后,需要返回的字段。
    示例值:
    tid,type,status,modified,orders.title,orders.oid
    更多值请参考http://api.taobao.com/apidoc/api.htm?spm=0.0.0.0.yd3ygq&path=cid:5-apiId:128
    start_modified

    Date

    Y

    查询修改开始时间(修改时间跨度不能大于一天)。格式:yyyy-MM-dd HH:mm:ss
    end_modified

    Date

    Y

    查询修改结束时间,必须大于修改开始时间(修改时间跨度不能大于一天),格式:yyyy-MM-dd HH:mm:ss。
    status

    string

    N

    交易状态,默认查询所有交易状态的数据,除了默认值外每次只能查询一种状态。可选值如 TRADE_NO_CREATE_PAY(没有创建支付宝交易) WAIT_BUYER_PAY(等待买家付款) 等。
    type

    string

    N

    交易类型列表,同时查询多种交易类型可用逗号分隔。默认同时查询guarantee_trade,auto_delivery,ec,code,step的5种交易类型的数据。
    ext_type

    string

    N

    可选值有ershou(二手市场的订单),service(商城服务子订单)mark(双十一大促活动异常订单)作为扩展类型筛选只能做单个ext_type查询,不能全部查询所有的ext_type类型
    tag

    string

    N

    卖家对交易的自定义分组标签,目前可选值为:time_card(点卡软件代充),fee_card(话费软件代充)
    page_no

    Number

    N

    页码。取值范围:大于零的整数;默认值:1。注:必须采用倒序的分页方式(从最后一页往回取)才能避免漏单问题。
    page_size

    Number

    N

    每页条数。取值范围:1~100,默认值:40。
    use_has_next

    Boolean

    N

    是否启用has_next的分页方式,如果指定true,则返回的结果中不包含总记录数,但是会新增一个是否存在下一页的的字段,通过此种方式获取增量交易,效率在原有的基础上有80%的提升

    在系统参数中,我们需要传入参数的签名验证sign,淘宝开发平台服务器需要对该请求参数进行验证是否合法,方法如下:

    根据参数名称(除签名和图片)将所有请求参数按照字母先后顺序排序:key + value.....key + value,再将应用的secretKey加在该字符串的前后两端。

    例如,secretKey=4,将参数为foo=1,bar=2,baz=3排序为bar=2,baz=3,foo=1,参数名和参数值连接后,拼接成字符串 4bar2baz3foo14

    然后再将拼接的字符串采用MD5或者HMAC加密,将加密结果转换为32位大写字符串。

    最后,我们就可以将所有的参数拼接好,使用CURL库将参数POST到淘宝开发平台,获取我们需要的数据了。

    具体代码如下:

    设置请求参数的应用级参数 webERP / api / taobao / common / taobaoRequest.php

    <?php 
    	/**
    	* 这个文件包含 taobaoRequest类
    	*/
    	/**
    	* taobaoRequest 设置请求参数的应用级参数
    	*/
    	class taobaoRequest{
    		/**
    		* @var array 应用级参数数组
    		*/
    		protected $apiParams = array();
    
    		/**
    		* @var string 使用的接口名称
    		*/
    		protected $apiMethod;
    
    		/**
    		* 设置使用接口的名称
    		* @param string $value 接口名称
    		*/
    		function setApiMethod( $value ){
    
    			$this->apiMethod = empty($value)? '' : $value;
    		
    		}
    
    		/**
    		* 返回使用的接口名称
    		* @return 使用的接口名称
    		*/
    		function getApiMethod(){
    
    			return $this->apiMethod;
    		}
    
    		/**
    		* 设置应用参数值,为了适用不同的接口,参数名需要自己传入
    		* @param string $key 应用参数的参数名,不同接口参数名会有所不同
    		* @param string $value 参数的值
    		*/
    		public function set( $key, $value ){
    
    			$this->apiParams[$key] = $value;
    
    		}
    
    		/**
    		* 获取指定的应用参数值
    		* @param string $key 指定的参数名
    		* @return string 对应的参数值
    		*/
    		public function get( $key ){
    
    			return isset($this->apiParams[$key])? $this->apiParams[$key] : null;
    
    		}
    
    		/**
    		* 获取按参数名称排序后的应用级参数数组
    		* @return array 应用级参数数组
    		*/
    		public function getApiParams(){
    			//将参数按字母排序
    			ksort($this->apiParams);
    
    			if( $this->apiParams ){
    
    				return $this->apiParams;
    
    			}else{
    				return [];
    			}
    		}
    
    		/**
    		* 有些接口需要传送附件,获取文件的base64编码
    		* @param string 文件路径
    		* @return 文件内容的编码
    		*/
    		public function fileHandle( $file ){
    
    			//php curl的附件传送机制中,需要在文件路径前加上@
    			if(substr($file, 0, 1) == '@'){
    
    				$file = substr($file, 1);
    				$file = base64_encode( file_get_contents($file) );
    
    			}
    
    			return $file;
    
    		}
    
    
    	}
    ?>
    调用API接口 webERP / api / taobao / common / taobaoClient.php
    <?php
    /**
    * 这个文件包含taobaoClient类
    */
    /**
    * taobaoClient类 根据参数生成签名
    * 将参数拼接成指定规则的URL,通过HTTP请求到淘宝开发平台
    * 解析返回的数据
    */
    
    	class taobaoClient{
    
    		/**
    		*@var string 应用的appkey
    		*/
    		public $appKey;
    
    
    		/**
    		*@var string 应用的secretKey
    		*/
    		public $secretKey;
    
    		/**
    		 *@var string HTTP请求的地址
    		*/
    		public $gateWayUrl = "http://gw.api.taobao.com/router/rest";
    
    		/**
    		 * @var string 请求的系统参数,默认值2.0
    		*/
    		public $apiVersion = '2.0';
    
    		/**
    		* 拼装请求参数拼,通过HTTP请求请求数据
    		* @param taobaoRequest $request taobaoRequest类对象
    		* @param string $session 访问令牌ACCESS TOKEN
    		*/
    		public function execute(taobaoRequest $request, $session = null){
    
    			$result = new stdClass();//保留类,存放返回的错误信息
    
    			//设置系统参数
    			$sysParams['method'] = $request->getApiMethod();//API接口名称
    
    			if($session != null){
    
    				$sysParams['session'] = $session;//access token
    
    			}
    
    			$sysParams['timestamp'] = date('Y-m-d H:i:s');//时间戳
    			$sysParams['format'] = 'json'; // 指定响应格式,支持的格式有json,xml
    			$sysParams['app_key'] = $this->$appKey;
    			$sysParams['v'] = $this->apiVersion;
    			$sysParams['sign_method'] = 'md5';//参数的加密方法选择,可选值是:md5,hmac
    
    			//应用级参数
    			$apiParams = array();
    			$apiParams = $request->getApiParams();
    
    			//系统参数,签名验证sign
    			$sysParams['sign'] = $this->generateSign(array_merge($sysParams, $apiParams ));
    
    			$requestUrl = $this->gateWayUrl . '?' . http_build_query($sysParams);
    
    			//获取数据
    			try{
    
    				$resp = $this->curl($requestUrl, $apiParams);
    
    			}catch(Exception $e){
    
    				$result->code = $e->getcode();
    				$result->zh_desc = "curl发送http请求失败";
    				$result->en_desc = $e->getMessge();
    
    			}
    
    			//解析返回结果
    			$respObject = json_decode($resp); // 解析json格式数据
    			$respWellFormed = false;
    
    			if( null != $respObject){
    
    				$respWellFormed = true;
    
    				foreach ( $respObject as $propKey => $propValue) {
    					$respObject = $propValue;
    				}
    
    			}
    
    			if(false ===  $respWellFormed){
    				$result->code = 1;
                	$result->zh_desc = "api返回数据错误或程序无法解析返回参数";
                	$result->en_desc = "HTTP_RESPONSE_NOT_WELL_FORMED";
                	return $result;
    			}
    
    			return $respObject;
    
    
    		}
    
    		/**
    		* 生成验证签名sign
    		* 根据参数名称(除签名和图片)将所有请求参数按照字母先后顺序排序,
    		* 再将应用的secretKey加在该字符串的前后两端,
    		* 然后再将拼接的字符串采用MD5或者HMAC加密,将加密结果转换为32位大写字符串。
    		* @param array 请求参数数组
    		* @return array 加密后的签名
    		*/
    		private function generateSign( $params ){
    
    			if( $params != null){
    
    				ksort($params);
    
    				$stringToBeSigned = $this->secretKey;
    
    				foreach ($params as $key => $value) {
    
    					$stringToBeSigned .= "$key$value";
    
    				}
    
    				$stringToBeSigned .= $this->secretKey;
    
    			}else{
    
    				$stringToBeSigned = $this->secretKey;
    
    				$stringToBeSigned .= $this->secretKey;
    
    			}
    
    			//注意:根据系统参数sign_method设置的加密的方法
    			return strtoupper( md5($stringToBeSigned) );
    
    		}
    
    		/**
    		* 使用CURL库,做HTTP请求数据
    		* @param string 请求访问的地址
    		* @param array 访问所需的应用级参数
    		* @return json 返回的数据结果
    		*/
    		public function curl($url, $postFields = null){
    
    			//使用curl库
    			$ch = curl_init();
    			curl_setopt($ch, CURLOPT_URL, $url);//需要获取的URL
    			curl_setopt($ch, CURLOPT_FAILONERROR, false);//不显示HTTP状态码
    			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//获取的信息以文件流的形式返回
    
    			//https免签调用方式
    			if( strlen($url) >5 && strtolower(substr($url, 0, 5)) == 'https'){
    
    				curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, fasle);//终止从服务器端进行验证
    				curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    
    			}
    
    			//
    			if( isset($postFields) && 0 > count($postFields) ){
    
    				curl_setopt($ch, CURLOPT_POST, ture);//以POST方式传送
    
    				$postMultipart = false;
    
    				//判断是否有附件传送
    				foreach ($postFields as $key => $value) {
    
    					if( '@' == substr($value, 0, 1)){
    						$postMultipart = true;
    						break;
    
    					}
    				}
    
    				unset($key, $value);
    
    				if( $postMultipart ){
    
    					curl_setopt($ch, CURLOPT_POSTFIELD, $postFields);
    				
    				}else{
    
    					curl_setopt($ch, CURLOPT_POSTFIELD, http_build_query($postFields));
    
    				}
    
    			}
    
    			$response = curl_exec($ch);
    
    			if( curl_errno($ch) ){
    
    				throw new Exception(curl_errno($ch), 0);
    
    			}else{
    
    				$httpStatusCode = curl_getinfo($ch, CURLOPT_HTTP_CODE);
    
    				if(200 != $httpStatusCode){
    					throw new Exception($response, $httpStatusCode);
    				}
    			
    			}
    
    			curl_close($ch);
    			return $response;
    
    		}
    
    
    
    	
    	}
     ?>

    现在来测试调用taobao.trade.sold.increment.get接口,代码如下webERP / api / taobao / tradeSoldIncrementGet.php
    <?php
    	
    	//测试调用接口 taobao.trade.sold.increment.get
    	date_default_timezone_set('PRC');//设置时区
    
    	//结束时间 默认当天
    	$end_date = date('Y-m-d 23:59:59');
    
    	//开始时间前一天
    	$start_date = date('Y-m-d 23:59:59', strtotime("$end_date -1 day"));
    
    	require_once 'common/taobaoConfig.php';
    	require_once 'common/taobaoRequest.php';
    
    	$request = new taobaoRequest();
    	//调用接口taobao.trades.sold.increment.get
    	$request->setApiMethod('taobao.trades.sold.increment.get');
    
    	//根据淘宝要求的该接口的应用参数,设置各个参数值
    	$fields = 'seller_nick, buyer_nick, title, type, created, tid,buyer_rate,can_rate,status, payment, discount_fee, adjust_fee, post_fee, total_fee, pay_time, end_time, modified, consign_time, buyer_obtain_point_fee, point_fee, real_point_fee, received_payment,num, price, cod_fee, cod_status, shipping_type, receiver_name, receiver_state, receiver_city, receiver_district, receiver_address, receiver_zip, receiver_mobile, receiver_phone,alipay_id,alipay_no,has_buyer_message,credit_card_fee,step_trade_status,step_paid_fee,mark_desc,trade_source,seller_flag,is_part_consign, orders.title, orders.price, orders.num, orders.sku_id, orders.refund_status, orders.status, orders.oid, orders.total_fee, orders.payment, orders.discount_fee, orders.adjust_fee, orders.sku_properties_name, orders.outer_sku_id, orders.refund_id,orders.end_time,orders.consign_time,orders.shipping_type,orders.logistics_company,orders.invoice_no';
    
        $request->set('fields',$fields);
    
        $request->set('start_modified',$start_date);
        $request->set('end_modified',$end_date);
    
        $page_size = 20;
        $request->set('page_size', $page_size);//每页20条记录
    
        $request->set('use_has_next', 'true');//分页获取
    
        $page_no = 1;
    
        while(true){
    
        	$request->set('page_no', $page_no);//获取第page_no页数据
    
        	$response = $taobao->execute($request,$access_token);
    
        	echo '<pre>';
        	var_dump($response);//输出返回结果,可根据自己需要做其他操作
        	//获取错误,停止获取
        	if( isset($response->code) ){
        		
        		break;
        	}
    
        	//判断是否还存在下一页,如果还存在,则继续请求数据
        	if( $response->has_next ){
        		$page_no++;
    
        	}else{
        		break;
        	}
    
        }
    
     ?>



    展开全文
  • 百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可帮助您在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,且支持HTML5特性的地图开发。 该套API免费对外...

    百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可帮助您在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,且支持HTML5特性的地图开发。

    该套API免费对外开放。自v1.5版本起,您需先申请密钥(ak)才可使用,接口无使用次数限制。

    在您使用百度地图JavaScript API之前,请先阅读百度地图API使用条款。任何非营利性应用请直接使用,商业应用请参考使用须知

    JavaScript API首家支持Https,已全面开放,无需申请可直接使用。,同时建议您认证企业信息,Web API类产品可获取更高配额。

    注意:仅JavaScript API V2.0及以上版本支持https,其他JavaScript API版本均不支持。使用https服务,请先检查您的版本以及配置注意事项

    <!doctype html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    	<script type="text/javascript" src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>
    	<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥">
    	<title>浏览器定位</title>
    </head>
    <body>
    	<div>
        	<span id="load_geolocation">点击获取位置</span>
        </div> 
    </body>
    </html>
    <script type="text/javascript">
    $(function(){
    	$("#load_geolocation").click(function(ev){
    		$(ev.currentTarget).text("正在获取位置......");
    		//创建百度地图控件
    		var geolocation = new BMap.Geolocation();
    		geolocation.getCurrentPosition(function(r){
    			if(this.getStatus() == BMAP_STATUS_SUCCESS){
    				//以指定的经度与纬度创建一个坐标点
    				var pt = new BMap.Point(r.point.lng,r.point.lat);
    				//创建一个地理位置解析器
    				var geoc = new BMap.Geocoder();
    				geoc.getLocation(pt, function(rs){//解析格式:城市,区县,街道
    					var addComp = rs.addressComponents;
    					$(ev.currentTarget).text(addComp.city + ", " + addComp.district + ", " + addComp.street);
    				});    
    			}
    			else {
    				$(ev.currentTarget).text('定位失败');
    			}        
    		},{enableHighAccuracy: true})//指示浏览器获取高精度的位置,默认false
    	});
    });
    </script>

    展开全文
  • 回顾篇:淘宝API web开发一 授权登录

    万次阅读 2014-07-10 15:47:29
    今天重新看了之前做的API开发,

      重新回顾了之前做的淘宝API模块,记录一下思路。

    (1) 在开始开发之前,先要注册成为一个开发者,创建自己的应用。

           步骤在淘宝开发平台中http://open.taobao.com/doc/detail.htm?id=66中已有详细说明,在这里不再重复介绍。

           注意,在创建应用中,需要填写一个回调URL。在填写回调地址时,如果还在测试阶段的,可以填写一个本地的地址,例如 http://localhost/webERP/api/taobao/taobaoAuth.php,在本地测试通过后,要将其应用上线时,才将回调地址更改正式域名地址。

    (2)用户授权登录。

            在我们的应用与淘宝平台对接后,需要获取用户的隐私信息,为了保证数据的安全性和隐私性,我们的应用需要引导用户完成“使用淘宝账号登录并授权”的流程(http://open.taobao.com/doc/detail.htm?spm=0.0.0.0.ckBODm&id=118)。以此来获取访问令牌access_token,access_token是应用在调用API访问和修改用户数据时必须传入的参数。

            在引导使用应用的用户登录授权时,页面会跳转到所填写的回调地址,同时返回授权码code,我们可以利用这个返回的授权CODE和注册应用时分配的AppSecret,通过Http Post方式换取访问令牌access_Token,获取访问令牌的返回值以json格式返回。

    返回结果示例如下:

     {

      "w2_expires_in": 0,
      "taobao_user_id": "263685215",
      "taobao_user_nick": "%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B752",
      "w1_expires_in": 1800,
      "re_expires_in": 0,
      "r2_expires_in": 0,
      "expires_in": 86400,
      "token_type": "Bearer",
      "refresh_token": "6200e1909ca29b04685c49d67f5ZZ3675347c0c6d5abccd263685215",
      "access_token": "6200819d9366af1383023a19907ZZf9048e4c14fd56333b263685215",
      "r1_expires_in": 1800
    }
    各个字段代表的含义如下:

    Key

    类型

    选项

    示例

    说明

    access_token

    string

    必选

    2YotnFZFEjr1zCsicMWpAA

    Access token

    token_type

    string

    必选

    Bearer

    Access token的类型目前只支持bearer

    expires_in

    number

    必选

    10(表示10秒后过期)

    Access token过期时间

    refresh_token

    string

    可选

    2YotnFZFEjr1zCsicMWpAA

    Refresh token

    re_expires_in

    number

    可选

    10(表示10秒后过期)

    Refresh token过期时间

    r1_expires_in

    number

    必选

    10(表示10秒后过期)

    r1级别API或字段的访问过期时间

    r2_expires_in

    number

    必选

    10(表示10秒后过期)

    r2级别API或字段的访问过期时间

    w1_expires_in

    number

    必选

    10(表示10秒后过期)

    w1级别API或字段的访问过期时间

    w2_expires_in

    number

    必选

    10(表示10秒后过期)

    w2级别API或字段的访问过期时间

    taobao_user_nick

    string

    必选

    淘宝测试test

    淘宝账号

    taobao_user_id

    string

    必选

    706388888

    淘宝帐号对应id

    sub_taobao_user_id

    string

    可选

    2343535

    淘宝子账号对应id

    sub_taobao_user_nick

    string

    可选

    淘宝测试test:123

    淘宝子账号


    access_token具有一定的有效期的,我们可以从中提取access_token字段,并将其保存在数据库中,在有效期内使用,而不用每次使用都进行授权。

    具体获取授权码code和访问令牌token的代码如下:

    webERP / api / taobao / common / taobaoClientHelper.php

    <?php
    /**
    * 这个文件包含 taobaoClientHelper 类
    */
    
    /**
    * taobaoClientHelper 引导使用应用的用户登录到指定的地址获取code
    * 根据code 和 AppSecret获取访问令牌access_token
    *
    */
    
    require_once 'taobaoClient.php';
    
    class taobaoClientHelper extends taobaoClient{
    
    	/**
    	* @var string 新建应用时填写的回调地址
    	*/
    	public $redirctUri;
    
    	/**
    	* @var string 获取授权码CODE的地址
    	*/
    	protected $authorizeUrl = 'https://oauth.taobao.com/authorize';	
    
    	/**
    	* @var string 获取访问令牌token的地址
    	*/
    	protected $tokenUrl = 'https://oauth.taobao.com/token';
    
    	/**
    	* 设置沙箱环境,如果是在本地测试,可以调用该方法,返回的数据是虚拟的
    	*/
    	public function sandboxEnv(){
    
    		$this->authorizeUrl = 'https://oauth.tbsandbox.com/authorize';
    
    		$this->tokenUrl = 'https://oauth.tbsandbox.com/token';
    
    		//访问API的地址
    		$this->gateWayUrl = 'http://gw.api.tbsandbox.com/router/rest';
    
    	}
    
    	/**
    	* 返回引导用户授权的http请求URL
    	* @param string $redirctUri 新建淘宝应用时填写的回调地址
    	*/
    	public function getAuthorizeUrl( $redirctUri = null ){
    
    		$redirctUri || $redirctUri = $this->redirctUri;
    		//根据淘宝要求的参数
    
    		//参数response_type 固定值为code
    		$param['response_type'] = 'code';
    
    		//参数client_id 创建应用时的Appkey
    		$param['client_id'] = $this->appKey;
    
    		//参数redirect_uri 应用的回调地址,必须与创建应用时所填回调页面url一致
    		$param['redirect_uri'] = $redirctUri;
    
    		//可选参数state ,自定义,颁发授权后会原封不动返回
    		$param['state'] = 'Nancy';
    		
    		//可选参数view,默认值为web
    		$param['view'] = 'web';
    
    		return $this->authorizeUrl . '?' . http_build_query($param);
    	}
    
    	/**
    	* 根据返回的授权码code,通过http post方式换取access token,以json的格式返回
    	* @param string $code 授权登录后返回的code码
    	* @param string $state 授权登录时原封不动返回的state
    	* @param string $redirctUri 回调地址
    	* @return 访问令牌access token 的json对象
    	*/
    	public function fetchAuthorizeToken($code, $state, $redirctUri = null){
    
    		$redirctUri || $redirctUri = $this->redirctUri;
    		//系统参数
    		$param = array(
    
    			'client_id' => $this->appKey; //创建应用时的Appkey
    			'client_secret' => $this->secretKey; //创建应用时的Appkey
    			'grant_type' => 'authorization_code'; //授权类型,默认为authorization_code
    			'code' => $code; //授权码code
    			'redirect_uri' => $redirctUri; //授权码code
    			'state' => $state; //可选参数state
    			'view' => 'web'; //可选参数,默认为web
    
    			);
    
    		//父类函数curl() 利用curl post 参数到tokenUrl,进行连接
    		$json = $this->curl($this->tokenUrl, $param);
    
    		//避免包含生涩的汉字而进行utf8的转码
    		$json = iconv('gbk', 'utf-8', $json);
    
    		//解析json格式
    		$json = json_decode($json);
    
    		//如果返回异常,会返回异常error 和 error_description
    		if( isset($json->error) && isset($json->error_description) ){
    			throw new Exception($json->error_description, intval($json->error));
    		}
    
    		return $json;
    	}
    }
    ?>
    我们编写一个小小的程序来测试如何获取token,在此之前,需要一些必要的配置信息 webERP / api / taobao / common / taobaoConfig.php

    <?php
    
    header('Content-Type:text/html;charset=UTF-8');
    
    ini_set('display_errors' , 'on'); //显示所有错误
    ini_set('display_startup_errors', 'on');
    error_reporting( E_ALL ^ E_NOTICE); //显示除去notic的所有错误信息
    
    include 'taobaoClientHelper.php';
    
    $taobao = new taobaoClientHelper();
    
    $taobao->appKey = "创建应用时的Appkey";
    $taobao->secretKey = "创建应用时的secretKey";
    
    //如果已经获取过访问令牌,并且令牌还在有效期内,可以不再需要授权
    $access_token = "访问令牌access_token";
    
    /**
    * 回调地址,在创建应用时,如果还处于测试阶段,回调地址可以写测试地址
    * 设置测试环境
    */
    if( $_SERVER['SERVER_NAME'] == 'localhost'){
    
    	$taobao->redirectUri = 'http://localhost/webERP/api/taobao/taobaoAuth.php';
    
    	$taobao->sandboxEnv();
    
    }else{
    
    	$taobao->redirectUri = 'http://正式域名/webERP/api/taobao/taobaoAuth.php';
    
    }
    
     ?>
    测试淘宝授权,该文件为回调地址文件 webERP/api/taobao/taobaoAuth.php
    <?php
    
    /**
    * 回调文件 taobaoAuth.php
    */
    include 'common/taobaoConfig.php';
    
    //用户登录授权时,会返回授权码CODE
    if(isset($_GET['code'])){
    
    	$state = isset($_GET['state'])? $_GET['state'] : '';
    
    	//获取access token
    	try{
    
    		$token = $taobao->fetchAcessToken( $_GET['code'] , $state );
    
    		if( isset($token->access_token) ){
    
    			//返回的access_token可以保存在数据库中,或者做自己需要的操作
    			echo '<pre>';
    			print_r($token);
    
    		}
    
    	}catch (Exception $e){
    
    		//异常,重新获取
    		header('Location: taobaoAuth.php');
    
    	}
    
    }else{
    
    	//引导用户到授权登录页面
    	$authUrl = $taobao->getAuthorizeUrl();
    
    	echo "<script>window.open('".$authUrl."');</script>";
    
    }
    ?>

    获得access_token后,我们就可以正式调用API了,在下一篇我们就会开始讨论淘宝API的调用。






    展开全文
  • 高德地图WEB开发(key申请、api)简约教程 1.首先我们需要去“高德地图开发平台” 通过“百度搜索 ”或者“谷歌搜索 ” 高德地图然后会有一个高德开发平台|高德地图apl     2.登录高德开发平台 这是高德开发...
  • Google Maps API Web Services文档使用

    千次阅读 2011-06-29 15:08:00
    http://code.google.com/intl/zh-CN/apis/maps/documentation/geocoding/ 有很多有用的接口这个可以通过经纬度求地址信息,不过返回的信息有点多,怎么减少呢...http://maps.google.com/maps/api/geocode/json?latlng
  • <script src="http://api.map.baidu.com/api?v=2.0&ak=Dc8o3GUube9RVOhmeuuhfNL9QRyzhuaj" type="text/javascript"></script> 浏览器定位</title> </head> <body> <div> 点击获取位置</span> </div> ...
  • WebApi和访问WebApi两个项目

    千次下载 热门讨论 2014-12-05 15:08:48
    WebApi和访问WebApi两个项目,有源码,注释非常详细,希望对大家有帮助。 HttpWebRequest类访问webApi
  • Python:使用API——使用Web API

    千次阅读 2019-08-27 11:28:55
    Web API是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互——这种请求称为API调用 请求的数据将以易于处理的格式(JSON/CSV)返回 依赖于外部数据源的大多数应用程序都依赖于API调用 1.1 Git 和 ...
  • Web API

    千次阅读 2014-12-01 22:30:04
    ASP.NET Web API 简介 ASP.NET MVC 4 包含了 ASP.NET Web API, 这是一个创建可以连接包括浏览器、移动设备等多种客户端的 Http 服务的新框架, ASP.NET Web API 也是构建 RESTful 服务的理想平台。 ASP...
  • Web APIWeb Service的区别

    千次阅读 2019-07-17 10:00:20
    首先,Web API是由Web Service演变而来,它们两者关系就是所有Web Service都是API,但并非所有API都是Web Service。其次,两者都有利于信息的传输,但Web APIWeb Service更具灵活性。最后,我们来看看它们之间的...
  • APIWeb API的概念

    千次阅读 2018-10-31 18:28:20
    APIWeb API的概念 API的概念 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或...
  • 学习WebApi时间较短,在一个项目中需要向WebApi发送数据,但是使用C#调用WebApi(Post)时总返回400错误,找了很久,总以为是调用方法有问题,后来发现其实是WebApi中,Post方法参数的问题。下面是测试代码: 实体:...
  • Web API路由

    千次阅读 2016-05-18 11:14:33
    原文地址本文讲解ASP.NET Web API... 如果你熟悉ASP.NET MVC,Web API路由与MVC路由非常相似。主要差别是Web API使用HTTP方法,而不是URI路径来选择Action。你也可以按照之前配置MVC路由的方式来配置Web API路由。本
  • Web API简介

    千次阅读 热门讨论 2018-04-15 20:19:15
    什么是Web API官方解释: ASP.NET Web API is a framework that makes it easy to build HTTP services that reach a broad range of clients, including browsers and mobile devices. ASP.NET Web API is an ...
  • Web Api 安全

    千次阅读 2017-05-24 05:25:33
    过去,我写过一两个Web Api,没有任何身份校验和安全措施,随便在浏览器中输入地址就能访问,谁都可以。无异于裸奔。有关Web Api的安全措施,我目前了解到的有以下一些:一、使用Basic Authentication验证用户 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 129,585
精华内容 51,834
关键字:

apiweb