在上篇《C#開發(fā)微信門戶及應用(22)-微信小店的開發(fā)與使用》裡面介紹了一些微信小店的基礎(chǔ)知識,以及對應的對像模型,本篇繼續(xù)微信小店的主題,介紹其中API介面的封裝與測試使用。微信小店的相關(guān)物件模型,基本上包括了常規(guī)的商品、商品分組、貨架、庫存、訂單這些模型,還有商品分類,商品分類屬性、商品分類SKU、快遞郵寄模板、圖片管理等功能。本文介紹的介面封裝也就是基於這些內(nèi)容進行的,並針對介面的實作進行測試和使用。
1、商品管理介面的定義
前面文章介紹了微信小店的物件模型,如下所示。
這個圖形基本上覆蓋了微信小店的相關(guān)對象,並介紹了它們之間的關(guān)係了。
我們從基礎(chǔ)的商品資訊管理入手,我們知道,商品介麵包含了增加、修改、查詢、刪除等接口,如下所示。
商品資訊是所有微店的基礎(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)容
它們的功能介面定義如下所示。透過下面的接口,我們就很容易實現(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)容,主體的實體類資訊如下所示。
定義好相對比較複雜的商品資訊實體後,我們就可以透過物件處理了。
取得商品詳細資訊的實作代碼如下所示。
????????///?<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項目,分別對各個接口進行測試。
本篇主要介紹商品管理方面的接口,因此下面主要介紹其中商品管理部分的接口測試代碼,以及對應的結(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é)果輸出如下所示。
另外,“商品維護管理”的功能測試主要就是測試商品的增加、修改、刪除操作,具體代碼如下所示。
????????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é)果如下所示(一切成功)。
以上就是我對商品管理接口的API定義和實現(xiàn),以及對接口進行測試的闡述,基本上把所有相關(guān)的內(nèi)容都貼出來了,希望大家能夠?qū)ξ⒌觊_發(fā)部分,有更深入的了解和認識。
?更多C#開發(fā)微信門戶及應用-微信小店商品管理接口的封裝和測試?相關(guān)文章請關(guān)注PHP中文網(wǎng)!

熱AI工具

Undress AI Tool
免費脫衣圖片

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

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

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

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