public void GetTradeInfo() { string appKey = "3259943"; string memberId = "b2b-2926677533915d6"; long orderId = 300773518252256809; var result = tradeManager.GetTradeInfor(appKey, memberId, orderId); Assert.NotNull(result); }
/// <summary> /// Background job will execute this method for process the event when order pay. /// </summary> /// <param name="args">Arguments.</param> public override void Execute(MessageDto args) { long msgId = args.Id; string memberId = args.UserInfo; string serviceCode = "ALIBABA_ORDER_PAY"; long orderId = long.Parse(args.Data.OrderId); var msgEntity = alibabaMessageRepository.Get(msgId); msgEntity.Status = (int)CallbackMessageStatus.Inprocess; alibabaMessageRepository.Update(msgEntity); try { DataSyncService dataSyncService; dataSyncService = dataSyncServiceRepository.GetDataServiceInforByCodeAndMemberId(serviceCode, memberId).Result; // Step 1: get the order from alibaba. AlibabaOpenplatformTradeModelTradeInfo tradeInfo; // Step 2: Save trade info to callback message business data field. if (msgEntity.Data == null) { tradeInfo = tradeManager.GetTradeInfor(dataSyncService.AccessTokenInfo.App_Key, memberId, orderId); msgEntity.Data = JsonConvert.SerializeObject(tradeInfo); // Save as JSON msgEntity.ErpId = tradeInfo.getBaseInfo().getIdOfStr(); // Save order id to ERP# alibabaMessageRepository.Update(msgEntity); Console.WriteLine("Got order from alibaba."); Console.WriteLine(msgEntity.Data); } else { // TODO: 这个转换可能不行 tradeInfo = JsonConvert.DeserializeObject <AlibabaOpenplatformTradeModelTradeInfo>(msgEntity.Data); } // Step 3: Check the product filter. bool isMatched = false; // Step 3.1: Get product filters // 没有详细去研究为什么下面这种写法会报错,只能用后面的写法先代替了。 //var filters = alibabaProductCategoryRepository.GetAll() //.Where(t => t.IsActive) //.Where(t => t.TenantId == dataSyncService.TenantId) //.ToList(); var filters = alibabaProductCategoryRepository.GetAllList(t => t.IsActive && t.TenantId == dataSyncService.TenantId); if (filters == null || filters.Count == 0) { Console.WriteLine("Tenant's product category is empty."); isMatched = true; // None filter mean all data will be send to salesforce. } else { // Get sku in query as List<string> var sku_query = from f in filters select f.Code ; var sku = sku_query.ToList(); foreach (var prd in tradeInfo.getProductItems()) { // the category# of product in this order was matched. if (sku.Contains(prd.getProductCargoNumber())) { isMatched = true; break; } } } // Step 4: If matched then send it to salesforce. if (isMatched) { try { string salesforceUri = dataSyncService.GetData <string>("SalesforceUri"); if (string.IsNullOrEmpty(salesforceUri)) { throw new ArgumentException("Data sync service config error. 'SalesforceUri' field not found.", "SalesforceUri"); } // Step 5: Generate the JSON that will post to salesforce. OrderDto order = new OrderDto(tradeInfo); string orderJson = JsonConvert.SerializeObject(order); Console.WriteLine("Generate salesforce order:"); Console.WriteLine(orderJson); string resp = orderManager.Create(salesforceUri, order); // Call API and cretae order in salesforce. // 2019-06-03 Salesforce change it's interface. // Response change to JSON. such as: { "status" : "200", "message" : "success" } if (false == string.IsNullOrEmpty(resp)) { JObject responseJson = JObject.Parse(resp); var status = responseJson["status"].ToString(); var message = responseJson["message"].ToString(); Console.WriteLine("Salesforce response: " + resp); // Save the http status code to entitie's code field. msgEntity.Code = status; if (status == "200") // return success { msgEntity.Status = (int)CallbackMessageStatus.Success; // Set status as success msgEntity.Comment = orderJson; } else if (status == "201") { msgEntity.Status = (int)CallbackMessageStatus.Reduplicative; // Set status as reduplicative. msgEntity.Comment = orderJson; } else // return failed { msgEntity.Comment = "Salesforce Interface: " + message + "\r\n" + orderJson; // Write response for error detail info. msgEntity.Status = (int)CallbackMessageStatus.InterfaceThrowError; // Salesforce throw error } } else { // Nothing return from salesforce. msgEntity.Comment = "HTTP response body is none."; msgEntity.Status = (int)CallbackMessageStatus.InterfaceThrowError; } } catch (Exception err) { msgEntity.Status = (int)CallbackMessageStatus.Failed; // Set status as failed. msgEntity.RetryCount++; // Get error message Console.WriteLine(err.ToString()); this.Logger.Error(err.Message, err); msgEntity.Comment = err.ToString(); } } else { Console.WriteLine("Ignored"); msgEntity.Comment = "None product were matched, so this order not need send to salesforce."; msgEntity.Status = (int)CallbackMessageStatus.Ignored; } } catch (Exception ex) { this.Logger.Error(ex.Message, ex); Console.WriteLine(ex.ToString()); msgEntity.Status = (int)CallbackMessageStatus.Failed; msgEntity.Comment = ex.ToString(); } // Update message status as last. alibabaMessageRepository.Update(msgEntity); }