Exemple #1
0
        /// <summary>
        /// 发送数据,取得并解析数据(泛型  异步)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="requestPolicy"></param>
        /// <param name="data"></param>
        /// <param name="sendType"></param>
        /// <param name="timeOut"></param>
        /// <param name="checkValidationResult"></param>
        /// <param name="jsonSetting"></param>
        /// <returns></returns>
        public static async Task <T> SendAsync <T>(
            Com.Alibaba.Entities.Request.RequestPolicy requestPolicy,
            object data,
            CommonJsonSendType sendType = CommonJsonSendType.POST,
            int timeOut = Config.TIME_OUT,
            bool checkValidationResult = false,
            JsonSetting jsonSetting    = null)
        {
            var accessToken      = requestPolicy.AccessToken;
            var appendixDictPara = new Dictionary <string, object>();
            var url = new StringBuilder();

            url.Append(requestPolicy.SessionType == SessionType.Sandbox ? Com.Alibaba.Config.RequestUriRootSandbox.UriSchemaFill(requestPolicy.RequestSchema) : Com.Alibaba.Config.RequestUriRoot.UriSchemaFill(requestPolicy.RequestSchema));
            url.Append($"/{requestPolicy.ApiRoot}/{requestPolicy.Protocol.ToString()}/{requestPolicy.ApiVersion}/{requestPolicy.ApiNamespace}/{requestPolicy.ApiName}/{requestPolicy.ClientId}");

            var urlPath = $"{requestPolicy.Protocol.ToString()}/{requestPolicy.ApiVersion}/{requestPolicy.ApiNamespace}/{requestPolicy.ApiName}/{requestPolicy.ClientId}";

            if (requestPolicy.ValidateSignature)
            {
                var dictPara = ArrangeParameter(data);

                if (!string.IsNullOrEmpty(accessToken))
                {
                    dictPara.Add("access_token", accessToken);
                }

                byte[] sign    = Com.Alibaba.Helpers.SignatureHelper.HmacSha1(urlPath, dictPara, requestPolicy.ClientSecret);
                String signStr = Com.Alibaba.Helpers.SignatureHelper.ToHex(sign);

                appendixDictPara.Add("_aop_signature", signStr);
            }

            return(await Com.Alibaba.CommonAPIs.CommonJsonSend.SendAsync <T>(accessToken, url.ToString(), data, sendType, timeOut, checkValidationResult, jsonSetting, appendixDictPara));
        }
Exemple #2
0
        /// <summary>
        /// 异步方法】使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。
        /// 使用此方法之前必须使用AccessTokenContainer.Register(_clientId, _clientSecret);
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun"></param>
        /// <param name="requestPolicy"></param>
        /// <param name="retryIfFaild"></param>
        /// <returns></returns>
        public static async Task <T> TryCommonApiAsync <T>(
            Func <Com.Alibaba.Entities.Request.RequestPolicy, Task <T> > fun,
            Com.Alibaba.Entities.Request.RequestPolicy requestPolicy,
            bool retryIfFaild = true) where T : AliJsonResult
        {
            if (string.IsNullOrEmpty(requestPolicy.ClientId))
            {
                requestPolicy.ClientId = AccessTokenContainer.GetFirstOrDefaultClientId();
                if (string.IsNullOrEmpty(requestPolicy.ClientId))
                {
                    throw new UnRegisterClientIdException(null, "尚无已经注册的ClientId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
            }
            else
            {
                if (!AccessTokenContainer.CheckRegistered(requestPolicy.ClientId))
                {
                    throw new UnRegisterClientIdException(requestPolicy.ClientId,
                                                          string.Format("此clientId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!",
                                                                        requestPolicy.ClientId));
                }
            }



            Task <T> result = null;

            try
            {
                if (string.IsNullOrEmpty(requestPolicy.AccessToken))
                {
                    var accessTokenResult = await AccessTokenContainer.GetAccessTokenResultAsync(requestPolicy.ClientId, false, requestPolicy.SessionType, requestPolicy.RequestSchema);

                    requestPolicy.AccessToken = accessTokenResult.access_token;
                }
                result = fun(requestPolicy);
            }
            catch (ErrorJsonResultException ex)
            {
                if (retryIfFaild &&
                    !string.IsNullOrEmpty(requestPolicy.ClientId) &&
                    (ex.JsonResult.code > 0 || !string.IsNullOrEmpty(ex.JsonResult.errorCode)))
                {
                    //尝试重新验证
                    //var accessTokenResult = AccessTokenContainer.GetAccessTokenResultAsync(clientId, true, sessionType);
                    var accessTokenResult = AccessTokenContainer.RefreshAccessTokenResultAsync(requestPolicy.ClientId, requestPolicy.SessionType, requestPolicy.RequestSchema);
                    //强制获取并刷新最新的AccessToken
                    requestPolicy.AccessToken = accessTokenResult.Result.access_token;
                    result = TryCommonApiAsync(fun, requestPolicy, false);
                }
                else
                {
                    throw;
                }
            }

            return(await result);
        }
Exemple #3
0
 /// <summary>
 /// 订单列表查看(卖家视角)
 /// </summary>
 /// <param name="requestPolicy"></param>
 /// <param name="reqModelOrderListOnSellerView"></param>
 /// <param name="timeOut"></param>
 /// <returns></returns>
 public static Com.Alibaba.Trade.Entities.OrderListForSellerContainer OrderListOnSellerViewRetrieve(
     Com.Alibaba.Entities.Request.RequestPolicy requestPolicy,
     Com.Alibaba.Trade.Entities.Request.ReqModelOrderListForSeller reqModelOrderListOnSellerView,
     int timeOut = Config.TIME_OUT)
 {
     return(ApiHandlerWrapper.TryCommonApi(reqPoli =>
     {
         var result = CommonJsonSend.Send <Com.Alibaba.Trade.Entities.OrderListForSellerContainer>(requestPolicy, reqModelOrderListOnSellerView, timeOut: timeOut);
         return result;
     }, requestPolicy: requestPolicy));
 }
Exemple #4
0
 /// <summary>
 /// 订单详情查看(卖家视角)
 /// </summary>
 /// <param name="requestPolicy"></param>
 /// <param name="reqModelOrderDetailOnSellerView"></param>
 /// <param name="timeOut"></param>
 /// <returns></returns>
 public static async Task <Com.Alibaba.Trade.Entities.OrderDetailForSellerContainer> OrderDetailOnSellerViewAsyncRetrieve(
     Com.Alibaba.Entities.Request.RequestPolicy requestPolicy,
     Com.Alibaba.Trade.Entities.Request.ReqModelOrderDetailForSeller reqModelOrderDetailOnSellerView,
     int timeOut = Config.TIME_OUT)
 {
     return(await ApiHandlerWrapper.TryCommonApiAsync(reqPoli =>
     {
         var result = CommonJsonSend.SendAsync <Com.Alibaba.Trade.Entities.OrderDetailForSellerContainer>(requestPolicy, reqModelOrderDetailOnSellerView, timeOut: timeOut);
         return result;
     }, requestPolicy : requestPolicy));
 }
Exemple #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestPolicy"></param>
        /// <param name="reqModelOrderDetailOnSellerView"></param>
        /// <param name="timeOut"></param>
        /// <returns></returns>
        public static Dictionary <string, object> OrderDetailOnSellerViewRetrieveRowString(
            Com.Alibaba.Entities.Request.RequestPolicy requestPolicy,
            Com.Alibaba.Trade.Entities.Request.ReqModelOrderDetailForSeller reqModelOrderDetailOnSellerView,
            int timeOut = Config.TIME_OUT)
        {
            var retObject = ApiHandlerWrapper.TryCommonApi(reqPoli =>
            {
                var result = CommonJsonSend.Send <Com.Alibaba.Entities.Response.EntityBase>(requestPolicy, reqModelOrderDetailOnSellerView, timeOut: timeOut);
                return(result);
            }, requestPolicy: requestPolicy);

            dynamic coreObject = retObject.ReturnObject;

            var retDict = new Dictionary <string, object>(coreObject._dictionary);

            return(retDict);
        }
Exemple #6
0
        public void TestGetOrderListOnSellerView()
        {
            try
            {
                var requestPolicy = new Com.Alibaba.Entities.Request.RequestPolicy
                {
                    ClientId      = "*****", //
                    ClientSecret  = "*****", //
                    AccessToken   = "c4cdb98e-8621-4fa5-80a4-2dbc7bd7c0e6",
                    ApiRoot       = "openapi",
                    ApiVersion    = "1",
                    ApiNamespace  = "com.alibaba.trade",
                    ApiName       = "alibaba.trade.getSellerOrderList",
                    Protocol      = Com.Alibaba.Protocol.param2,
                    SessionType   = SessionType.Prod,
                    RequestSchema = UriSchema.https
                };

                Com.Alibaba.Trade.Containers.AccessTokenContainer.Register(requestPolicy.ClientId, requestPolicy.ClientSecret, requestPolicy.AccessToken, 36000, 36000, "41227eb4-520e-48e0-a432-7d17c870bf6c", "http://localhost:12305");

                var reqModel = new Com.Alibaba.Trade.Entities.Request.ReqModelOrderListForSeller();

                var result = Com.Alibaba.Trade.TradeAPIs.OrderApi.OrderListOnSellerViewRetrieveRowString(requestPolicy, reqModel);

                //var jsonResult = Newtonsoft.Json.JsonConvert.SerializeObject(result);

                //dynamic o = result.ReturnObject;

                //var s = new Dictionary<string, object>(o._dictionary);

                foreach (var i in result)
                {
                    Console.WriteLine($"  {i.Key}  =>  {i.Value}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
Exemple #7
0
        public void TestGetOrderOnSellerView()
        {
            try
            {
                var requestPolicy = new Com.Alibaba.Entities.Request.RequestPolicy
                {
                    ClientId      = "*****", //
                    ClientSecret  = "*****", //
                    AccessToken   = "c4cdb98e-8621-4fa5-80a4-2dbc7bd7c0e6",
                    ApiRoot       = "openapi",
                    ApiVersion    = "1",
                    ApiNamespace  = "com.alibaba.trade",
                    ApiName       = "alibaba.trade.get.sellerView",
                    Protocol      = Com.Alibaba.Protocol.param2,
                    SessionType   = SessionType.Prod,
                    RequestSchema = UriSchema.https
                };

                Com.Alibaba.Trade.Containers.AccessTokenContainer.Register(requestPolicy.ClientId, requestPolicy.ClientSecret, requestPolicy.AccessToken, 36000, 36000, "41227eb4-520e-48e0-a432-7d17c870bf6c", "http://localhost:12305");

                var reqModel = new Com.Alibaba.Trade.Entities.Request.ReqModelOrderDetailForSeller();

                reqModel.orderId = 159310337253103128L;

                var result = Com.Alibaba.Trade.TradeAPIs.OrderApi.OrderDetailOnSellerViewRetrieveRowString(requestPolicy, reqModel);

                foreach (var i in result)
                {
                    Console.WriteLine($"  {i.Key}  =>  {i.Value}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
Exemple #8
0
        /// <summary>
        /// 订单列表查看(卖家视角)
        /// </summary>
        /// <param name="clientId"></param>
        /// <param name="clientSecret"></param>
        /// <param name="accessToken"></param>
        /// <param name="reqModelOrderListOnSellerView"></param>
        /// <param name="apiRoot"></param>
        /// <param name="apiVersion"></param>
        /// <param name="apiNamespace"></param>
        /// <param name="apiName"></param>
        /// <param name="protocol"></param>
        /// <param name="sessionType"></param>
        /// <param name="requestSchema"></param>
        /// <param name="validateSignature"></param>
        /// <param name="timeOut"></param>
        /// <returns></returns>
        public static Com.Alibaba.Trade.Entities.OrderListForSellerContainer OrderListOnSellerViewRetrieve(
            string clientId,
            string clientSecret,
            string accessToken,
            Com.Alibaba.Trade.Entities.Request.ReqModelOrderListForSeller reqModelOrderListOnSellerView,
            string apiRoot                = "openapi",
            string apiVersion             = "1",
            string apiNamespace           = "com.alibaba.trade",
            string apiName                = "alibaba.trade.getSellerOrderList",
            Com.Alibaba.Protocol protocol = Com.Alibaba.Protocol.param2,
            SessionType sessionType       = SessionType.Prod,
            UriSchema requestSchema       = UriSchema.https,
            bool validateSignature        = true,
            int timeOut = Config.TIME_OUT)
        {
            var requestPolicy = new Com.Alibaba.Entities.Request.RequestPolicy
            {
                ClientId          = clientId,
                ClientSecret      = clientSecret,
                AccessToken       = accessToken,
                ApiRoot           = apiRoot,
                ApiVersion        = apiVersion,
                ApiNamespace      = apiNamespace,
                ApiName           = apiName,
                Protocol          = protocol,
                SessionType       = sessionType,
                RequestSchema     = requestSchema,
                ValidateSignature = validateSignature
            };

            return(ApiHandlerWrapper.TryCommonApi(token =>
            {
                var result = CommonJsonSend.Send <Com.Alibaba.Trade.Entities.OrderListForSellerContainer>(requestPolicy, reqModelOrderListOnSellerView, timeOut: timeOut);
                return result;
            }, requestPolicy: requestPolicy));
        }