国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
1、商品管理介面的定義
2、商品管理介面的實作
3、商品管理接口的測試
首頁 微信小程式 微信開發(fā) C#開發(fā)微信入口網(wǎng)站及應用-微信小店商品管理介面的封裝與測試

C#開發(fā)微信入口網(wǎng)站及應用-微信小店商品管理介面的封裝與測試

Feb 18, 2017 am 09:53 AM

在上篇《C#開發(fā)微信門戶及應用(22)-微信小店的開發(fā)與使用》裡面介紹了一些微信小店的基礎(chǔ)知識,以及對應的對像模型,本篇繼續(xù)微信小店的主題,介紹其中API介面的封裝與測試使用。微信小店的相關(guān)物件模型,基本上包括了常規(guī)的商品、商品分組、貨架、庫存、訂單這些模型,還有商品分類,商品分類屬性、商品分類SKU、快遞郵寄模板、圖片管理等功能。本文介紹的介面封裝也就是基於這些內(nèi)容進行的,並針對介面的實作進行測試和使用。

1、商品管理介面的定義

前面文章介紹了微信小店的物件模型,如下所示。

C#開發(fā)微信門戶及應用-微信小店商品管理接口的封裝和測試

這個圖形基本上覆蓋了微信小店的相關(guān)對象,並介紹了它們之間的關(guān)係了。

我們從基礎(chǔ)的商品資訊管理入手,我們知道,商品介麵包含了增加、修改、查詢、刪除等接口,如下所示。

C#開發(fā)微信門戶及應用-微信小店商品管理接口的封裝和測試

商品資訊是所有微店的基礎(chǔ),因此對它的管理操作,我們需要更加清晰和完善。

綜上所述的功能,我們可以定義好微信商品的介面如下所示。

????????#region?商品信息????????///?<summary>
????????///?創(chuàng)建商品????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="merchantJson">商品對象</param>
????????///?<returns></returns>
????????AddMerchantResult?AddMerchant(string?accessToken,?MerchantJson?merchantJson);????????///?<summary>
????????///?刪除商品????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="productId">商品ID</param>
????????///?<returns></returns>
????????CommonResult?DeleteMerchant(string?accessToken,?string?productId);????????///?<summary>
????????///?修改商品????????///?product_id表示要更新的商品的ID,其他字段說明請參考增加商品接口。????????///?從未上架的商品所有信息均可修改,否則商品的名稱(name)、商品分類(category)、商品屬性(property)這三個字段不可修改。????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="merchantJson">修改商品的信息</param>
????????///?<returns></returns>
????????CommonResult?UpdateMerchant(string?accessToken,?MerchantJson?merchantJson);????????///?<summary>
????????///?根據(jù)ID查詢商品信息,如果成功返回MerchantJson信息,否則返回null????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="productId">商品的Id</param>
????????///?<returns></returns>
????????MerchantJson?GetMerchant(string?accessToken,?string?productId);????????///?<summary>
????????///?獲取指定狀態(tài)的所有商品????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="status">商品狀態(tài)(0-全部,?1-上架,?2-下架)</param>
????????///?<returns></returns>
????????List<MerchantJson>?GetMerchantByStatus(string?accessToken,?int?status);????????///?<summary>
????????///?商品上下架????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="status">商品上下架標識(0-下架,?1-上架)</param>
????????///?<returns></returns>
????????CommonResult?UpdateMerchantStatus(string?accessToken,?string?productId,?int?status);?

????????#endregion

當然,微信的商品還包含了分類、分類屬性、分類SKU的基礎(chǔ)管理,因此商品管理也需要增加這個內(nèi)容

C#開發(fā)微信門戶及應用-微信小店商品管理接口的封裝和測試

它們的功能介面定義如下所示。透過下面的接口,我們就很容易實現(xiàn)商品分類(不是商品分組)、SKU資訊、和分類屬性等資訊的取得操作了。

????????#region?商品分類及屬性????????///?<summary>
????????///?獲取指定分類的所有子分類????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="cateId">大分類ID(根節(jié)點分類id為1)</param>
????????///?<returns></returns>
????????List<SubCategory>?GetSub(string?accessToken,?int?cate_id);????????///?<summary>
????????///?獲取指定子分類的所有SKU????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="cateId">商品子分類ID</param>
????????///?<returns></returns>
????????List<SubCategorySku>?GetSku(string?accessToken,?int?cate_id);????????///?<summary>
????????///?獲取指定分類的所有屬性????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="cateId">分類ID</param>
????????///?<returns></returns>
????????List<SubCategoryProperty>?GetProperty(string?accessToken,?int?cate_id);?

????????#endregion

?

2、商品管理介面的實作

上面的介面定義了對應商品的介面。

對於接口的實現(xiàn),我們一般都是根據(jù)官方網(wǎng)站的接口說明,提交到那個URL,並且是POST那些數(shù)據(jù),然後整理成一個常規(guī)的處理方式,獲得結(jié)果並轉(zhuǎn)換為對應的對象即可,如新增商品操作的實作代碼如下所示。

????????///?<summary>
????????///?創(chuàng)建商品????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="merchantJson">商品對象</param>
????????///?<returns></returns>
????????public?AddMerchantResult?AddMerchant(string?accessToken,?MerchantJson?merchantJson)
????????{????????????var?url?=?string.Format("http://www.miracleart.cn/{0}",?accessToken);????????????string?postData?=?merchantJson.ToJson();????????????return?JsonHelper<AddMerchantResult>.ConvertJson(url,?postData);
????????}

而傳回結(jié)果,這是定義一個物件來獲得新增商品的ID等內(nèi)容,如下所示。

????///?<summary>
????///?創(chuàng)建商品信息的返回結(jié)果????///?</summary>
????public?class?AddMerchantResult?:?ErrorJsonResult
????{????????///?<summary>
????????///?商品ID????????///?</summary>
????????public?string?product_id?{?get;?set;?}
????}

而基類這是常規(guī)的響應內(nèi)容

????///?<summary>
????///?微信返回Json結(jié)果的錯誤數(shù)據(jù)????///?</summary>
????public?class?ErrorJsonResult?
????{????????///?<summary>
????????///?返回代碼????????///?</summary>
????????public?ReturnCode?errcode?{?get;?set;?}????????///?<summary>
????????///?錯誤消息????????///?</summary>
????????public?string?errmsg?{?get;?set;?}
????}

通過這些對象的定義,添加商品後,我們就知道操作是否成功,如果添加的ID給我們使用,我們可以進行查詢具體的商品資訊或是進行修改、刪除等操作的。

而對商品資訊的修改或刪除的操作,都是傳回一個是否成功的記錄就可以了,因此我們定義了一個統(tǒng)一的回應對象CommonResult。商品修改、刪除的介面實作程式碼如下所示。

由於程式碼我都進行高度的完善和整??理,對於各種處理的程式碼都相對比較容易理解的了。

????????///?<summary>
????????///?刪除商品????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="productId">商品ID</param>
????????///?<returns></returns>
????????public?CommonResult?DeleteMerchant(string?accessToken,?string?productId)
????????{????????????var?url?=?string.Format("http://www.miracleart.cn/{0}",?accessToken);????????????var?data?=?new
????????????{
????????????????product_id?=?productId
????????????};????????????string?postData?=?data.ToJson();????????????return?Helper.GetExecuteResult(url,?postData);
????????}????????///?<summary>
????????///?修改商品????????///?product_id表示要更新的商品的ID,其他字段說明請參考增加商品接口。????????///?從未上架的商品所有信息均可修改,否則商品的名稱(name)、商品分類(category)、商品屬性(property)這三個字段不可修改。????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="merchantJson">修改商品的信息</param>
????????///?<returns></returns>
????????public?CommonResult?UpdateMerchant(string?accessToken,?MerchantJson?merchantJson)
????????{????????????var?url?=?string.Format("http://www.miracleart.cn/{0}",?accessToken);????????????string?postData?=?merchantJson.ToJson();????????????return?Helper.GetExecuteResult(url,?postData);
????????}

為了獲取商品的詳細信息,我們需要定義一個商品的實體對象,以便我們把獲取到的信息轉(zhuǎn)換為實體類信息,方便使用和處理。

商品的訊息,包含了不少細小定義的類,他們構(gòu)成了商品的各個部分的內(nèi)容,主體的實體類資訊如下所示。

C#開發(fā)微信門戶及應用-微信小店商品管理接口的封裝和測試

定義好相對比較複雜的商品資訊實體後,我們就可以透過物件處理了。

取得商品詳細資訊的實作代碼如下所示。

????????///?<summary>
????????///?根據(jù)ID查詢商品信息,如果成功返回MerchantJson信息,否則返回null????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="productId">商品的Id</param>
????????///?<returns></returns>
????????public?MerchantJson?GetMerchant(string?accessToken,?string?productId)
????????{????????????var?url?=?string.Format("http://www.miracleart.cn/{0}",?accessToken);????????????var?data?=?new
????????????{
????????????????product_id?=?productId
????????????};????????????string?postData?=?data.ToJson();

????????????MerchantJson?merchant?=?null;
????????????GetMerchantResult?result?=?JsonHelper<GetMerchantResult>.ConvertJson(url,?postData);????????????if?(result?!=?null)
????????????{
????????????????merchant?=?result.product_info;
????????????}????????????return?merchant;
????????}

雖然商品的實體資訊很複雜,但是一旦我們定義好,我們就很容易對結(jié)果進行轉(zhuǎn)換並處理了,上面的程式碼並不是很難理解,主要就是提交數(shù)據(jù)後,對數(shù)據(jù)進行轉(zhuǎn)換而已。

當然,我們也可以取得不同狀態(tài)的商品清單內(nèi)容,如下程式碼所示。

????????///?<summary>
????????///?獲取指定狀態(tài)的所有商品????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="status">商品狀態(tài)(0-全部,?1-上架,?2-下架)</param>
????????///?<returns></returns>
????????public?List<MerchantJson>?GetMerchantByStatus(string?accessToken,?int?status)
????????{????????????var?url?=?string.Format("http://www.miracleart.cn/{0}",?accessToken);????????????var?data?=?new
????????????{
????????????????status?=?status
????????????};????????????string?postData?=?data.ToJson();

????????????List<MerchantJson>?list?=?new?List<MerchantJson>();
????????????GetMerchantByStatus?result?=?JsonHelper<GetMerchantByStatus>.ConvertJson(url,?postData);????????????if?(result?!=?null)
????????????{
????????????????list?=?result.products_info;
????????????}????????????return?list;
????????}

我們添加商品的時候,商品的分類信息、分類屬性、分類SKU信息也都是很重要的內(nèi)容,我們需要指定對應商品分類才能添加到微信小店里面。

獲取商品分類的操作實現(xiàn)代碼如下所示。

????????///?<summary>
????????///?獲取指定分類的所有子分類????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</param>
????????///?<param name="cateId">大分類ID(根節(jié)點分類id為1)</param>
????????///?<returns></returns>
????????public?List<SubCategory>?GetSub(string?accessToken,?int?cate_id)
????????{????????????var?url?=?string.Format("http://www.miracleart.cn/{0}",?accessToken);????????????var?data?=?new
????????????{
????????????????cate_id?=?cate_id
????????????};????????????string?postData?=?data.ToJson();

????????????List<SubCategory>?list?=?new?List<SubCategory>();
????????????GetSubResult?result?=?JsonHelper<GetSubResult>.ConvertJson(url,?postData);????????????if(result?!=?null)
????????????{
????????????????list?=?result.cate_list;
????????????}????????????return?list;
????????}

?

3、商品管理接口的測試

為了驗證我們開發(fā)的接口,我們需要增加一個測試項目,方便對我們編寫的API進行測試,測試完全成功后,我們才能正式在項目中使用。

我為了方便,創(chuàng)建了一個Winform項目,分別對各個接口進行測試。

C#開發(fā)微信門戶及應用-微信小店商品管理接口的封裝和測試

本篇主要介紹商品管理方面的接口,因此下面主要介紹其中商品管理部分的接口測試代碼,以及對應的結(jié)果。

其中商品常規(guī)管理的接口測試代碼如下所示。

????????private?void?btnMerchant_Click(object?sender,?EventArgs?e)
????????{????????????//商品管理
????????????IMerchantApi?api?=?new?MerchantApi();????????????//獲取所有商品信息
????????????Console.WriteLine("獲取所有商品信息");
????????????List<MerchantJson>?list?=?api.GetMerchantByStatus(token,?0);????????????foreach(MerchantJson?json?in?list)
????????????{
????????????????Console.WriteLine(json.ToJson());
????????????????Console.WriteLine();
????????????}????????????//更新商品狀態(tài)
????????????Console.WriteLine("更新商品狀態(tài)");????????????foreach?(MerchantJson?json?in?list)
????????????{
????????????????CommonResult?result?=?api.UpdateMerchantStatus(token,?json.product_id,?1);
????????????????Console.WriteLine("商品ID:{0},商品名稱:{1},?操作:{2}",?
????????????????????json.product_id,?json.product_base.name,?result.Success???"成功"?:?"失敗");
????????????}

????????????Thread.Sleep(1000);????????????//根據(jù)商品ID獲取商品信息
????????????Console.WriteLine("根據(jù)商品ID獲取商品信息");????????????foreach?(MerchantJson?json?in?list)
????????????{
????????????????MerchantJson?getJson?=?api.GetMerchant(token,?json.product_id);????????????????if(json?!=?null)
????????????????{
????????????????????Console.WriteLine("商品ID:{0},商品名稱:{1}",?getJson.product_id,?getJson.product_base.name);
????????????????}
????????????}
????????}

測試后結(jié)果如下所示(就是返回我微店鋪里面的商品信息),一切正常。

返回的商品Json數(shù)據(jù)如下所示:

{??"product_id":?"pSiLnt6FYDuFtrRRPMlkdKbye-rE",??"product_base":?{????"category_id":?[??????"537103312"
????],????"property":?[
??????{????????"id":?"類型",????????"vid":?"軟件產(chǎn)品設(shè)計"
??????}
????],????"name":?"代碼生成工具Database2Sharp",????"sku_info":?[],????"main_img":?"http://www.miracleart.cn/",????"img":?[??????"http://www.miracleart.cn/"
????],????"detail":?[],????"buy_limit":?0,????"detail_html":?""
??},??"sku_list":?[
????{??????"sku_id":?"",??????"ori_price":?100000,??????"price":?50000,??????"icon_url":?"",??????"quantity":?1100,??????"product_code":?""
????}
??],??"attrext":?{????"location":?{??????"country":?"中國",??????"province":?"廣東",??????"city":?"廣州",??????"address":?""
????},????"isPostFree":?1,????"isHasReceipt":?0,????"isUnderGuaranty":?0,????"isSupportReplace":?0
??},??"delivery_info":?{????"delivery_type":?0,????"template_id":?175807970,????"express":?[
??????{????????"id":?10000027,????????"price":?0
??????},
??????{????????"id":?10000028,????????"price":?0
??????},
??????{????????"id":?10000029,????????"price":?0
??????}
????]
??},??"status":?1}

View Code

測試的部分結(jié)果輸出如下所示。

C#開發(fā)微信門戶及應用-微信小店商品管理接口的封裝和測試

另外,“商品維護管理”的功能測試主要就是測試商品的增加、修改、刪除操作,具體代碼如下所示。

????????private?void?btnMerchantEdit_Click(object?sender,?EventArgs?e)
????????{
????????????IMerchantApi?api?=?new?MerchantApi();????????????
????????????string?img1?=?"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjD3ulEKogfsiaua49pvLfUS8Ym0GSYjViaLic0FD3vN0V8PILcibEGb2fPfEOmw/0";????????????
????????????string?img2?=?"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjD3ul1UcLcwxrFdwTKYhH9Q5YZoCfX4Ncx655ZK6ibnlibCCErbKQtReySaVA/0n/";????????????
????????????string?img3?=?"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl28bJj62XgfHPibY3ORKicN1oJ4CcoIr4BMbfA8LqyyjzOZzqrOGz3f5KWq1QGP3fo6TOTSYD3TBQjuw/0n/";????????????
????????????//商品增刪改處理
????????????MerchantJson?merchant?=?new?MerchantJson();
????????????merchant.product_base?=?new?Merchant_base();
????????????merchant.product_base.name?=?"測試產(chǎn)品";
????????????merchant.product_base.category_id.Add("537074298");
????????????merchant.product_base.img?=?new?List<string>()?{?img1,?img2,?img3?};
????????????merchant.product_base.main_img?=?img1;
????????????merchant.product_base.detail.AddRange(new?List<MerchantDetail>()?{????????????????????new?MerchantDetail()
????????????????????{
????????????????????????text?=?"test?first"
????????????????????},????????????????????new?MerchantDetail()
????????????????????{
????????????????????????img?=?img2
????????????????????},?new?MerchantDetail()
????????????????????{
????????????????????????text?=?"test?again"
????????????????????}
????????????});
????????????merchant.product_base.property.AddRange(new?List<MerchantProperty>(){????????????????new?MerchantProperty
????????????????{
????????????????????id=?"1075741879",
????????????????????vid="1079749967"
????????????????},????????????????new?MerchantProperty{
????????????????????id=?"1075754127",
????????????????????vid=?"1079795198"
????????????????},????????????????new?MerchantProperty(){
????????????????????id=?"1075777334",
????????????????????vid=?"1079837440"
????????????????}
????????????});
????????????merchant.product_base.sku_info.AddRange(new?List<MerchantSku>(){????????????????new?MerchantSku{
????????????????????id=??"1075741873",
????????????????????vid?=?new?List<string>()?{????????????????????????"1079742386",????????????????????????"1079742363"
????????????????????}
????????????????}
????????????});
????????????merchant.product_base.buy_limit?=?10;????????????//merchant.product_base.detail_html?=?"<p class=\"item_pic_wrp\" style=\"margin-bottom:8px;font-size:0;\"><img class=\"item_pic\" style=\"width:100%;\" alt=\"\" src=\"http://www.miracleart.cn/\" ></p><p style=\"margin-bottom:11px;margin-top:11px;\">test</p><p class=\"item_pic_wrp\" style=\"margin-bottom:8px;font-size:0;\"><img class=\"item_pic\" style=\"width:100%;\" alt=\"\" src=\"http://www.miracleart.cn/\" ></p><p style=\"margin-bottom:11px;margin-top:11px;\">test?again</p>";
????????????merchant.sku_list.AddRange(new?List<MerchantSku_list>()
????????????{????????????????new?MerchantSku_list(){
????????????????sku_id="1075741873:1079742386",
????????????????price=30,
????????????????icon_url="http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjD3ulEKogfsiaua49pvLfUS8Ym0GSYjViaLic0FD3vN0V8PILcibEGb2fPfEOmw/0",
????????????????quantity=800,
????????????????product_code="testing",
????????????????ori_price=9000000
????????????????},????????????????new?MerchantSku_list(){
????????????????????sku_id="1075741873:1079742363",
????????????????????price=30,
????????????????????icon_url="http://mmbiz.qpic.cn/mmbiz/4whpV1VZl28bJj62XgfHPibY3ORKicN1oJ4CcoIr4BMbfA8LqyyjzOZzqrOGz3f5KWq1QGP3fo6TOTSYD3TBQjuw/0",
????????????????????quantity=800,
????????????????????product_code="testingtesting",
????????????????????ori_price=9000000
????????????????}
????????????});
????????????merchant.attrext?=?new?MerchantAttrext()
????????????{
????????????????location?=?new?MerchantLocation()
????????????????{
????????????????????country?=?"中國",
????????????????????province?=?"廣東省",
????????????????????city?=?"廣州市",
????????????????????address?=?"T.I.T創(chuàng)意園"
????????????????},
????????????????isPostFree?=?0,
????????????????isHasReceipt?=?1,
????????????????isUnderGuaranty?=?0,
????????????????isSupportReplace?=?0
????????????};
????????????merchant.delivery_info?=?new?MerchantDelivery()
????????????{
????????????????delivery_type?=?0,
????????????????template_id?=?0,
????????????????express?=?new?List<MerchantExpress>(){????????????????new?MerchantExpress()?{
????????????????????id=10000027,?
????????????????????price=100
????????????????},?
????????????????new?MerchantExpress(){
????????????????????id=10000028,?
????????????????????price=100
????????????????},?
????????????????new?MerchantExpress(){
????????????????????id=10000029,?
????????????????????price=100
????????????????}}
????????????};

????????????Console.WriteLine(merchant.ToJson());

????????????AddMerchantResult?result?=?api.AddMerchant(token,?merchant);
????????????Console.WriteLine("添加商品:{0}",?result.product_id);????????????if?(!string.IsNullOrEmpty(result.product_id))
????????????{????????????????//更新商品
????????????????merchant.product_id?=?result.product_id;
????????????????merchant.product_base.name?=?"測試產(chǎn)品22";
????????????????CommonResult?updateResult?=?api.UpdateMerchant(token,?merchant);
????????????????Console.WriteLine("更新商品:{0}",?updateResult.Success???"成功"?:?"失敗");


????????????????CommonResult?deleteResult?=?api.DeleteMerchant(token,?merchant.product_id);
????????????????Console.WriteLine("刪除商品:{0}",?deleteResult.Success???"成功"?:?"失敗");
????????????}
????????}

測試的輸出結(jié)果如下所示(一切成功)。

C#開發(fā)微信門戶及應用-微信小店商品管理接口的封裝和測試

以上就是我對商品管理接口的API定義和實現(xiàn),以及對接口進行測試的闡述,基本上把所有相關(guān)的內(nèi)容都貼出來了,希望大家能夠?qū)ξ⒌觊_發(fā)部分,有更深入的了解和認識。

?更多C#開發(fā)微信門戶及應用-微信小店商品管理接口的封裝和測試?相關(guān)文章請關(guān)注PHP中文網(wǎng)!


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)