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

在上篇《C#開發(fā)微信門戶及應(yīng)用(22)-微信小店的開發(fā)和使用》里面介紹了一些微信小店的基礎(chǔ)知識导盅,以及對應(yīng)的對象模型锥涕,本篇繼續(xù)微信小店的主題炸枣,介紹其中API接口的封裝和測試使用厌殉。微信小店的相關(guān)對象模型寸五,基本上包括了常規(guī)的商品旁蔼、商品分組锨苏、貨架、庫存棺聊、訂單這些模型伞租,還有商品分類,商品分類屬性限佩、商品分類SKU葵诈、快遞郵寄模板、圖片管理等功能祟同。本文介紹的接口封裝也就是基于這些內(nèi)容進行的作喘,并針對接口的實現(xiàn)進行測試和使用。

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">商品上下架標(biāo)識(0-下架, 1-上架)</param>
/// <returns></returns>
CommonResult UpdateMerchantStatus(string accessToken, string productId, int status); 

#endregion

當(dāng)然世曾,微信的商品還包含了分類缨恒、分類屬性、分類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)

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

對于接口的實現(xiàn),我們一般都是根據(jù)官方網(wǎng)站的接口說明辨赐,提交到那個URL优俘,并且是POST那些數(shù)據(jù),然后整理成一個常規(guī)的處理方式掀序,獲得結(jié)果并轉(zhuǎn)換為對應(yīng)的對象即可,如添加商品操作的實現(xià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("https://api.weixin.qq.com/merchant/create?access_token={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ī)的響應(yīng)內(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; }
}

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

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

由于代碼我都進行高度的完善和整理爹耗,對于各種處理的代碼都相對比較容易理解的了耙考。

/// <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,其他字段說明請參考增加商品接口潭兽。
/// 從未上架的商品所有信息均可修改倦始,否則商品的名稱(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("https://api.weixin.qq.com/merchant/update?access_token={0}", accessToken);
    string postData = merchantJson.ToJson();

    return Helper.GetExecuteResult(url, postData);
}

為了獲取商品的詳細信息,我們需要定義一個商品的實體對象怒坯,以便我們把獲取到的信息轉(zhuǎn)換為實體類信息炫狱,方便使用和處理。
商品的信息剔猿,包含了不少細小定義的類视译,他們構(gòu)成了商品的各個部分的內(nèi)容,主體的實體類信息如下所示归敬。



定義好相對比較復(fù)雜的商品信息實體后酷含,我們就可以通過對象進行處理了。
獲取商品詳細信息的實現(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("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<GetMerchantResult>.ConvertJson(url, postData);
    if (result != null)
    {
        merchant = result.product_info;
    }
    return merchant;
}

雖然商品的實體信息很復(fù)雜舱污,但是一旦我們定義好呀舔,我們就很容易對結(jié)果進行轉(zhuǎn)換并處理了,上面的代碼并不是很難理解扩灯,主要就是提交數(shù)據(jù)后媚赖,對數(shù)據(jù)進行轉(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;
}

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

獲取商品分類的操作實現(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("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、商品管理接口的測試

為了驗證我們開發(fā)的接口白嘁,我們需要增加一個測試項目坑鱼,方便對我們編寫的API進行測試,測試完全成功后絮缅,我們才能正式在項目中使用鲁沥。
我為了方便,創(chuàng)建了一個Winform項目耕魄,分別對各個接口進行測試画恰。



本篇主要介紹商品管理方面的接口,因此下面主要介紹其中商品管理部分的接口測試代碼吸奴,以及對應(yīng)的結(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://mmbiz.qpic.cn/mmbiz/mLqH9gr11Gyb2sgiaelcsxYtQENGePp0Rb3AZKbjkicnKTUNBrEdo7Dyic97ar46SoAfKRB5x2R94bDUdNpgqiaZzA/0",
    "img": [
      "http://mmbiz.qpic.cn/mmbiz/mLqH9gr11Gyb2sgiaelcsxYtQENGePp0RiaheJmVXm7tbvTYUQV7OF3DgfGiaQVMh3WbeEcGDOQQiajQXGKK9tfoeA/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<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 = "中國",
            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ā)微信門戶及應(yīng)用》系列感興趣赃蛛,可以關(guān)注我的其他文章.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恃锉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呕臂,更是在濱河造成了極大的恐慌,老刑警劉巖肪跋,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歧蒋,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機谜洽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門萝映,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阐虚,你說我怎么就攤上這事序臂。” “怎么了实束?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵奥秆,是天一觀的道長。 經(jīng)常有香客問我咸灿,道長构订,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任避矢,我火速辦了婚禮悼瘾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘审胸。我一直安慰自己亥宿,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布砂沛。 她就那樣靜靜地躺著烫扼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尺上。 梳的紋絲不亂的頭發(fā)上材蛛,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音怎抛,去河邊找鬼卑吭。 笑死,一個胖子當(dāng)著我的面吹牛马绝,可吹牛的內(nèi)容都是我干的豆赏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼富稻,長吁一口氣:“原來是場噩夢啊……” “哼掷邦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起椭赋,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤抚岗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后哪怔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宣蔚,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡向抢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胚委。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挟鸠。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖亩冬,靈堂內(nèi)的尸體忽然破棺而出艘希,到底是詐尸還是另有隱情,我是刑警寧澤硅急,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布覆享,位于F島的核電站,受9級特大地震影響铜秆,放射性物質(zhì)發(fā)生泄漏淹真。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一连茧、第九天 我趴在偏房一處隱蔽的房頂上張望核蘸。 院中可真熱鬧,春花似錦啸驯、人聲如沸客扎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徙鱼。三九已至,卻和暖如春针姿,著一層夾襖步出監(jiān)牢的瞬間袱吆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工距淫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绞绒,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓榕暇,卻偏偏與公主長得像蓬衡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彤枢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容