/// <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)); }
/// <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); }
/// <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)); }
/// <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)); }
/// <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); }
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()); } }
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()); } }
/// <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)); }