Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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]);
        }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
 public override void ModifyComment(Domain.Shop shop, string popOrderId, string comment, Domain.ColorFlag flag)
 {
 }
Exemplo n.º 7
0
 public override PopDeliveryInfo GetDeliveryInfo(Domain.Shop shop, string popOrderId)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
        }