溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#如何實(shí)現(xiàn)微信小店商品管理接口的封裝和測(cè)試

發(fā)布時(shí)間:2021-09-09 17:12:29 來(lái)源:億速云 閱讀:154 作者:小新 欄目:移動(dòng)開(kāi)發(fā)

這篇文章主要介紹了C#如何實(shí)現(xiàn)微信小店商品管理接口的封裝和測(cè)試,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

1、商品管理接口的定義

前面文章介紹了微信小店的對(duì)象模型,如下所示。

C#如何實(shí)現(xiàn)微信小店商品管理接口的封裝和測(cè)試

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

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

C#如何實(shí)現(xiàn)微信小店商品管理接口的封裝和測(cè)試

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

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

#region 商品信息
        /// <summary>
        /// 創(chuàng)建商品
        /// </summary>
        /// <param name="accessToken">調(diào)用接口憑證</param>
        /// <param name="merchantJson">商品對(duì)象</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,其他字段說(shuō)明請(qǐng)參考增加商品接口。
        /// 從未上架的商品所有信息均可修改,否則商品的名稱(name)、商品分類(lèi)(category)、商品屬性(property)這三個(gè)字段不可修改。
        /// </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">商品上下架標(biāo)識(shí)(0-下架, 1-上架)</param>
        /// <returns></returns>
        CommonResult UpdateMerchantStatus(string accessToken, string productId, int status); 

        #endregion

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

C#如何實(shí)現(xiàn)微信小店商品管理接口的封裝和測(cè)試

它們的功能接口定義如下所示。通過(guò)下面的接口,我們就很容易實(shí)現(xiàn)商品分類(lèi)(不是商品分組)、SKU信息、和分類(lèi)屬性等信息的獲取操作了。

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

        /// <summary>
        /// 獲取指定子分類(lèi)的所有SKU
        /// </summary>
        /// <param name="accessToken">調(diào)用接口憑證</param>
        /// <param name="cateId">商品子分類(lèi)ID</param>
        /// <returns></returns>
        List<SubCategorySku> GetSku(string accessToken, int cate_id);

        /// <summary>
        /// 獲取指定分類(lèi)的所有屬性
        /// </summary>
        /// <param name="accessToken">調(diào)用接口憑證</param>
        /// <param name="cateId">分類(lèi)ID</param>
        /// <returns></returns>
        List<SubCategoryProperty> GetProperty(string accessToken, int cate_id); 

        #endregion

2、商品管理接口的實(shí)現(xiàn)

上面的接口定義了對(duì)應(yīng)商品的接口。

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

/// <summary>
        /// 創(chuàng)建商品
        /// </summary>
        /// <param name="accessToken">調(diào)用接口憑證</param>
        /// <param name="merchantJson">商品對(duì)象</param>
        /// <returns></returns>
        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<AddMerchantResult>.ConvertJson(url, postData);
        }

而返回結(jié)果,這是定義一個(gè)對(duì)象來(lái)獲得添加商品的ID等內(nèi)容,如下所示。


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

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

        /// <summary>
        /// 錯(cuò)誤消息
        /// </summary>
        public string errmsg { get; set; }
    }

通過(guò)這些對(duì)象的定義,添加商品后,我們就知道操作是否成功,如果添加成功,返回了一個(gè)剛剛創(chuàng)建的ID給我們使用,我們可以進(jìn)行查詢具體的商品信息或者進(jìn)行修改、刪除等操作的。

而對(duì)商品信息的修改或者刪除的操作,都是返回一個(gè)是否成功的記錄就可以了,因此我們定義了一個(gè)統(tǒng)一的回應(yīng)對(duì)象CommonResult。商品修改、刪除的接口實(shí)現(xiàn)代碼如下所示。

由于代碼我都進(jìn)行高度的完善和整理,對(duì)于各種處理的代碼都相對(duì)比較容易理解的了。

/// <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("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);
        }

        /// <summary>
        /// 修改商品
        /// product_id表示要更新的商品的ID,其他字段說(shuō)明請(qǐng)參考增加商品接口。
        /// 從未上架的商品所有信息均可修改,否則商品的名稱(name)、商品分類(lèi)(category)、商品屬性(property)這三個(gè)字段不可修改。
        /// </summary>
        /// <param name="accessToken">調(diào)用接口憑證</param>
        /// <param name="merchantJson">修改商品的信息</param>
        /// <returns></returns>
        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ì)信息,我們需要定義一個(gè)商品的實(shí)體對(duì)象,以便我們把獲取到的信息轉(zhuǎn)換為實(shí)體類(lèi)信息,方便使用和處理。

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

C#如何實(shí)現(xiàn)微信小店商品管理接口的封裝和測(cè)試

定義好相對(duì)比較復(fù)雜的商品信息實(shí)體后,我們就可以通過(guò)對(duì)象進(jìn)行處理了。

獲取商品詳細(xì)信息的實(shí)現(xiàn)代碼如下所示。

        /// <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.php.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;
        }

雖然商品的實(shí)體信息很復(fù)雜,但是一旦我們定義好,我們就很容易對(duì)結(jié)果進(jìn)行轉(zhuǎn)換并處理了,上面的代碼并不是很難理解,主要就是提交數(shù)據(jù)后,對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換而已。

當(dāng)然,我們還可以獲取不同狀態(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("https://api.weixin.qq.com/merchant/getbystatus?access_token={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;
        }

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

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

/// <summary>
        /// 獲取指定分類(lèi)的所有子分類(lèi)
        /// </summary>
        /// <param name="accessToken">調(diào)用接口憑證</param>
        /// <param name="cateId">大分類(lèi)ID(根節(jié)點(diǎn)分類(lèi)id為1)</param>
        /// <returns></returns>
        public List<SubCategory> 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<SubCategory> list = new List<SubCategory>();
            GetSubResult result = JsonHelper<GetSubResult>.ConvertJson(url, postData);
            if(result != null)
            {
                list = result.cate_list;
            }
            return list;
        }

3、商品管理接口的測(cè)試

為了驗(yàn)證我們開(kāi)發(fā)的接口,我們需要增加一個(gè)測(cè)試項(xiàng)目,方便對(duì)我們編寫(xiě)的API進(jìn)行測(cè)試,測(cè)試完全成功后,我們才能正式在項(xiàng)目中使用。

我為了方便,創(chuàng)建了一個(gè)Winform項(xiàng)目,分別對(duì)各個(gè)接口進(jìn)行測(cè)試。

C#如何實(shí)現(xiàn)微信小店商品管理接口的封裝和測(cè)試

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

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

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);
                }
            }
        }

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

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

{
  "product_id": "pSiLnt6FYDuFtrRRPMlkdKbye-rE",
  "product_base": {
    "category_id": [
      "537103312"
    ],
    "property": [
      {
        "id": "類(lèi)型",
        "vid": "軟件產(chǎn)品設(shè)計(jì)"
      }
    ],
    "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": "中國(guó)",
      "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
}

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

C#如何實(shí)現(xiàn)微信小店商品管理接口的封裝和測(cè)試

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

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 = "測(cè)試產(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 = "<div class=\"item_pic_wrp\" style=\"margin-bottom:8px;font-size:0;\"><img class=\"item_pic\" style=\"width:100%;\" alt=\"\" src=\"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjD3ulEKogfsiaua49pvLfUS8Ym0GSYjViaLic0FD3vN0V8PILcibEGb2fPfEOmw/0\" ></div><p style=\"margin-bottom:11px;margin-top:11px;\">test</p><div class=\"item_pic_wrp\" style=\"margin-bottom:8px;font-size:0;\"><img class=\"item_pic\" style=\"width:100%;\" alt=\"\" src=\"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjD3ul1UcLcwxrFdwTKYhH9Q5YZoCfX4Ncx655ZK6ibnlibCCErbKQtReySaVA/0\" ></div><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 = "中國(guó)",
                    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 = "測(cè)試產(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 ? "成功" : "失敗");
            }
        }

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

C#如何實(shí)現(xiàn)微信小店商品管理接口的封裝和測(cè)試

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C#如何實(shí)現(xiàn)微信小店商品管理接口的封裝和測(cè)試”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI