守兔开放平台api

供合作方调用


基本参数及校验

<h2>基础参数, 所有接口必传!</h2> <table> <thead> <tr> <th style="text-align: left;">参数名</th> <th style="text-align: left;">必选</th> <th style="text-align: left;">类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">appKey</td> <td style="text-align: left;">是</td> <td style="text-align: left;">string</td> <td>分配给第三方的key 即推广位</td> </tr> <tr> <td style="text-align: left;">time</td> <td style="text-align: left;">是</td> <td style="text-align: left;">string</td> <td>时间戳 <code>秒级</code></td> </tr> <tr> <td style="text-align: left;">sign</td> <td style="text-align: left;">是</td> <td style="text-align: left;">string</td> <td>签名 <code>小写</code></td> </tr> </tbody> </table> <h3>签名规则如下</h3> <h4>1. 除[sign]以外, 所有参数按照键名排序。</h4> <p>以下为php demo</p> <pre><code> //除了[sign]的所有参数 $params = [ 'appKey' =&amp;gt; 123 'time' =&amp;gt; 456 .... ] //按键名升序排序 $param = ksort($param)</code></pre> <h4>2. 遍历数组, 将参数的key与value用[=]连接,得到字符串。 再将所有得到的字符串用[&amp;]连接,得到新字符串。</h4> <h4>以上述例子,得到的字符串为:$str = 'appKey=123&amp;time=456'</h4> <h4>3. 将生成后的字符串同样与appSecret拼接</h4> <pre><code> $appSecret = '789' $str = $str . '&amp;amp;appSecret=789' //$str = 'appKey=123&amp;amp;time=456&amp;amp;appSecret=789'</code></pre> <h4>4. 将字符串进行md5加密,得到签名[sign]</h4> <pre><code> $sign = md5($str)</code></pre> <h4>5.签名完成,最终请求参数为:</h4> <pre><code> $param = [ 'appKey' =&amp;gt; 123 'time' =&amp;gt; 456, ... 'sign' =&amp;gt; $sign ]</code></pre> <h4>6. 错误则返回错误结果,如</h4> <pre><code> { &amp;quot;success&amp;quot;: false, &amp;quot;message&amp;quot;: &amp;quot;请求过期&amp;quot;, &amp;quot;data&amp;quot;: [], &amp;quot;code&amp;quot;: 40057 }</code></pre> <h5>返回参数说明</h5> <table> <thead> <tr> <th style="text-align: left;">参数名</th> <th style="text-align: left;">类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">code</td> <td style="text-align: left;">int</td> <td>状态码</td> </tr> <tr> <td style="text-align: left;">data</td> <td style="text-align: left;">array</td> <td>调用成功接口返回的数据</td> </tr> <tr> <td style="text-align: left;">message</td> <td style="text-align: left;">string</td> <td>结果返回说明</td> </tr> <tr> <td style="text-align: left;">success</td> <td style="text-align: left;">boolean</td> <td>调用结果</td> </tr> </tbody> </table> <h5>备注</h5> <ul> <li>更多返回错误代码请看首页的错误代码描述</li> </ul> <h5>坐标系转换</h5> <pre><code> public static double pi = 3.1415926535897932384626; public static double x\_pi = 3.14159265358979324 \* 3000.0 / 180.0; public static double a = 6378245.0; public static double ee = 0.00669342162296594323; public static double transformLat(double x, double y) { double ret = -100.0 \+ 2.0 \* x + 3.0 \* y + 0.2 \* y \* y + 0.1 \* x \* y + 0.2 \* Math.sqrt(Math.abs(x)); ret += (20.0 \* Math.sin(6.0 \* x \* pi) + 20.0 \* Math.sin(2.0 \* x \* pi)) \* 2.0 / 3.0; ret += (20.0 \* Math.sin(y \* pi) + 40.0 \* Math.sin(y / 3.0 \* pi)) \* 2.0 / 3.0; ret += (160.0 \* Math.sin(y / 12.0 \* pi) + 320 \* Math.sin(y \* pi / 30.0)) \* 2.0 / 3.0; return ret; } public static double transformLon(double x, double y) { double ret = 300.0 \+ x + 2.0 \* y + 0.1 \* x \* x + 0.1 \* x \* y + 0.1 \* Math.sqrt(Math.abs(x)); ret += (20.0 \* Math.sin(6.0 \* x \* pi) + 20.0 \* Math.sin(2.0 \* x \* pi)) \* 2.0 / 3.0; ret += (20.0 \* Math.sin(x \* pi) + 40.0 \* Math.sin(x / 3.0 \* pi)) \* 2.0 / 3.0; ret += (150.0 \* Math.sin(x / 12.0 \* pi) + 300.0 \* Math.sin(x / 30.0 \* pi)) \* 2.0 / 3.0; return ret; } public static double\[\] transform(double lat, double lon) { if (outOfChina(lat, lon)) { return new double\[\]{lat,lon}; } double dLat = transformLat(lon - 105.0, lat - 35.0); double dLon = transformLon(lon - 105.0, lat - 35.0); double radLat = lat / 180.0 \* pi; double magic = Math.sin(radLat); magic = 1 \- ee \* magic \* magic; double sqrtMagic = Math.sqrt(magic); dLat = (dLat \* 180.0) / ((a \* (1 \- ee)) / (magic \* sqrtMagic) \* pi); dLon = (dLon \* 180.0) / (a / sqrtMagic \* Math.cos(radLat) \* pi); double mgLat = lat + dLat; double mgLon = lon + dLon; return new double\[\]{mgLat,mgLon}; } public static boolean outOfChina(double lat, double lon) { if (lon &amp;lt; 72.004 || lon &amp;gt; 137.8347) return true; if (lat &amp;lt; 0.8293 || lat &amp;gt; 55.8271) return true; return false; } /\*\* \* 84 to 火星坐标系 (GCJ-02) World Geodetic System ==&amp;gt; Mars Geodetic System \* \* @param lat \* @param lon \* @return \*/ public static double\[\] gps84\_To\_Gcj02(double lat, double lon) { if (outOfChina(lat, lon)) { return new double\[\]{lat,lon}; } double dLat = transformLat(lon - 105.0, lat - 35.0); double dLon = transformLon(lon - 105.0, lat - 35.0); double radLat = lat / 180.0 \* pi; double magic = Math.sin(radLat); magic = 1 \- ee \* magic \* magic; double sqrtMagic = Math.sqrt(magic); dLat = (dLat \* 180.0) / ((a \* (1 \- ee)) / (magic \* sqrtMagic) \* pi); dLon = (dLon \* 180.0) / (a / sqrtMagic \* Math.cos(radLat) \* pi); double mgLat = lat + dLat; double mgLon = lon + dLon; return new double\[\]{mgLat, mgLon}; } /\*\* \* \* 火星坐标系 (GCJ-02) to 84 \* \* @param lon \* @param lat \* @return \* \*/ public static double\[\] gcj02\_To\_Gps84(double lat, double lon) { double\[\] gps = transform(lat, lon); double lontitude = lon \* 2 \- gps\[1\]; double latitude = lat \* 2 \- gps\[0\]; return new double\[\]{latitude, lontitude}; } /\*\* \* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 GCJ-02 坐标转换成 BD-09 坐标 \* \* @param lat \* @param lon \*/ public static double\[\] gcj02\_To\_Bd09(double lat, double lon) { double x = lon, y = lat; double z = Math.sqrt(x \* x + y \* y) + 0.00002 \* Math.sin(y \* x\_pi); double theta = Math.atan2(y, x) + 0.000003 \* Math.cos(x \* x\_pi); double tempLon = z \* Math.cos(theta) + 0.0065; double tempLat = z \* Math.sin(theta) + 0.006; double\[\] gps = {tempLat,tempLon}; return gps; } /\*\* \* \* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 \* \* 将 BD-09 坐标转换成GCJ-02 坐标 \* \* @param \* bd\_lat \* @param bd\_lon \* @return \*/ public static double\[\] bd09\_To\_Gcj02(double lat, double lon) { double x = lon - 0.0065, y = lat - 0.006; double z = Math.sqrt(x \* x + y \* y) - 0.00002 \* Math.sin(y \* x\_pi); double theta = Math.atan2(y, x) - 0.000003 \* Math.cos(x \* x\_pi); double tempLon = z \* Math.cos(theta); double tempLat = z \* Math.sin(theta); double\[\] gps = {tempLat,tempLon}; return gps; } /\*\*将gps84转为bd09 \* @param lat \* @param lon \* @return \*/ public static double\[\] gps84\_To\_bd09(double lat,double lon){ double\[\] gcj02 = gps84\_To\_Gcj02(lat,lon); double\[\] bd09 = gcj02\_To\_Bd09(gcj02\[0\],gcj02\[1\]); return bd09; } public static double\[\] bd09\_To\_gps84(double lat,double lon){ double\[\] gcj02 = bd09\_To\_Gcj02(lat, lon); double\[\] gps84 = gcj02\_To\_Gps84(gcj02\[0\], gcj02\[1\]); //保留小数点后六位 gps84\[0\] = retain6(gps84\[0\]); gps84\[1\] = retain6(gps84\[1\]); return gps84; } /\*\*保留小数点后六位 \* @param num \* @return \*/ private static double retain6(double num){ String result = String .format(&amp;quot;%.6f&amp;quot;, num); return Double.valueOf(result); } </code></pre>

页面列表

ITEM_HTML