public override void MarkDelivery(Domain.Shop shop, string popOrderId, Domain.PopPayType payType, string deliveryCompany, string deliveryNumber) { var orderState = this.GetOrderStatePingduoduo(shop, popOrderId); var os = ConvertToOrderState(popOrderId, orderState); if (os == Domain.OrderState.SHIPPED || os == Domain.OrderState.SUCCESS) { return; } if (os != Domain.OrderState.PAYED) { throw new Exception("订单状态不正确:" + os); } SortedDictionary <string, string> param = new SortedDictionary <string, string>(); param["order_sn"] = popOrderId; param["logistics_id"] = ServiceContainer.GetService <DeliveryCompanyService>().GetDeliveryCompany(deliveryCompany).First.PopMapPingduoduo; param["tracking_number"] = deliveryNumber; var rsp = this.Invoke <PddRspShipping>(shop, "pdd.logistics.online.send", param); if (rsp.is_success.ToLower() != "true" && rsp.is_success.ToLower() != "1") { throw new Exception("发货失败:" + rsp.error_msg); } }
private static T InvokeOpenApi <T>(Domain.Shop shop, ITopRequest <T> request) where T : TopResponse { var topClient = GetTopClient(shop.AppKey, shop.AppSecret); var ret = topClient.Execute <T>(request, shop.AppAccessToken, DateTime.Now); if (ret.IsError) { throw new Exception("执行淘宝请求出错:" + ret.ErrCode + "," + ret.ErrMsg + ret.SubErrMsg); } return(ret); }
public override PopOrderState GetOrderState(Domain.Shop shop, string popOrderId) { var orderState = this.GetOrderStatePingduoduo(shop, popOrderId); var os = ConvertToOrderState(popOrderId, orderState); var popOrderState = new PopOrderState { PopOrderId = popOrderId, PopOrderStateValue = orderState.order_status, State = os, }; return(popOrderState); }
private PddRspGetOrderStateOrder GetOrderStatePingduoduo(Domain.Shop shop, string popOrderId) { SortedDictionary <string, string> param = new SortedDictionary <string, string>(); param["order_sns"] = popOrderId; var rsp = this.Invoke <PddRspGetOrderState>(shop, "pdd.order.status.get", param); if (rsp.order_status_list == null || rsp.order_status_list.Length < 1) { throw new Exception("拼多多查询状态返回空数据"); } return(rsp.order_status_list[0]); }
private T Invoke <T>(Domain.Shop shop, string apiName, SortedDictionary <string, string> param, int trimJsonWrapperLevel = 1) where T : PddRspBase { string timeStamp = ((long)DateTime.UtcNow.Subtract(UNIX_START_TIME).TotalSeconds).ToString(); param["type"] = apiName; param["client_id"] = shop.AppKey; param["access_token"] = shop.AppAccessToken; param["timestamp"] = timeStamp; param["data_type"] = "JSON"; param["sign"] = Sign(shop.AppSecret, param); var content = MsHttpRestful.PostUrlEncodeBodyReturnString(SERVER_URL, param); if (string.IsNullOrWhiteSpace(content)) { throw new Exception("接口调用失败:返回空数据"); } //去除PHP有可能产生的BOM头 if (content[0] != '{') { if (content.IndexOf('{') < 0) { throw new Exception("拼多多返回错误数据"); } content = content.Substring(content.IndexOf('{')); } //去除内容头 string bodyContent = TrimJsonWrapper(content, trimJsonWrapperLevel); var t = Newtonsoft.Json.JsonConvert.DeserializeObject <T>(bodyContent); if (string.IsNullOrWhiteSpace(t.error_code) == false) { if (t.error_msg.Contains("access_token已过期")) { throw new PopAccesstokenTimeOutException(); } if (t.error_msg.Contains("refresh_token已过期")) { throw new Exception("拼多多调用失败:授权已到期,请到店铺里面进行授权"); } Debug.WriteLine("请求参数:" + string.Join(Environment.NewLine, param.Select(obj => obj.Key + " " + obj.Value))); throw new Exception("拼多多调用失败:接口:" + apiName + " 错误信息" + t.error_code + "," + t.error_msg + "," + t.sub_msg); } return(t); }
public override void ModifyComment(Domain.Shop shop, string popOrderId, string comment, Domain.ColorFlag flag) { }
public override PopDeliveryInfo GetDeliveryInfo(Domain.Shop shop, string popOrderId) { throw new NotImplementedException(); }
public override List <PopGoods> SearchPopGoods(Domain.Shop shop, PopGoodsState state, int pageIndex, int pageSize) { SortedDictionary <string, string> param = new SortedDictionary <string, string>(); param["page_size"] = pageSize.ToString(); param["page"] = (pageIndex + 1).ToString(); if (state != PopGoodsState.NONE) { param["is_onsale"] = state == PopGoodsState.ONSALE ? "1" : "0"; } var ret = this.Invoke <PddRspGoods>(shop, "pdd.goods.list.get", param); List <PopGoods> goods = new List <PopGoods>(); if (ret.goods_list == null || ret.goods_list == null) { return(goods); } foreach (var g in ret.goods_list) { var pg = new PopGoods { Id = g.goods_id, Title = g.goods_name, AddTime = "", UpdateTime = "", SaleNum = 0, Images = new string[] { g.thumb_url }, CatId = "", Code = "", State = g.is_onsale == "1" ? PopGoodsState.ONSALE : PopGoodsState.NOTSALE, Type = "所有", }; if (g.sku_list == null || g.sku_list.Length < 1) { continue; } foreach (var sku in g.sku_list) { if (sku.is_sku_onsale == 0) { continue; } pg.Code = sku.outer_goods_id; var psku = new PopGoodsSku { Id = sku.sku_id, Code = sku.outer_id, Stock = sku.sku_quantity.ToString(), Status = PopGoodsState.ONSALE, Price = "0", }; string[] ss = sku.spec.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); psku.Color = ss[0]; psku.Size = ss[1]; pg.Skus.Add(psku); } goods.Add(pg); } return(goods); }
public override OrderDownload GetOrder(Domain.Shop shop, string popOrderId) { OrderDownload od = new OrderDownload(); try { SortedDictionary <string, string> para = new SortedDictionary <string, string>(); para["order_sn"] = popOrderId; var rsp = this.Invoke <PddRspGetOrder>(shop, "pdd.order.information.get", para, 2); var o = rsp; DateTime minTime = new DateTime(1970, 01, 01); var order = new Domain.Order { CloseOperator = "", CloseTime = minTime, CreateOperator = "", CreateTime = DateTime.Parse(o.created_time), CreateType = Domain.OrderCreateType.DOWNLOAD, DeliveryCompany = GetDeliveryCompany(o.logistics_id), DeliveryNumber = o.tracking_number, DeliveryOperator = "", DeliveryTime = minTime, DeliveryMoney = 0, Id = 0, PopDeliveryTime = DateTime.MinValue, OrderGoodss = new List <Domain.OrderGoods>(), ParseResult = false, PopBuyerComment = "", PopBuyerId = "", PopBuyerPayMoney = float.Parse(o.pay_amount), PopCodNumber = "", PopCodSevFee = 0, PopFlag = Domain.ColorFlag.UN_LABEL, PopOrderId = o.order_sn, PopOrderTotalMoney = float.Parse(o.goods_amount) + float.Parse(o.postage ?? "0"), PopPayTime = DateTime.Parse(o.confirm_time ?? "1970-01-01 00:00:01"), PopPayType = Domain.PopPayType.ONLINE, PopSellerComment = o.remark, PopSellerGetMoney = float.Parse(o.goods_amount) + float.Parse(o.postage ?? "") - float.Parse(o.seller_discount ?? "0") - float.Parse(o.capital_free_discount ?? "0"), PopState = "", PopType = Domain.PopType.PINGDUODUO, PrintOperator = "", PrintTime = minTime, ReceiverAddress = o.address, ReceiverMobile = o.receiver_phone, ReceiverName = o.receiver_name, ReceiverPhone = "", ShopId = shop.Id, State = Domain.OrderState.NONE, Type = Domain.OrderType.NORMAL, Weight = 0, }; //解析商品 if (o.item_list != null) { foreach (var goods in o.item_list) { var orderGoods = new Domain.OrderGoods { CloseOperator = "", CloseTime = DateTime.MinValue, Color = "", Comment = "", Count = goods.goods_count, Edtion = "", GetedCount = 0, Id = 0, Image = goods.goods_img, Number = goods.outer_id, GoodsId = 0, OrderId = 0, PopInfo = goods.outer_id + " " + goods.goods_spec, PopOrderSubId = "", PopPrice = goods.goods_price, PopUrl = goods.goods_id, Price = 0, Size = "", State = Domain.OrderState.NONE, StockOperator = "", StockTime = DateTime.MinValue, Vendor = "", Weight = 0, Shipper = "" }; //拼多以 ‘,’号分开,前面为颜色,后面为尺码 string[] stocks = goods.goods_spec.Split(new char[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries); if (stocks.Length == 2) { orderGoods.Color = stocks[0]; orderGoods.Size = stocks[1]; } order.OrderGoodss.Add(orderGoods); } } //获取订单状态 var os = ConvertToOrderState(popOrderId, new PddRspGetOrderStateOrder { orderSn = popOrderId, order_status = o.order_status, refund_status = o.refund_status }); order.State = os; order.OrderGoodss[0].State = os; od.Order = order; } catch (Exception e) { od.Error = new OrderDownloadError(shop.Id, popOrderId, "", e.Message, e.StackTrace); } return(od); }