博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试
阅读量:6298 次
发布时间:2019-06-22

本文共 13001 字,大约阅读时间需要 43 分钟。

在上篇《》里面介绍了一些微信小店的基础知识,以及对应的对象模型,本篇继续微信小店的主题,介绍其中API接口的封装和测试使用。微信小店的相关对象模型,基本上包括了常规的商品、商品分组、货架、库存、订单这些模型,还有商品分类,商品分类属性、商品分类SKU、快递邮寄模板、图片管理等功能。本文介绍的接口封装也就是基于这些内容进行的,并针对接口的实现进行测试和使用。

1、商品管理接口的定义

前面文章介绍了微信小店的对象模型,如下所示。

这个图形基本上覆盖了微信小店的相关对象,并介绍了它们之间的关系了。

我们从基础的商品信息管理入手,我们知道,商品接口包含了增加、修改、查询、删除等接口,如下所示。

商品信息是所有微店的基础,因此对它的管理操作,我们需要更加清晰和完善。

综上所述的功能,我们可以定义好微信商品的接口如下所示。

#region 商品信息        ///         /// 创建商品        ///         /// 调用接口凭证        /// 商品对象        /// 
AddMerchantResult AddMerchant(string accessToken, MerchantJson merchantJson); /// /// 删除商品 /// /// 调用接口凭证 /// 商品ID ///
CommonResult DeleteMerchant(string accessToken, string productId); /// /// 修改商品 /// product_id表示要更新的商品的ID,其他字段说明请参考增加商品接口。 /// 从未上架的商品所有信息均可修改,否则商品的名称(name)、商品分类(category)、商品属性(property)这三个字段不可修改。 /// /// 调用接口凭证 /// 修改商品的信息 ///
CommonResult UpdateMerchant(string accessToken, MerchantJson merchantJson); /// /// 根据ID查询商品信息,如果成功返回MerchantJson信息,否则返回null /// /// 调用接口凭证 /// 商品的Id ///
MerchantJson GetMerchant(string accessToken, string productId); /// /// 获取指定状态的所有商品 /// /// 调用接口凭证 /// 商品状态(0-全部, 1-上架, 2-下架) ///
List
GetMerchantByStatus(string accessToken, int status); ///
/// 商品上下架 /// ///
调用接口凭证 ///
商品上下架标识(0-下架, 1-上架) ///
CommonResult UpdateMerchantStatus(string accessToken, string productId, int status); #endregion

当然,微信的商品还包含了分类、分类属性、分类SKU的基础管理,因此商品管理还需要增加这个内容

它们的功能接口定义如下所示。通过下面的接口,我们就很容易实现商品分类(不是商品分组)、SKU信息、和分类属性等信息的获取操作了。

#region 商品分类及属性        ///         /// 获取指定分类的所有子分类        ///         /// 调用接口凭证        /// 大分类ID(根节点分类id为1)        /// 
List
GetSub(string accessToken, int cate_id); ///
/// 获取指定子分类的所有SKU /// ///
调用接口凭证 ///
商品子分类ID ///
List
GetSku(string accessToken, int cate_id); ///
/// 获取指定分类的所有属性 /// ///
调用接口凭证 ///
分类ID ///
List
GetProperty(string accessToken, int cate_id); #endregion

2、商品管理接口的实现

上面的接口定义了对应商品的接口。

对于接口的实现,我们一般都是根据官方网站的接口说明,提交到那个URL,并且是POST那些数据,然后整理成一个常规的处理方式,获得结果并转换为对应的对象即可,如添加商品操作的实现代码如下所示。

///         /// 创建商品        ///         /// 调用接口凭证        /// 商品对象        /// 
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); }

而返回结果,这是定义一个对象来获得添加商品的ID等内容,如下所示。

///     /// 创建商品信息的返回结果    ///     public class AddMerchantResult : ErrorJsonResult    {        ///         /// 商品ID        ///         public string product_id { get; set; }    }

而基类这是常规的响应内容

///     /// 微信返回Json结果的错误数据    ///     public class ErrorJsonResult     {        ///         /// 返回代码        ///         public ReturnCode errcode { get; set; }        ///         /// 错误消息        ///         public string errmsg { get; set; }    }

通过这些对象的定义,添加商品后,我们就知道操作是否成功,如果添加成功,返回了一个刚刚创建的ID给我们使用,我们可以进行查询具体的商品信息或者进行修改、删除等操作的。

而对商品信息的修改或者删除的操作,都是返回一个是否成功的记录就可以了,因此我们定义了一个统一的回应对象CommonResult。商品修改、删除的接口实现代码如下所示。

由于代码我都进行高度的完善和整理,对于各种处理的代码都相对比较容易理解的了。

///         /// 删除商品        ///         /// 调用接口凭证        /// 商品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)这三个字段不可修改。 /// /// 调用接口凭证 /// 修改商品的信息 ///
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); }

为了获取商品的详细信息,我们需要定义一个商品的实体对象,以便我们把获取到的信息转换为实体类信息,方便使用和处理。

商品的信息,包含了不少细小定义的类,他们构成了商品的各个部分的内容,主体的实体类信息如下所示。

定义好相对比较复杂的商品信息实体后,我们就可以通过对象进行处理了。

获取商品详细信息的实现代码如下所示。

///         /// 根据ID查询商品信息,如果成功返回MerchantJson信息,否则返回null        ///         /// 调用接口凭证        /// 商品的Id        /// 
public MerchantJson GetMerchant(string accessToken, string productId) { var url = string.Format("https://api.weixin.qq.com/merchant/get?access_token={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; }

虽然商品的实体信息很复杂,但是一旦我们定义好,我们就很容易对结果进行转换并处理了,上面的代码并不是很难理解,主要就是提交数据后,对数据进行转换而已。

当然,我们还可以获取不同状态的商品列表内容,如下代码所示。

///         /// 获取指定状态的所有商品        ///         /// 调用接口凭证        /// 商品状态(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信息也都是很重要的内容,我们需要指定对应商品分类才能添加到微信小店里面。

获取商品分类的操作实现代码如下所示。

///         /// 获取指定分类的所有子分类        ///         /// 调用接口凭证        /// 大分类ID(根节点分类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; }

3、商品管理接口的测试

为了验证我们开发的接口,我们需要增加一个测试项目,方便对我们编写的API进行测试,测试完全成功后,我们才能正式在项目中使用。

我为了方便,创建了一个Winform项目,分别对各个接口进行测试。

本篇主要介绍商品管理方面的接口,因此下面主要介绍其中商品管理部分的接口测试代码,以及对应的结果。

其中商品常规管理的接口测试代码如下所示。

private void btnMerchant_Click(object sender, EventArgs e)        {            //商品管理            IMerchantApi api = new MerchantApi();            //获取所有商品信息            Console.WriteLine("获取所有商品信息");            List
list = api.GetMerchantByStatus(token, 0); foreach(MerchantJson json in list) { Console.WriteLine(json.ToJson()); Console.WriteLine(); } //更新商品状态 Console.WriteLine("更新商品状态"); 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); //根据商品ID获取商品信息 Console.WriteLine("根据商品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); } } }

测试后结果如下所示(就是返回我微店铺里面的商品信息),一切正常。

返回的商品Json数据如下所示:

 
View Code

测试的部分结果输出如下所示。

另外,“商品维护管理”的功能测试主要就是测试商品的增加、修改、删除操作,具体代码如下所示。

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 = "测试产品";            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创意园" }, 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 = "测试产品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 ? "成功" : "失败"); } }

测试的输出结果如下所示(一切成功)。

以上就是我对商品管理接口的API定义和实现,以及对接口进行测试的阐述,基本上把所有相关的内容都贴出来了,希望大家能够对微店开发部分,有更深入的了解和认识。

如果对这个《C#开发微信门户及应用》系列感兴趣,可以关注我的其他文章,系列随笔如下所示:

 

 

本文转自博客园伍华聪的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
ASP.NET 页生命周期概述
查看>>
Windows Phone 模拟器(Emulator) 加载程序一闪而过就自动退出的解决办法
查看>>
构造 HDOJ 5400 Arithmetic Sequence
查看>>
原型模式
查看>>
UILabel
查看>>
shell编程
查看>>
博弈(取石子)专题
查看>>
Android标题栏,状态栏
查看>>
[bzoj 3534][Sdoi2014] 重建
查看>>
正确导入svn拉取的工程
查看>>
mysql ef vs
查看>>
验证码生成
查看>>
推荐一个单元测试模拟框架:Nsubstitute
查看>>
WPF的ListBox中的RadioButton不能单选问题
查看>>
Frame 控件
查看>>
树形dp poj2342 Anniversary party * 求最大价值
查看>>
定义变量时无引号,单引号,双引号区别与特点:
查看>>
Search in Rotated Sorted Array(二分查找)
查看>>
angular代码分析之异常日志设计
查看>>
C语言笔试
查看>>