這篇文章主要介紹了C#如何實現(xiàn)微信小店商品管理接口的封裝和測試,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)服務(wù)項目包括新興網(wǎng)站建設(shè)、新興網(wǎng)站制作、新興網(wǎng)頁制作以及新興網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,新興網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到新興省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1、商品管理接口的定義
前面文章介紹了微信小店的對象模型,如下所示。
這個圖形基本上覆蓋了微信小店的相關(guān)對象,并介紹了它們之間的關(guān)系了。
我們從基礎(chǔ)的商品信息管理入手,我們知道,商品接口包含了增加、修改、查詢、刪除等接口,如下所示。
商品信息是所有微店的基礎(chǔ),因此對它的管理操作,我們需要更加清晰和完善。
綜上所述的功能,我們可以定義好微信商品的接口如下所示。
#region 商品信息 ////// 創(chuàng)建商品 /// /// 調(diào)用接口憑證 /// 商品對象 ///AddMerchantResult AddMerchant(string accessToken, MerchantJson merchantJson); /// /// 刪除商品 /// /// 調(diào)用接口憑證 /// 商品ID ///CommonResult DeleteMerchant(string accessToken, string productId); /// /// 修改商品 /// product_id表示要更新的商品的ID,其他字段說明請參考增加商品接口。 /// 從未上架的商品所有信息均可修改,否則商品的名稱(name)、商品分類(category)、商品屬性(property)這三個字段不可修改。 /// /// 調(diào)用接口憑證 /// 修改商品的信息 ///CommonResult UpdateMerchant(string accessToken, MerchantJson merchantJson); /// /// 根據(jù)ID查詢商品信息,如果成功返回MerchantJson信息,否則返回null /// /// 調(diào)用接口憑證 /// 商品的Id ///MerchantJson GetMerchant(string accessToken, string productId); /// /// 獲取指定狀態(tài)的所有商品 /// /// 調(diào)用接口憑證 /// 商品狀態(tài)(0-全部, 1-上架, 2-下架) ///List GetMerchantByStatus(string accessToken, int status); /// /// 商品上下架 /// /// 調(diào)用接口憑證 /// 商品上下架標(biāo)識(0-下架, 1-上架) ///CommonResult UpdateMerchantStatus(string accessToken, string productId, int status); #endregion
當(dāng)然,微信的商品還包含了分類、分類屬性、分類SKU的基礎(chǔ)管理,因此商品管理還需要增加這個內(nèi)容
它們的功能接口定義如下所示。通過下面的接口,我們就很容易實現(xiàn)商品分類(不是商品分組)、SKU信息、和分類屬性等信息的獲取操作了。
#region 商品分類及屬性 ////// 獲取指定分類的所有子分類 /// /// 調(diào)用接口憑證 /// 大分類ID(根節(jié)點分類id為1) ///List GetSub(string accessToken, int cate_id); /// /// 獲取指定子分類的所有SKU /// /// 調(diào)用接口憑證 /// 商品子分類ID ///List GetSku(string accessToken, int cate_id); /// /// 獲取指定分類的所有屬性 /// /// 調(diào)用接口憑證 /// 分類ID ///List GetProperty(string accessToken, int cate_id); #endregion
上面的接口定義了對應(yīng)商品的接口。
對于接口的實現(xiàn),我們一般都是根據(jù)官方網(wǎng)站的接口說明,提交到那個URL,并且是POST那些數(shù)據(jù),然后整理成一個常規(guī)的處理方式,獲得結(jié)果并轉(zhuǎn)換為對應(yīng)的對象即可,如添加商品操作的實現(xiàn)代碼如下所示。
////// 創(chuàng)建商品 /// /// 調(diào)用接口憑證 /// 商品對象 ///public AddMerchantResult AddMerchant(string accessToken, MerchantJson merchantJson) { var url = string.Format("https://api.weixin.qq.com/merchant/create?access_token={0}", accessToken); string postData = merchantJson.ToJson(); return JsonHelper .ConvertJson(url, postData); }
而返回結(jié)果,這是定義一個對象來獲得添加商品的ID等內(nèi)容,如下所示。
///
/// 創(chuàng)建商品信息的返回結(jié)果
///
public class AddMerchantResult : ErrorJsonResult
{
///
/// 商品ID
///
public string product_id { get; set; }
}
////// 微信返回Json結(jié)果的錯誤數(shù)據(jù) /// public class ErrorJsonResult { ////// 返回代碼 /// public ReturnCode errcode { get; set; } ////// 錯誤消息 /// public string errmsg { get; set; } }
通過這些對象的定義,添加商品后,我們就知道操作是否成功,如果添加成功,返回了一個剛剛創(chuàng)建的ID給我們使用,我們可以進(jìn)行查詢具體的商品信息或者進(jìn)行修改、刪除等操作的。
而對商品信息的修改或者刪除的操作,都是返回一個是否成功的記錄就可以了,因此我們定義了一個統(tǒng)一的回應(yīng)對象CommonResult。商品修改、刪除的接口實現(xiàn)代碼如下所示。
由于代碼我都進(jìn)行高度的完善和整理,對于各種處理的代碼都相對比較容易理解的了。
////// 刪除商品 /// /// 調(diào)用接口憑證 /// 商品ID ///public CommonResult DeleteMerchant(string accessToken, string productId) { var url = string.Format("https://api.weixin.qq.com/merchant/del?access_token={0}", accessToken); var data = new { product_id = productId }; string postData = data.ToJson(); return Helper.GetExecuteResult(url, postData); } /// /// 修改商品 /// product_id表示要更新的商品的ID,其他字段說明請參考增加商品接口。 /// 從未上架的商品所有信息均可修改,否則商品的名稱(name)、商品分類(category)、商品屬性(property)這三個字段不可修改。 /// /// 調(diào)用接口憑證 /// 修改商品的信息 ///public CommonResult UpdateMerchant(string accessToken, MerchantJson merchantJson) { var url = string.Format("https://api.weixin.qq.com/merchant/update?access_token={0}", accessToken); string postData = merchantJson.ToJson(); return Helper.GetExecuteResult(url, postData); }
為了獲取商品的詳細(xì)信息,我們需要定義一個商品的實體對象,以便我們把獲取到的信息轉(zhuǎn)換為實體類信息,方便使用和處理。
商品的信息,包含了不少細(xì)小定義的類,他們構(gòu)成了商品的各個部分的內(nèi)容,主體的實體類信息如下所示。
定義好相對比較復(fù)雜的商品信息實體后,我們就可以通過對象進(jìn)行處理了。
獲取商品詳細(xì)信息的實現(xiàn)代碼如下所示。
////// 根據(jù)ID查詢商品信息,如果成功返回MerchantJson信息,否則返回null /// /// 調(diào)用接口憑證 /// 商品的Id ///public MerchantJson GetMerchant(string accessToken, string productId) { var url = string.Format("http://www.php.cn/{0}", accessToken); var data = new { product_id = productId }; string postData = data.ToJson(); MerchantJson merchant = null; GetMerchantResult result = JsonHelper .ConvertJson(url, postData); if (result != null) { merchant = result.product_info; } return merchant; }
雖然商品的實體信息很復(fù)雜,但是一旦我們定義好,我們就很容易對結(jié)果進(jìn)行轉(zhuǎn)換并處理了,上面的代碼并不是很難理解,主要就是提交數(shù)據(jù)后,對數(shù)據(jù)進(jìn)行轉(zhuǎn)換而已。
當(dāng)然,我們還可以獲取不同狀態(tài)的商品列表內(nèi)容,如下代碼所示。
////// 獲取指定狀態(tài)的所有商品 /// /// 調(diào)用接口憑證 /// 商品狀態(tài)(0-全部, 1-上架, 2-下架) ///public List GetMerchantByStatus(string accessToken, int status) { var url = string.Format("https://api.weixin.qq.com/merchant/getbystatus?access_token={0}", accessToken); var data = new { status = status }; string postData = data.ToJson(); List list = new List (); GetMerchantByStatus result = JsonHelper .ConvertJson(url, postData); if (result != null) { list = result.products_info; } return list; }
我們添加商品的時候,商品的分類信息、分類屬性、分類SKU信息也都是很重要的內(nèi)容,我們需要指定對應(yīng)商品分類才能添加到微信小店里面。
獲取商品分類的操作實現(xiàn)代碼如下所示。
////// 獲取指定分類的所有子分類 /// /// 調(diào)用接口憑證 /// 大分類ID(根節(jié)點分類id為1) ///public List GetSub(string accessToken, int cate_id) { var url = string.Format("https://api.weixin.qq.com/merchant/category/getsub?access_token={0}", accessToken); var data = new { cate_id = cate_id }; string postData = data.ToJson(); List list = new List (); GetSubResult result = JsonHelper .ConvertJson(url, postData); if(result != null) { list = result.cate_list; } return list; }
為了驗證我們開發(fā)的接口,我們需要增加一個測試項目,方便對我們編寫的API進(jìn)行測試,測試完全成功后,我們才能正式在項目中使用。
我為了方便,創(chuàng)建了一個Winform項目,分別對各個接口進(jìn)行測試。
本篇主要介紹商品管理方面的接口,因此下面主要介紹其中商品管理部分的接口測試代碼,以及對應(yīng)的結(jié)果。
其中商品常規(guī)管理的接口測試代碼如下所示。
private void btnMerchant_Click(object sender, EventArgs e) { //商品管理 IMerchantApi api = new MerchantApi(); //獲取所有商品信息 Console.WriteLine("獲取所有商品信息"); Listlist = 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://mmbiz.qpic.cn/mmbiz/mLqH9gr11Gyb2sgiaelcsxYtQENGePp0Rb3AZKbjkicnKTUNBrEdo7Dyic97ar46SoAfKRB5x2R94bDUdNpgqiaZzA/0", "img": [ "http://mmbiz.qpic.cn/mmbiz/mLqH9gr11Gyb2sgiaelcsxYtQENGePp0RiaheJmVXm7tbvTYUQV7OF3DgfGiaQVMh4WbeEcGDOQQiajQXGKK9tfoeA/0" ], "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 }
測試的部分結(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/0"; string img3 = "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl28bJj62XgfHPibY3ORKicN1oJ4CcoIr4BMbfA8LqyyjzOZzqrOGz3f5KWq1QGP3fo6TOTSYD3TBQjuw/0"; //商品增刪改處理 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() { img1, img2, img3 }; merchant.product_base.main_img = img1; merchant.product_base.detail.AddRange(new List () { new MerchantDetail() { text = "test first" }, new MerchantDetail() { img = img2 }, new MerchantDetail() { text = "test again" } }); merchant.product_base.property.AddRange(new List (){ 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 (){ new MerchantSku{ id= "1075741873", vid = new List () { "1079742386", "1079742363" } } }); merchant.product_base.buy_limit = 10; //merchant.product_base.detail_html = " test
test again
"; merchant.sku_list.AddRange(new 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 (){ 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é)果如下所示(一切成功)。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C#如何實現(xiàn)微信小店商品管理接口的封裝和測試”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!