极品色天使在线婷婷天堂亚洲 ,久久国产精品亚洲综合,亚洲色欲www综合网http://www.tkk7.com/jjshcc/category/54542.html桑巴葡語翻譯工作室是廣州市最專業葡萄牙語翻譯機構-www.puyufanyi.com-歡迎尋找Java,As400,Mainframe的獵頭eric_cc#qq.ccom(把#換成@)zh-cnMon, 26 Jan 2015 03:44:31 GMTMon, 26 Jan 2015 03:44:31 GMT60 JSONP一種使用元素獲取數據的方法http://www.tkk7.com/jjshcc/archive/2015/01/23/422401.htmlEric_jiangEric_jiangFri, 23 Jan 2015 12:50:00 GMThttp://www.tkk7.com/jjshcc/archive/2015/01/23/422401.htmlhttp://www.tkk7.com/jjshcc/comments/422401.htmlhttp://www.tkk7.com/jjshcc/archive/2015/01/23/422401.html#Feedback2http://www.tkk7.com/jjshcc/comments/commentRss/422401.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/422401.html現在很多廠商比如,百度、谷歌在調用api接口時早已開始使用json數據。
但是古老的XMLHttpRequest設計時,為了安全性,不能使用跨站數據(就是調用其它的網站的數據)
如果需要訪問由遠程服務器上一個web服務托管的json數據,則要使用JSONP。
假設,我要進行百度地圖坐標轉換,這是文檔http://developer.baidu.com/map/changeposition.htm
運行示例 http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924;114.21892734521,29.575429778924&from=1&to=1
瀏覽器打開得到返回值 (注意當前返回錯誤,本文只是隨便找個例子用來講解)
{"status":22,"message":"param error:to illegal, not support such coord type","result":[]}
那么我們該如何來讓我們的頁面程序獲取這個值呢?
在示例鏈接中加入
callback=GetValue
然后新建html頁面
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script>
        var getVal;
        function GetValue(Value)
        {
            getVal = Value;
            alert("ok");
        }
        
    </script>
</head>
<body>
    <script src="http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924;114.21892734521,29.575429778924&from=1&to=1&callback=GetValue">
    </script>
</body>
</html>
!注意html頁面中新建的GetValue函數
通過<script>標簽調用示例鏈接產生GetValue值時就會彈窗
然后通過火狐firebug進入控制臺查看GetValue的參數傳遞給getVal的值
Object { status=22, message="param error:to illegal, ...support such coord type", result=[0]}


Eric_jiang 2015-01-23 20:50 發表評論
]]>
各地圖坐標系轉換(WGS84坐標系,GCJ02坐標系,BD09坐標系)http://www.tkk7.com/jjshcc/archive/2015/01/23/422399.htmlEric_jiangEric_jiangFri, 23 Jan 2015 12:12:00 GMThttp://www.tkk7.com/jjshcc/archive/2015/01/23/422399.htmlhttp://www.tkk7.com/jjshcc/comments/422399.htmlhttp://www.tkk7.com/jjshcc/archive/2015/01/23/422399.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/422399.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/422399.html
  1. package position;  
  2.   
  3. import org.junit.Test;  
  4.   
  5. /** 
  6.  * 各地圖API坐標系統比較與轉換; 
  7.  *  
  8.  * WGS84坐標系:即地球坐標系,國際上通用的坐標系。設備一般包含GPS芯片或者北斗芯片獲取的經緯度為WGS84地理坐標系,谷歌地圖采用的是WGS84地理坐標系(中國范圍除外); 
  9.  *  
  10.  * GCJ02坐標系:即火星坐標系,是由中國國家測繪局制訂的地理信息系統的坐標系統。由WGS84坐標系經加密后的坐標系。谷歌中國地圖和搜搜中國地圖采用的是GCJ02地理坐標系; 
  11.  *  
  12.  * BD09坐標系:即百度坐標系,GCJ02坐標系經加密后的坐標系; 
  13.  *  
  14.  * 搜狗坐標系、圖吧坐標系等,估計也是在GCJ02基礎上加密而成的。 
  15.  *  
  16.  * @author chenhua 
  17.  *  
  18.  */  
  19. public class PositionUtil  
  20. {  
  21.     private static double pi = 3.1415926535897932384626;  
  22.     private static double a = 6378245.0;  
  23.     private static double ee = 0.00669342162296594323;  
  24.   
  25.     @Test  
  26.     public void t1()  
  27.     {  
  28.         // 北斗芯片獲取的經緯度為WGS84地理坐標 31.426896,119.496145  
  29.   
  30.         Gps gps = new Gps(31.426896119.496145);  
  31.         System.out.println("gps :" + gps);  
  32.   
  33.         Gps gcj = gps84_To_Gcj02(gps.getWgLat(), gps.getWgLon());  
  34.         System.out.println("gcj :" + gcj);  
  35.   
  36.         Gps star = gcj_To_Gps84(gcj.getWgLat(), gcj.getWgLon());  
  37.         System.out.println("star:" + star);  
  38.   
  39.         Gps bd = gcj02_To_Bd09(gcj.getWgLat(), gcj.getWgLon());  
  40.         System.out.println("bd  :" + bd);  
  41.   
  42.         Gps gcj2 = bd09_To_Gcj02(bd.getWgLat(), bd.getWgLon());  
  43.         System.out.println("gcj :" + gcj2);  
  44.   
  45.     }  
  46.   
  47.     /** 
  48.      * 84 to 火星坐標系 (GCJ-02) 
  49.      *  
  50.      * World Geodetic System ==> Mars Geodetic System 
  51.      *  
  52.      * @param lat 
  53.      * @param lon 
  54.      * @return 
  55.      */  
  56.     public static Gps gps84_To_Gcj02(double lat, double lon)  
  57.     {  
  58.         if (outOfChina(lat, lon))  
  59.         {  
  60.             return null;  
  61.         }  
  62.         double dLat = transformLat(lon - 105.0, lat - 35.0);  
  63.         double dLon = transformLon(lon - 105.0, lat - 35.0);  
  64.         double radLat = lat / 180.0 * pi;  
  65.         double magic = Math.sin(radLat);  
  66.         magic = 1 - ee * magic * magic;  
  67.         double sqrtMagic = Math.sqrt(magic);  
  68.         dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);  
  69.         dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);  
  70.         double mgLat = lat + dLat;  
  71.         double mgLon = lon + dLon;  
  72.   
  73.         return new Gps(mgLat, mgLon);  
  74.     }  
  75.   
  76.     /** 
  77.      * 火星坐標系 (GCJ-02) to 84 
  78.      *  
  79.      * @param lon 
  80.      * @param lat 
  81.      * @return 
  82.      */  
  83.     public Gps gcj_To_Gps84(double lat, double lon)  
  84.     {  
  85.         Gps gps = transform(lat, lon);  
  86.         double lontitude = lon * 2 - gps.getWgLon();  
  87.         double latitude = lat * 2 - gps.getWgLat();  
  88.   
  89.         return new Gps(latitude, lontitude);  
  90.   
  91.     }  
  92.   
  93.     /** 
  94.      * 火星坐標系 (GCJ-02) 與百度坐標系 (BD-09) 的轉換算法 
  95.      *  
  96.      * 將 GCJ-02 坐標轉換成 BD-09 坐標 
  97.      *  
  98.      * @param gg_lat 
  99.      * @param gg_lon 
  100.      */  
  101.     public static Gps gcj02_To_Bd09(double gg_lat, double gg_lon)  
  102.     {  
  103.         double x = gg_lon, y = gg_lat;  
  104.   
  105.         double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi);  
  106.   
  107.         double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi);  
  108.   
  109.         double bd_lon = z * Math.cos(theta) + 0.0065;  
  110.   
  111.         double bd_lat = z * Math.sin(theta) + 0.006;  
  112.   
  113.         return new Gps(bd_lat, bd_lon);  
  114.     }  
  115.   
  116.     /** 
  117.      * 火星坐標系 (GCJ-02) 與百度坐標系 (BD-09) 的轉換算法 
  118.      *  
  119.      * 將 BD-09 坐標轉換成GCJ-02 坐標 
  120.      *  
  121.      * @param bd_lat 
  122.      * @param bd_lon 
  123.      * @return 
  124.      */  
  125.     public static Gps bd09_To_Gcj02(double bd_lat, double bd_lon)  
  126.     {  
  127.         double x = bd_lon - 0.0065, y = bd_lat - 0.006;  
  128.   
  129.         double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi);  
  130.   
  131.         double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi);  
  132.   
  133.         double gg_lon = z * Math.cos(theta);  
  134.   
  135.         double gg_lat = z * Math.sin(theta);  
  136.   
  137.         return new Gps(gg_lat, gg_lon);  
  138.     }  
  139.   
  140.     private static boolean outOfChina(double lat, double lon)  
  141.     {  
  142.         if (lon < 72.004 || lon > 137.8347)  
  143.             return true;  
  144.         if (lat < 0.8293 || lat > 55.8271)  
  145.             return true;  
  146.         return false;  
  147.     }  
  148.   
  149.     private Gps transform(double lat, double lon)  
  150.     {  
  151.         if (outOfChina(lat, lon))  
  152.         {  
  153.             return new Gps(lat, lon);  
  154.         }  
  155.         double dLat = transformLat(lon - 105.0, lat - 35.0);  
  156.         double dLon = transformLon(lon - 105.0, lat - 35.0);  
  157.         double radLat = lat / 180.0 * pi;  
  158.         double magic = Math.sin(radLat);  
  159.         magic = 1 - ee * magic * magic;  
  160.         double sqrtMagic = Math.sqrt(magic);  
  161.         dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);  
  162.         dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);  
  163.         double mgLat = lat + dLat;  
  164.         double mgLon = lon + dLon;  
  165.   
  166.         return new Gps(mgLat, mgLon);  
  167.     }  
  168.   
  169.     private static double transformLat(double x, double y)  
  170.     {  
  171.         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));  
  172.         ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;  
  173.         ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;  
  174.         ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;  
  175.         return ret;  
  176.     }  
  177.   
  178.     private static double transformLon(double x, double y)  
  179.     {  
  180.         double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));  
  181.         ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;  
  182.         ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;  
  183.         ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;  
  184.         return ret;  
  185.     }  
  186.   
  187. }  
  1. package position;  
  2.   
  3. public class Gps  
  4. {  
  5.   
  6.     private double wgLat;  
  7.     private double wgLon;  
  8.   
  9.     public Gps(double wgLat, double wgLon)  
  10.     {  
  11.         setWgLat(wgLat);  
  12.         setWgLon(wgLon);  
  13.     }  
  14.   
  15.     public double getWgLat()  
  16.     {  
  17.         return wgLat;  
  18.     }  
  19.   
  20.     public void setWgLat(double wgLat)  
  21.     {  
  22.         this.wgLat = wgLat;  
  23.     }  
  24.   
  25.     public double getWgLon()  
  26.     {  
  27.         return wgLon;  
  28.     }  
  29.   
  30.     public void setWgLon(double wgLon)  
  31.     {  
  32.         this.wgLon = wgLon;  
  33.     }  
  34.   
  35.     @Override  
  36.     public String toString()  
  37.     {  
  38.         return wgLat + "," + wgLon;  
  39.     }  
  40.   
  41. }  


Eric_jiang 2015-01-23 20:12 發表評論
]]>
百度地圖經緯度轉換JS版http://www.tkk7.com/jjshcc/archive/2015/01/23/422396.htmlEric_jiangEric_jiangFri, 23 Jan 2015 10:56:00 GMThttp://www.tkk7.com/jjshcc/archive/2015/01/23/422396.htmlhttp://www.tkk7.com/jjshcc/comments/422396.htmlhttp://www.tkk7.com/jjshcc/archive/2015/01/23/422396.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/422396.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/422396.html閱讀全文

Eric_jiang 2015-01-23 18:56 發表評論
]]>
微信開發接口以及資源收集整理http://www.tkk7.com/jjshcc/archive/2014/10/08/418522.htmlEric_jiangEric_jiangWed, 08 Oct 2014 09:55:00 GMThttp://www.tkk7.com/jjshcc/archive/2014/10/08/418522.htmlhttp://www.tkk7.com/jjshcc/comments/418522.htmlhttp://www.tkk7.com/jjshcc/archive/2014/10/08/418522.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/418522.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/418522.html1、百度地圖API

車聯網API網址:http://developer.baidu.com/map/carhome.htm
登錄http://lbsyun.baidu.com/apiconsole/key?application=key獲得密鑰
通過坐標取用戶位置(反Geocoding)http://api.map.baidu.com/telematics/v2/reverseGeocoding?location=116.305145,39.982368&ak=yourkey
測距http://api.map.baidu.com/telematics/v2/distance?waypoints=118.77147503233,32.054128923368;116.3521416286,39.965780080447&ak=yourkey
獲取經緯度http://www.gpsspg.com/maps.htm
天氣查詢http://api.map.baidu.com/telematics/v2/weather?location=北京&ak=yourkey

http://api.map.baidu.com/telematics/v2/weather?location=經度,緯度&ak=yourkey

查詢周邊商家http://api.map.baidu.com/telematics/v2/local?location=經度,緯度&keyword=類型&ak=yourkey&radius=半徑&number=10
導航地圖http://developer.baidu.com/map/uri.htm
http://api.map.baidu.com/direction?origin=latlan:34.264642646862,108.95108518068|name:我家&destination=大雁塔&mode=driving&region=西安&output=html&src=yourCompanyName|yourAppName  (mode可以為driving架車、transit公交、walking步行)

2、Google地圖API

https://developers.google.com/maps/?hl=zh-cn

申請密碼https://code.google.com/apis/console
經緯度解析http://maps.googleapis.com/maps/api/geocode/xml?latlng=23.416155105336312,116.6294002532959&sensor=false&language=zh-CN
測距/測時https://developers.google.com/maps/documentation/distancematrix/

http://maps.googleapis.com/maps/api/distancematrix/xml?origins=經度,緯度&destinations=經度,緯度&mode=walking&language=zh-CN&sensor=false

(origine起點、destinations終點、sensor感應器是否啟動gps、mode包含driving/walking/bicyilng、language語言、avoid避開highways高速tolls收費)
查詢周邊商家https://developers.google.com/places/

https://developers.google.com/places/documentation/search?hl=zh-CN

https://maps.googleapis.com/maps/api/place/search/xml?location=經度,緯度&radius=3000&sensor=false&key=yourkey&keyword=餐館&language=zh-CN

3、高德地圖API

http://code.autonavi.com/index

瀏覽器調用http://code.autonavi.com/URI/browser_guide
接口格式http://mo.amap.com/?from=經度,緯度&to=經度,緯度&type=0&opt=1&dev=1

4、小黃雞(試用每天只能調100次,30美元/10萬次調用)

http://developer.simsimi.com/api?lang=zh_CN

試用地址http://sandbox.api.simsimi.com/request.p (參數key密鑰、text用戶的問題、lc語言中文ch)

5、百度翻譯

http://developer.baidu.com/ms/translate

接口http://openapi.baidu.com/public/2.0/bmt/translate  (參數from源碼語言ch中文、en英文、jp日語、auto自動)

http://openapi.baidu.com/public/2.0/bmt/translate?client_id=yourApiKey&q=關鍵詞&from=auto&to=auto

6、快遞查詢
申請KEY  http://www.aikuaidi.cn/api/?type=1

http://www.aikuaidi.cn/rest/?key=參數&order=快遞單號&id=快遞拼音&ord=排序方式&show=

(圓通yuantong/申通shentong/EMSems/韻達yunda/順豐shunfeng,ord排序asc/desc,show可以為JSON/XML/HTML)

7、每日笑話(不限次數,不用申請KEY)

http://api.94qing.com/?type=joke&msg=

8、RSS訂閱

http://www.baidu.com/search/rss.html

9、刮刮樂(只是源碼地址,需要封裝管理程序)

http://kuro.tw/scratch.html

10、第三方接口
樂享微信http://www.wxapi.cn/  (收費,不開源)
365微服務http://www.weduty.com  (收費,不開源)
賓果科技https://github.com/takura/WeChat4DiscuzX-Binguo  (discuz論壇插件、名費、開源)
小I機器人http://www.xiaoi.com  (智能聊天,收費,不開源)
V5智能客服http://www.v5kf.com  (基礎免費、增值收費、不開源)
小九機器人http://www.xiaojo.com  (免費、開源)
微擎http://www.we7.cc/  (免費、開源)

11、百度BAE以及新浪SAE
百度BAE  http://developer.baidu.com/  (免費創建10個應用,每天200M免費流量,數據庫每月1G免費流量,緩存為memcache不免費1.6元/GB/天)
計費  http://developer.baidu.com/dev#/price/charge
新浪SAE  http://sae.sina.com.cn/ (免費創建10個應用)
計費  http://sae.sina.com.cn/?m=devcenter&catId=155

12、WAP在線生成

http://siteapp.baidu.com/

13、百度應用中心

http://r2.mo.baidu.com/webapp_html.php?version=4_0&fn=webpage_flash



Eric_jiang 2014-10-08 17:55 發表評論
]]>
微信開放平臺和公眾平臺的區別?http://www.tkk7.com/jjshcc/archive/2014/10/06/418474.htmlEric_jiangEric_jiangMon, 06 Oct 2014 01:49:00 GMThttp://www.tkk7.com/jjshcc/archive/2014/10/06/418474.htmlhttp://www.tkk7.com/jjshcc/comments/418474.htmlhttp://www.tkk7.com/jjshcc/archive/2014/10/06/418474.html#Feedback4http://www.tkk7.com/jjshcc/comments/commentRss/418474.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/418474.html微信開放平臺
  主要面向App開發者 通常前提是擁有成熟的應用程序 之后通過開放平臺 將內容分享至朋友圈 發送給某個微信好友.

  微信公眾平臺

  強調信息流 既可以向微博一樣主要推送內容 也可以像10086一樣 根據用戶發來的消息進行智能回復 后臺可以實現某些功能.

  詳解:

  微信開放平臺也即open平臺,公眾平臺即是mp平臺,目前open 平臺是騰訊移動生活電商團隊——微生活在使用,以下是區別。

  詳解微生活商家后臺與公眾平臺的區別

  微信是騰訊近兩年崛起的一個新穎的語音溝通工具,隨著微信5.0內測版本的發布,掃描二維碼、條形碼、甚至街景的功能;搖一搖增加了視頻功能;公眾賬號分為企業賬號和訂閱賬號等最新變化的出現,使得微信“橫掃一切”“O2O神器”等標簽更加流行。而從去年開始流行的“微信掃描二維碼 免費獲得會員卡”的微生活團隊正是騰訊移動生活電商旗下的全新專注生活電子商務與O2O的解決方案提供商,大街小巷鋪滿商家二維碼掀起了全國范圍內的微信掃描風潮。據了解微生活有專門的商家后臺幫助商家解決CRM會員關系管理、精準營銷等問題,與微信的公眾平臺后臺有所區別,一下即是筆者總結的二者的一些區別和聯系。

  1、 整體概覽

  5.0之前的微信公眾平臺媒體屬性貌似更強一些,打開微信公眾平臺第一眼看見的就是實時消息。這里可以看到賬號當前增加了多少粉絲、有多少用戶留言。其次的重點就是開放接口,微信作為一個大的平臺需要給各位開發者以更多的方便,綠色的公眾平臺API文檔方便開發者直接點擊進入,高級功能中的開發模式更為開發者提供了廣闊的空間。

  然而微生活商家后臺則沒有實時消息這個功能,因為用戶的留言都已經被商家的多客服系統處理完畢,這與微生活的泛會員管理與營銷平臺的定位有很大的關系,時時解決會員的問題,幫助用戶完成訂單、訂位、訂房等工作,甚至是陪用戶閑聊和調戲,實現用戶在移動端的良好體驗。總之,微生活商家后臺更適合商家去做CRM 管理和會員營銷。

  從二者的首頁中筆者讀出一個趨勢——大數據管理,對于商家和媒體來說,數據管理必不可少,而從兩個平臺首頁明顯的數據折線圖來看,二者都focus 在大數據上。

  微信開拓了一種語音溝通的新時尚,而騰訊微生活開拓了創新的富媒體會員營銷平臺,解決企業數據庫管理、會員關系管理、會員精準營銷等問題,為傳統商企打開了進軍移動互聯網的大門。

  2、 首頁

  微信公眾平臺功能模塊包括:首頁、實時消息、用戶管理、群發消息、素材管理、設置、高級功能。

  打開微信公眾平臺即可看到實時消息、每日新增訂閱人數和每日接收消息數的曲線圖表,可以使得用戶時時把控每日情況,但是無法看到多日的消息對比。首頁右側是系統公告 ,公眾平臺接口更新等通知。微信未來要做的是個平臺,開放平臺,首頁的公告是為微信的開發者進行更多的指引。

  微生活商家后臺功能模塊包括:首頁、會員、交易、消息、活動、設置 。

  打開微生活商家后臺首先看到的是會員趨勢圖,包括新增總量、線下掃碼增量、線上傳播新增量等分類,這比微信公眾平臺的的會員增長圖坐標要復雜一些。因為微生活會員卡是用戶通過打開微信掃描二維碼后,獲得的一張存在于微信中的虛擬會員卡,而二維碼可以存在在海報、桌貼、宣傳冊等線下物料上,也可以放置在微博、微信、論壇、網站等線上渠道。微生活首頁右側呈現的是今日和昨日的新增會員和交易次數、會員帶動交易額。這與微生活致力于成為傳統商企精準的泛會員管理與營銷平臺有著很大的關系,商家人員登錄商家后臺可以清楚明了的看到自家店面的整體銷售情況和會員增長情況,時時把控商機和運營情況。



Eric_jiang 2014-10-06 09:49 發表評論
]]>
微信公眾平臺接入Java實例,結合BAEhttp://www.tkk7.com/jjshcc/archive/2014/09/30/418426.htmlEric_jiangEric_jiangTue, 30 Sep 2014 03:52:00 GMThttp://www.tkk7.com/jjshcc/archive/2014/09/30/418426.htmlhttp://www.tkk7.com/jjshcc/comments/418426.htmlhttp://www.tkk7.com/jjshcc/archive/2014/09/30/418426.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/418426.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/418426.html關于注冊公眾賬號這塊不詳細介紹

注冊完成,審核認證完,就可以開始玩了

1.如何成為開發者?

\

需要填寫接口配置信息,需要自己的服務器資源,一般自己沒有服務器,所以可以采用云服務器,例如BAE,SAE,阿里云服務器。這里用BAE

2.打開百度開放云平臺官網,注冊,登陸,點擊開發者服務管理

\

\加載中...

2.1.點擊“創建工程”

\

填寫工程相關信息,應用名稱自定義,類型選擇java-tomcat,域名唯一,代碼管理工具選擇svn 到這里,bae應用創建完了.

3.現在來實現TOKEN驗證的代碼部分

3.1.創建一個Java web工程,我用的是MyEclipse8.5,工程名稱為voastudy,點擊Finish完成。

\

3.2.新建一個servlet,這里是CoreServlet,點擊Next.

\

 

3.3.勾選創建web.xml,以及配置servlet,這里的路徑很關鍵,這是去請求servlet里的方法

\

 

3.4.實現驗證TOKEN方法,微信公眾平臺提供的是PHP的實例代碼.但其驗證本質是一樣的,都是要經過排序,sha1加密進行比較。請參考下面的代碼。這是CoreServlet.java類.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package wx.sunl.servlet;
  
import java.io.IOException;
import java.io.PrintWriter;
  
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
import wx.sunl.util.SignUtil;
  
@SuppressWarnings("serial")
public class CoreServlet extends HttpServlet 
{
    public CoreServlet() {
        super();
    }
    public void destroy() {
        super.destroy(); 
    }
  
    /**
     * 驗證url和token
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  
        // 微信加密簽名
        String signature = request.getParameter("signature");
        // 時間戮
        String timestamp = request.getParameter("timestamp");
        // 隨機數
        String nonce = request.getParameter("nonce");
        // 隨機字符串
        String echostr = request.getParameter("echostr"); 
          
        PrintWriter out = response.getWriter();
        // 通過檢驗 signature 對請求進行校驗,若校驗成功則原樣返回 echostr,表示接入成功,否則接入失敗
       if(SignUtil.checkSignature(signature, timestamp, nonce)){
           out.print(echostr);
       }
  
       out.close();
       out = null
    }
  
    /**
     *用戶向公眾平臺發信息并自動返回信息
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  
          
    }
  
    public void init() throws ServletException {
    }
  
}
其中調用到了SignUtil類的checkSignature方法,下面是SignUtil.java類.注意:其中一個靜態屬性token的值,在最后一步需要用到來驗證的.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package wx.sunl.util;
  
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
  
public class SignUtil {
    /**
     * 與接口配置信息中的 token 要一致,這里賦予什么值,在接口配置信息中的Token就要填寫什么值,
     * 兩邊保持一致即可,建議用項目名稱、公司名稱縮寫等,我在這里用的是項目名稱weixinface
     */
    private static String token = "weixintest";
      
    /**
     * 驗證簽名
     * @param signature
     * @param timestamp
     * @param nonce
     * @return
     */
    public static boolean checkSignature(String signature, String timestamp, String nonce){
        String[] arr = new String[]{token, timestamp, nonce};
        // 將 token, timestamp, nonce 三個參數進行字典排序
        Arrays.sort(arr);
        StringBuilder content = new StringBuilder();
        for(int i = 0; i < arr.length; i++){
            content.append(arr[i]);
        }
        MessageDigest md = null;
        String tmpStr = null;
          
        try {
            md = MessageDigest.getInstance("SHA-1");
            // 將三個參數字符串拼接成一個字符串進行 shal 加密
            byte[] digest = md.digest(content.toString().getBytes());
            tmpStr = byteToStr(digest);
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        content = null;
        // 將sha1加密后的字符串可與signature對比,標識該請求來源于微信
        return tmpStr != null ? tmpStr.equals(signature.toUpperCase()): false;
    }
      
    /**
     * 將字節數組轉換為十六進制字符串
     * @param digest
     * @return
     */
    private static String byteToStr(byte[] digest) {
        // TODO Auto-generated method stub
        String strDigest = "";
        for(int i = 0; i < digest.length; i++){
            strDigest += byteToHexStr(digest[i]);
        }
        return strDigest;
    }
      
    /**
     * 將字節轉換為十六進制字符串
     * @param b
     * @return
     */
    private static String byteToHexStr(byte b) {
        // TODO Auto-generated method stub
        char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        char[] tempArr = new char[2];
        tempArr[0] = Digit[(b >>> 4) & 0X0F];
        tempArr[1] = Digit[b & 0X0F];
          
        String s = new String(tempArr);
        return s;
    }
}

4.代碼已經寫完了,現在來提交代碼到svn.如果沒有svn客戶端工具,那首先下載(svn版本工具)安裝。打開svn

\

4.1.這里的url去百度開放云平臺去這里復制

\

4.2.粘貼url,打開svn,會看到服務器的2個文件

\

 

4.3.代碼提交到svn 首先刪掉root.war

\

4.4.java web工程打包成war包,取名ROOT.war,然后提交到svn

\

 

4.5.然后將這個war包提交到svn

\


4.6.如果提交成功了,百度開放云平臺會檢測到有新版本產生,選中應用,點擊“發布設置”

\


4.7.發布新版本

\


5.發布成功后,測試是否部署成功?


5.1.如果看到這個,離成功只差一步啦。<喎?"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20140510/2014051009050433.jpg" alt="\">


5.5.在域名后邊加上請求我們剛剛servlet的請求路徑,上邊的例子是/CoreServlet,如果報505錯誤(why?因為那幾個參數都是空的),說明部署成功了

\


6.最后一步,填寫Url 和 Token來驗證 成為開發者。Url:百度應用的域名+請求servlet的路徑例如:http://weixintest11.duapp.com/CoreServlet.Token是在程序中自定義的值(在SignUtil.java中定義)



歡迎吐槽!!!



Eric_jiang 2014-09-30 11:52 發表評論
]]>
主站蜘蛛池模板: 天天影视色香欲综合免费| 免费看美女被靠到爽的视频| 亚洲小说图片视频| 国产乱子伦精品免费女| 中文字幕不卡免费高清视频| 亚洲欧洲日产专区| 国产成人无码a区在线观看视频免费| 二区久久国产乱子伦免费精品| 亚洲成人动漫在线| 日韩免费毛片视频| 久久免费的精品国产V∧| 亚洲成a人无码亚洲成www牛牛| 色久悠悠婷婷综合在线亚洲| 91成人免费观看网站| 国产无限免费观看黄网站| 亚洲一区二区三区国产精品无码| 亚洲日韩人妻第一页| 久久久久国产精品免费免费搜索| 中文永久免费观看网站| 亚洲七久久之综合七久久| 久久亚洲免费视频| 国产成人99久久亚洲综合精品| 免费精品国产自产拍在线观看图片| 久久一区二区免费播放| 亚洲成av人无码亚洲成av人| 亚洲欧洲日韩国产综合在线二区| 亚洲av高清在线观看一区二区| 野花高清在线电影观看免费视频 | 日韩一级视频免费观看| 99久久99久久精品免费观看| 国产黄色片免费看| 国产亚洲一卡2卡3卡4卡新区| 亚洲另类自拍丝袜第1页| 亚洲精品乱码久久久久久蜜桃不卡| 全免费一级毛片在线播放| 亚洲视频免费在线播放| 日韩免费高清播放器| 国产高潮流白浆喷水免费A片 | 亚洲AV无码之国产精品| 亚洲欧洲日韩极速播放| 亚洲精品无码久久久久久久 |