public void WhenSettingPayloadShouldThenReturnExpected() { var batchMessage = new BatchMessage(12, new Uri("http://post.com"), "PAYLOAD"); Assert.Equal("PAYLOAD", batchMessage.Payload); Assert.Equal(12, batchMessage.ReynaId); }
public void WhenCallingToJsonShouldReturnExpected() { var payload = "{\"Version Incremental\":\"20150514.093204\",\"User\":\"user\",\"Brand\":\"os\",\"device\":\"device\",\"Network Operator Name\":\"unknown\",\"Manufacturer\":\"MM\",\"updated\":1448534970738,\"list\":[{\"name\":\"System\",\"version\":\"4.1.1\",\"flag\":true},{\"name\":\"backupcon\",\"version\":\"4.1.1\",\"flag\":false}],\"Version Release\":\"4.1.1\",\"MAC\":\"MAC\"}"; var batchMessage = new BatchMessage(12, new Uri("http://post.com"), payload); var expected = "{\"url\":\"http://post.com/\", \"reynaId\":12, \"payload\":{\"Version Incremental\":\"20150514.093204\",\"User\":\"user\",\"Brand\":\"os\",\"device\":\"device\",\"Network Operator Name\":\"unknown\",\"Manufacturer\":\"MM\",\"updated\":1448534970738,\"list\":[{\"name\":\"System\",\"version\":\"4.1.1\",\"flag\":true},{\"name\":\"backupcon\",\"version\":\"4.1.1\",\"flag\":false}],\"Version Release\":\"4.1.1\",\"MAC\":\"MAC\"}}"; var actual = batchMessage.ToJson(); Assert.Equal(expected, actual); }
public void WhenSettingUrlShouldThenReturnExpected() { var builder = new UriBuilder(); builder.Host = "host"; builder.Port = 8080; builder.Path = "path"; var batchMessage = new BatchMessage(1, builder.Uri, "payload"); Assert.Equal("http://host:8080/path", batchMessage.Url.ToString()); }
private void Save(List <Message> messages) { Common.ScheduledSms scheduledSms; List <string> lstReceivers; BatchMessage batchMessage; foreach (Message msg in messages) { batchMessage = new BatchMessage(); batchMessage = (BatchMessage)msg.Body; scheduledSms = new Common.ScheduledSms(); lstReceivers = new List <string>(); LogController <ServiceLogs> .LogInFile(ServiceLogs.APIProcessRequest, string.Format("\r\n-------------------------------------------------------------------------")); scheduledSms.ScheduledSmsGuid = batchMessage.Guid; scheduledSms.PrivateNumberGuid = batchMessage.PrivateNumberGuid; scheduledSms.SmsText = batchMessage.SmsText; scheduledSms.SmsLen = batchMessage.SmsLen; scheduledSms.PresentType = batchMessage.IsFlash ? (int)Messageclass.Flash : (int)Messageclass.Normal; scheduledSms.Encoding = batchMessage.IsUnicode ? (int)Encoding.Utf8 : (int)Encoding.Default; scheduledSms.UserGuid = batchMessage.UserGuid; scheduledSms.Status = (int)ScheduledSmsStatus.Stored; scheduledSms.DateTimeFuture = DateTime.Now; scheduledSms.TypeSend = batchMessage.SmsSendType; LogController <ServiceLogs> .LogInFile(ServiceLogs.APIProcessRequest, string.Format(@"batchMessage.ServiceId : {0},ScheduledSmsGuid : {1},PrivateNumberGuid: {2}", batchMessage.ServiceId, scheduledSms.ScheduledSmsGuid, scheduledSms.PrivateNumberGuid)); if (batchMessage.ServiceId == null) { LogController <ServiceLogs> .LogInFile(ServiceLogs.APIProcessRequest, string.Format("batchMessage.sendernumber : {0},batchMessage.UserGuid:{1}", batchMessage.SenderNumber, batchMessage.UserGuid)); scheduledSms.PrivateNumberGuid = Facade.PrivateNumber.GetUserNumberGuid(batchMessage.SenderNumber, batchMessage.UserGuid); LogController <ServiceLogs> .LogInFile(ServiceLogs.APIProcessRequest, string.Format("scheduledSms.PrivateNumberGuid : {0} SendType : {1}", scheduledSms.PrivateNumberGuid, (SmsSendType)batchMessage.SmsSendType)); if (batchMessage.SmsSendType == (int)SmsSendType.SendSmsFromAPI) { lstReceivers = batchMessage.Receivers.Select <InProgressSms, string>(receiver => receiver.RecipientNumber).DefaultIfEmpty().ToList(); if (Facade.ScheduledSms.InsertSms(scheduledSms, lstReceivers)) { ReceiveMessageFromQueue(msg.Id); } } else if (batchMessage.SmsSendType == (int)SmsSendType.SendGroupSmsFromAPI) { scheduledSms.ReferenceGuid = string.Join(",", batchMessage.ReferenceGuid); if (Facade.ScheduledSms.InsertGroupSms(scheduledSms)) { ReceiveMessageFromQueue(msg.Id); } } } else { if (batchMessage.Receivers.Count > 0) { lstReceivers = batchMessage.Receivers.Select <InProgressSms, string>(receiver => receiver.RecipientNumber).ToList(); if (Facade.ScheduledSms.InsertSms(scheduledSms, lstReceivers)) { ReceiveMessageFromQueue(msg.Id); } } else { scheduledSms.ReferenceGuid = batchMessage.ReferenceGuid.ToString(); scheduledSms.TypeSend = (int)SmsSendType.SendGroupSmsFromAPI; if (Facade.ScheduledSms.InsertGroupSms(scheduledSms)) { ReceiveMessageFromQueue(msg.Id); } } } } }
// IBTBatchCallBack public void BatchComplete(Int32 hrStatus, Int16 nOpCount, BTBatchOperationStatus[] pOperationStatus, System.Object vCallbackCookie) { //BT.Trace.Tracer.TraceMessage(BT.TraceLevel.SegmentLifeTime, "CoreAdapter: Entering Batch.BatchComplete"); if (0 != hrStatus) { //BT.Trace.Tracer.TraceMessage(BT.TraceLevel.Error, "CoreAdapter: Batch.BatchComplete hrStatus: {0}", hrStatus); } this.hrStatus = hrStatus; StartBatchComplete(hrStatus); // nothing at all failed in this batch so we are done if (hrStatus < 0 || this.makeSuccessCall) { //BT.Trace.Tracer.TraceMessage(BT.TraceLevel.Info, "CoreAdapter: Batch.BatchComplete (hrStatus < 0 || this.makeSuccessCall)"); StartProcessFailures(); foreach (BTBatchOperationStatus status in pOperationStatus) { // is this the correct behavior? if (status.Status >= 0 && !this.makeSuccessCall) { continue; } switch (status.OperationType) { case BatchOperationType.Submit: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = null; if (submitIsForSubmitResponse) { batchMessage = (BatchMessage)this.submitResponseMessageArray[i]; } else { batchMessage = (BatchMessage)this.submitArray[i]; } if (status.MessageStatus[i] < 0) { SubmitFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } else if (this.makeSuccessCall) { SubmitSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } } break; } case BatchOperationType.Delete: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.deleteArray[i]; if (status.MessageStatus[i] < 0) { DeleteFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } else if (this.makeSuccessCall) { DeleteSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } } break; } case BatchOperationType.Resubmit: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.resubmitArray[i]; if (status.MessageStatus[i] < 0) { ResubmitFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } else if (this.makeSuccessCall) { ResubmitSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } } break; } case BatchOperationType.MoveToSuspendQ: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.moveToSuspendQArray[i]; if (status.MessageStatus[i] < 0) { MoveToSuspendQFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } else if (this.makeSuccessCall) { MoveToSuspendQSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } } break; } case BatchOperationType.MoveToNextTransport: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.moveToNextTransportArray[i]; if (status.MessageStatus[i] < 0) { MoveToNextTransportFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } else if (this.makeSuccessCall) { MoveToNextTransportSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } } break; } case BatchOperationType.SubmitRequest: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.submitRequestArray[i]; if (status.MessageStatus[i] < 0) { SubmitRequestFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } else if (this.makeSuccessCall) { SubmitRequestSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } } break; } case BatchOperationType.CancelRequestForResponse: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.cancelResponseMessageArray[i]; if (status.MessageStatus[i] < 0) { CancelResponseMessageFailure(batchMessage.correlationToken, status.MessageStatus[i], batchMessage.userData); } else if (this.makeSuccessCall) { CancelResponseMessageSuccess(batchMessage.correlationToken, status.MessageStatus[i], batchMessage.userData); } } break; } } // end switch } // end foreach EndProcessFailures(); } // end if EndBatchComplete(); //BT.Trace.Tracer.TraceMessage(BT.TraceLevel.SegmentLifeTime, "CoreAdapter: Leaving Batch.BatchComplete"); }
public void SendSms(BatchMessage batchMessage) { try { string logFile = string.Format(@"{0}\{1}", ConfigurationManager.GetSetting("RecipientAddress"), batchMessage.Id); string sendStatus = "", batchId = "", amount = "", chargingAmount = ""; Cls_SMS.ClsSend sms_Batch = new Cls_SMS.ClsSend(); ArrayList ret2 = new ArrayList(); try { LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, " /" + batchMessage.Guid.ToString() + " / " + " receiver Count : " + batchMessage.Receivers.Select(reciever => reciever.RecipientNumber).Count() + " SenderNumber : " + batchMessage.SenderNumber + " Username : "******" Password : "******" SendLink : " + batchMessage.SendLink + " Domain : " + batchMessage.Domain + " IsFlash : " + batchMessage.IsFlash + " SmsText : " + batchMessage.SmsText); ret2 = sms_Batch.SendSMS_Batch_Full(batchMessage.SmsText, batchMessage.Receivers.Select(reciever => reciever.RecipientNumber).ToArray(), batchMessage.SenderNumber, batchMessage.Username, batchMessage.Password, batchMessage.SendLink, batchMessage.Domain, batchMessage.IsFlash, ref sendStatus, ref batchId, ref amount, ref chargingAmount); LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, " /" + batchMessage.Guid.ToString() + " / " + " ret2 Count : " + ret2.Count + " sendStatus : " + sendStatus + " batchId : " + batchId + " amount : " + amount + "\\ chargingAmount : " + chargingAmount); try { LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, "Try : 1 | Date : " + DateTime.Now.ToString().Replace(':', '-') + " | Guid : " + batchMessage.Guid.ToString() + " | ret2 Count : " + ret2.Count + " | sendStatus : " + sendStatus + " | batchId : " + batchId + " | amount : " + amount + "| chargingAmount : " + chargingAmount); } catch (Exception ex) { LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, "Error : " + ex.Message); } if (sendStatus.Contains("Uknown Error")) { ret2 = new ArrayList(); sendStatus = ""; batchId = ""; amount = ""; chargingAmount = ""; ret2 = sms_Batch.SendSMS_Batch_Full(batchMessage.SmsText, batchMessage.Receivers.Select(reciever => reciever.RecipientNumber).ToArray(), batchMessage.SenderNumber, batchMessage.Username, batchMessage.Password, batchMessage.SendLink, batchMessage.Domain, batchMessage.IsFlash, ref sendStatus, ref batchId, ref amount, ref chargingAmount); LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, "Try 2 /" + batchMessage.Guid.ToString() + " / " + " ret2 Count : " + ret2.Count + " sendStatus : " + sendStatus + " batchId : " + batchId + " amount : " + amount + "\\ chargingAmount : " + chargingAmount); try { LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, "Try : 2 | Date : " + DateTime.Now.ToString().Replace(':', '-') + " | Guid : " + batchMessage.Guid.ToString() + " | ret2 Count : " + ret2.Count + " | sendStatus : " + sendStatus + " | batchId : " + batchId + " | amount : " + amount + "| chargingAmount : " + chargingAmount); } catch (Exception ex) { LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, "Error : " + ex.Message); } if (sendStatus.Contains("Uknown Error")) { ret2 = new ArrayList(); sendStatus = ""; batchId = ""; amount = ""; chargingAmount = ""; ret2 = sms_Batch.SendSMS_Batch_Full(batchMessage.SmsText, batchMessage.Receivers.Select(reciever => reciever.RecipientNumber).ToArray(), batchMessage.SenderNumber, batchMessage.Username, batchMessage.Password, batchMessage.SendLink, batchMessage.Domain, batchMessage.IsFlash, ref sendStatus, ref batchId, ref amount, ref chargingAmount); LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, "Try 3 /" + batchMessage.Guid.ToString() + " / " + " ret2 Count : " + ret2.Count + " sendStatus : " + sendStatus + " batchId : " + batchId + " amount : " + amount + "\\ chargingAmount : " + chargingAmount); try { LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, "Try : 3 | Date : " + DateTime.Now.ToString().Replace(':', '-') + " | Guid : " + batchMessage.Guid.ToString() + " | ret2 Count : " + ret2.Count + " | sendStatus : " + sendStatus + " | batchId : " + batchId + " | amount : " + amount + "| chargingAmount : " + chargingAmount); } catch (Exception ex) { LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, "Error : " + ex.Message); } } } } catch (Exception ex) { foreach (InProgressSms sms in batchMessage.Receivers) { sms.SendStatus = (int)SendStatus.ErrorInSending; sms.DeliveryStatus = (int)DeliveryStatus.NotSent; sms.SendTryCount += 1; } throw ex; } switch (sendStatus.ToLower()) { case "true": case "check_ok": // foreach (InProgressSms sms in batchMessage.Receivers) // { foreach (InProgressSms sms in batchMessage.Receivers) { sms.ReturnID = batchId.Split('+')[1]; sms.SendStatus = (int)SendStatus.Sent; sms.DeliveryStatus = (int)DeliveryStatus.ReceivedByItc; } for (int i = 0; i < ret2.Count; i++) { CheckErrorSms((Cls_SMS.ClsSend.STC_SMSSend)ret2[i], batchMessage.Receivers.Where(_ => _.RecipientNumber == (ret2[i] as Cls_SMS.ClsSend.STC_SMSSend).DestAddress).FirstOrDefault(), batchId); } // } break; case "false": case "check_error": foreach (InProgressSms sms in batchMessage.Receivers) { sms.ReturnID = batchId.Split('+')[1]; sms.SendStatus = (int)SendStatus.ErrorInSending; sms.DeliveryStatus = (int)DeliveryStatus.ErrorInSending; } for (int i = 0; i < ret2.Count; i++) { CheckErrorSms((Cls_SMS.ClsSend.STC_SMSSend)ret2[i], batchMessage.Receivers.Where(_ => _.RecipientNumber == (ret2[i] as Cls_SMS.ClsSend.STC_SMSSend).DestAddress).FirstOrDefault(), batchId); } break; default: foreach (InProgressSms sms in batchMessage.Receivers) { sms.SendStatus = (int)SendStatus.ErrorInSending; sms.DeliveryStatus = (int)DeliveryStatus.NotSent; sms.SendTryCount += 1; } break; } LogController <ServiceLogs> .LogInFile(logFile, string.Format("Id={0}Guid={1}Sms={2}Receivers={3}{4}", batchMessage.Id, batchMessage.Guid, batchMessage.SmsText, string.Join(";", batchMessage.Receivers.Select <InProgressSms, string>(sms => string.Format("{0}-{1}-{2}", sms.RecipientNumber, sms.ReturnID, batchMessage.PageNo))), Environment.NewLine)); } catch (Exception ex) { LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, string.Format("\r\n-------------------------------------------------------------------------")); LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, string.Format("\r\n{0} : Message : {1}", "send sms method", ex.Message)); LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, string.Format("\r\n{0} : OutboxGuid : {1}", "send sms method", batchMessage.Guid.ToString())); LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, string.Format("\r\n{0} : StackTrace : {1}", "send sms method", ex.StackTrace)); LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabRG, string.Format("\r\n-------------------------------------------------------------------------")); } }
/// <summary> /// 解析 公众号 群发消息 /// </summary> /// <param name="jsonText"></param> /// <param name="encryp"></param> /// <returns></returns> protected List <BatchMessage> _ResolveBatchMessageFromJson(string jsonText, EncryptArgs encryp) { var messages = new List <BatchMessage>(); string biz = encryp.biz; string uin = encryp.uin; string key = encryp.key; var root = JsonConvert.DeserializeObject <MsgRoot>(jsonText); var msgs = HandleHtmlCode(root.list); msgs.ForEach(m => { var message = new BatchMessage() { Author = m.app_msg_ext_info.author, Meaasgeid = m.comm_msg_info.id, SendDate = m.comm_msg_info.datetime.ToString(), Type = m.comm_msg_info.type.ToString() }; switch (message.Type) { case "1": //文字 message.Content = m.comm_msg_info.content; break; case "3": //图片 message.ImageUrl = $"https://mp.weixin.qq.com/mp/getmediadata?biz={biz}&type=img&mode=small&msgid={message.Meaasgeid}&uin=uin&key={key}"; break; case "34": //音频 message.PlayLength = m.voice_msg_ext_info.play_length; message.FileId = m.voice_msg_ext_info.fileid; message.AudioSrc = $"https://mp.weixin.qq.com/mp/getmediadata?biz={biz}&type=voice&msgid={message.Meaasgeid}&uin={uin}&key={key}"; break; case "49": //图文 message.ContentUrl = m.app_msg_ext_info.content_url.Contains("http://mp.weixin.qq.com") ? m.app_msg_ext_info.content_url : "http://mp.weixin.qq.com" + m.app_msg_ext_info.content_url; message.Main = 1; message.Title = m.app_msg_ext_info.title; message.Digest = m.app_msg_ext_info.digest; message.FileId = m.app_msg_ext_info.fileid; message.SourceUrl = m.app_msg_ext_info.source_url; message.Cover = m.app_msg_ext_info.cover; message.Author = m.app_msg_ext_info.author; message.CopyrightStat = m.app_msg_ext_info.copyright_stat.ToString(); messages.Add(message); if (m.app_msg_ext_info.is_multi == 1) //源群发消息文章还包含多个副文章 { var subMsgs = ParseSubArticle(m.app_msg_ext_info.multi_app_msg_item_list); subMsgs.ForEach(subMsg => subMsg.SendDate = message.SendDate); messages.AddRange(subMsgs); } break; case "62": //视频 message.CdnVideoId = m.video_msg_ext_info.cdn_videoid; message.Thumb = m.video_msg_ext_info.thumb; message.VideoSrc = $"https://mp.weixin.qq.com/mp/getcdnvideourl?biz={biz}&cdn_videoid={message.CdnVideoId}&thumb={message.Thumb}&uin=&key={key}"; break; } }); // 删除搜狗本身携带的空数据,(type=49以及contentUrl为空的是无效数据) var finalMessages = messages.Where(msg => !(msg.Type == "49" && string.IsNullOrEmpty(msg.ContentUrl))).ToList(); return(finalMessages); }
/// <summary> /// Schedules a batch of SMS messages to be sent at the date time you specify /// </summary> /// <exception cref="IO.Swagger.Client.ApiException">Thrown when fails to make API call</exception> /// <param name="body">Message properties</param> /// <returns>Task of ApiResponse (ScheduledBatchResponse)</returns> public async System.Threading.Tasks.Task <ApiResponse <ScheduledBatchResponse> > ScheduleBatchAsyncWithHttpInfo(BatchMessage body) { // verify the required parameter 'body' is set if (body == null) { throw new ApiException(400, "Missing required parameter 'body' when calling BatchMessagesApi->ScheduleBatch"); } var localVarPath = "/batch/schedule"; var localVarPathParams = new Dictionary <String, String>(); var localVarQueryParams = new List <KeyValuePair <String, String> >(); var localVarHeaderParams = new Dictionary <String, String>(this.Configuration.DefaultHeader); var localVarFormParams = new Dictionary <String, String>(); var localVarFileParams = new Dictionary <String, FileParameter>(); Object localVarPostBody = null; // to determine the Content-Type header String[] localVarHttpContentTypes = new String[] { "application/json" }; String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); // to determine the Accept header String[] localVarHttpHeaderAccepts = new String[] { "application/json;charset=UTF-8" }; String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); if (localVarHttpHeaderAccept != null) { localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); } if (body != null && body.GetType() != typeof(byte[])) { localVarPostBody = this.Configuration.ApiClient.Serialize(body); // http body (model) parameter } else { localVarPostBody = body; // byte array } // authentication (JWT) required if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("Authorization"))) { localVarHeaderParams["Authorization"] = this.Configuration.GetApiKeyWithPrefix("Authorization"); } // make the HTTP request IRestResponse localVarResponse = (IRestResponse)await this.Configuration.ApiClient.CallApiAsync(localVarPath, Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, localVarPathParams, localVarHttpContentType); int localVarStatusCode = (int)localVarResponse.StatusCode; if (ExceptionFactory != null) { Exception exception = ExceptionFactory("ScheduleBatch", localVarResponse); if (exception != null) { throw exception; } } return(new ApiResponse <ScheduledBatchResponse>(localVarStatusCode, localVarResponse.Headers.ToDictionary(x => x.Name, x => string.Join(",", x.Value)), (ScheduledBatchResponse)this.Configuration.ApiClient.Deserialize(localVarResponse, typeof(ScheduledBatchResponse)))); }
public HttpResponseMessage SendViaURL([FromUri] GetSendSmsModel sms) { if (!ModelState.IsValid) { ResponseMessage rm = new ResponseMessage(); rm.IsSuccessful = false; rm.StatusCode = (int)ErrorCode.ValidationNotValid; foreach (ModelState modelState in ModelState.Values) { foreach (ModelError error in modelState.Errors) { rm.Message += string.Format("{0}", error.ErrorMessage); } } throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.ValidationNotValid, rm.Message); } if (sms.ReceiverList.Count == 0) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.ReceiversIsEmpty, Language.GetString("ReceiversIsEmpty")); } if ((200 / sms.SmsLen) < sms.ReceiverList.Count) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.ReceiverCountNotValid, Language.GetString("ReceiverCountNotValid")); } var principal = Thread.CurrentPrincipal; if (principal.Identity.IsAuthenticated) { Common.User userInfo = ((MyPrincipal)principal).UserDetails; BatchMessage batchMessage = new BatchMessage(); batchMessage.UserGuid = userInfo.UserGuid; batchMessage.Guid = sms.BatchId; batchMessage.CheckId = sms.CheckId.ToString(); batchMessage.SmsText = sms.SmsText; batchMessage.SmsLen = sms.SmsLen; batchMessage.SenderNumber = sms.SenderId; batchMessage.PrivateNumberGuid = Facade.PrivateNumber.GetUserNumberGuid(batchMessage.SenderNumber, batchMessage.UserGuid); batchMessage.Receivers = sms.InProgressSmsList; batchMessage.IsUnicode = sms.IsUnicode; batchMessage.IsFlash = sms.IsFlash; batchMessage.ReferenceGuid = null; batchMessage.SmsSendType = (int)SmsSendType.SendSmsFromAPI; if (batchMessage.PrivateNumberGuid == Guid.Empty) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.SenderIsInvalid, Language.GetString("SenderIsInvalid")); } string messageLabel = (batchMessage.SenderNumber == null ? batchMessage.Guid.ToString() : batchMessage.SenderNumber); if (int.Parse(ConfigurationManager.GetSetting("ActiveQ")) == 0) { if (!ManageQueue.SendMessage(Queues.ApiSendMessage, batchMessage, messageLabel)) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.InternalServerError, Language.GetString("InternalServerError")); } } else if (int.Parse(ConfigurationManager.GetSetting("ActiveQ")) == 1) { SaveToDB(batchMessage); } SendSmsResponse sendsms = new SendSmsResponse(); sendsms.IsSuccessful = true; sendsms.BatchId = batchMessage.Guid; return(Request.CreateResponse <SendSmsResponse>(HttpStatusCode.Created, sendsms)); } else { return(Request.CreateResponse(HttpStatusCode.Accepted)); } }
public HttpResponseMessage GetBulkMessages() { MessageQueue queue; BatchMessage batchMessage = new BatchMessage(); BulkSmsModel bulkInfo = new BulkSmsModel(); string queuePath = string.Format(@".\private$\SocialNetworks-bulk"); var principal = Thread.CurrentPrincipal; if (!principal.Identity.IsAuthenticated) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.AccountIsInvalid, Language.GetString("AccountIsInvalid")); } User userInfo = ((MyPrincipal)principal).UserDetails; if (!SecurityManager.HasServicePermission(userInfo.UserGuid, (int)Business.Services.GetBulkMessagesFromAPI)) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.AccessDenied, Language.GetString("AccessDenied")); } if (!MessageQueue.Exists(queuePath)) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.InternalServerError, Language.GetString("InternalServerError")); } queue = new MessageQueue(queuePath); queue.Formatter = new BinaryMessageFormatter(); BulkSmsResponse response = new BulkSmsResponse(); response.IsSuccessful = true; var msgEnumerator = queue.GetMessageEnumerator2(); while (msgEnumerator.MoveNext(new TimeSpan(0, 0, 1))) { using (var msg = msgEnumerator.Current) { msg.Formatter = new BinaryMessageFormatter(); batchMessage = (BatchMessage)msg.Body; bulkInfo.Id = batchMessage.Id; bulkInfo.IsUnicode = batchMessage.IsUnicode; bulkInfo.SmsLen = batchMessage.SmsLen; bulkInfo.SmsText = batchMessage.SmsText; bulkInfo.TotalCount = batchMessage.TotalCount; bulkInfo.Status = SendStatus.IsBeingSent; bulkInfo.Receivers = string.Join(",", batchMessage.Receivers.Where(receiver => !Helper.GetBool(receiver.IsBlackList)).Select(receiver => receiver.RecipientNumber).ToList()); response.BulkInfo = bulkInfo; Parallel.ForEach <InProgressSms>(batchMessage.Receivers, (receiver) => { if (!Helper.GetBool(receiver.IsBlackList)) { receiver.ReturnID = random.Next().ToString(); receiver.SendStatus = (int)SendStatus.Sent; receiver.DeliveryStatus = (int)DeliveryStatus.SentToItc; receiver.SendTryCount += 1; } else { receiver.SendStatus = (int)SendStatus.BlackList; receiver.DeliveryStatus = (int)DeliveryStatus.BlackListTable; receiver.SendTryCount += 1; } }); SqlLibrary.ManageQueue.SendMessage(ConfigurationManager.GetSetting("SentMessageQueue"), batchMessage, string.Format("{0}-{1}", batchMessage.Id, batchMessage.PageNo)); queue.ReceiveById(msg.Id); break; } } return(Request.CreateResponse <BulkSmsResponse>(HttpStatusCode.Accepted, response)); }
/// <summary> /// 解析 公众号 群发消息 /// </summary> /// <param name="text"></param> /// <param name="encryp"></param> /// <returns></returns> protected List <BatchMessage> _ResolveBatchMessageFromJson(string jsonText, EncryptArgs encryp) { List <BatchMessage> messages = new List <BatchMessage>(); string biz = encryp.biz; string uin = encryp.uin; string key = encryp.key; JObject jo = JObject.Parse(jsonText);//把json字符串转化为json对象 JArray msgList = (JArray)jo.GetValue("list"); foreach (JObject msg in msgList) { BatchMessage aMessage = new BatchMessage(); JObject commMsgInfo = (JObject)msg.GetValue("comm_msg_info"); aMessage.Meaasgeid = (int)commMsgInfo.GetValue("id"); aMessage.SendDate = (string)commMsgInfo.GetValue("datetime"); aMessage.Type = (string)commMsgInfo.GetValue("type"); switch (aMessage.Type) { case "1": //文字 aMessage.Content = (string)commMsgInfo.GetValue(""); break; case "3": //图片 aMessage.ImageUrl = "https://mp.weixin.qq.com/mp/getmediadata?__biz=" + biz + "&type=img&mode=small&msgid=" + aMessage.Meaasgeid + "&uin=" + uin + "&key=" + key; break; case "34": //音频 aMessage.PlayLength = (string)msg.SelectToken("voice_msg_ext_info.play_length"); aMessage.FileId = (int)msg.SelectToken("voice_msg_ext_info.fileid"); aMessage.AudioSrc = "https://mp.weixin.qq.com/mp/getmediadata?biz=" + biz + "&type=voice&msgid=" + aMessage.Meaasgeid + "&uin=" + uin + "&key=" + key; break; case "49": //图文 JObject AppMsgExtInfo = (JObject)msg.GetValue("app_msg_ext_info"); string url = (string)AppMsgExtInfo.GetValue("content_url"); if (!String.IsNullOrEmpty(url)) { if (!url.Contains("http://mp.weixin.qq.com")) { url = "http://mp.weixin.qq.com" + url; } } else { url = ""; } aMessage.Main = 1; aMessage.Title = (string)AppMsgExtInfo.GetValue("title"); aMessage.Digest = (string)AppMsgExtInfo.GetValue("digest"); aMessage.FileId = (int)AppMsgExtInfo.GetValue("fileid"); aMessage.ContentUrl = url; aMessage.SourceUrl = (string)AppMsgExtInfo.GetValue("source_url"); aMessage.Cover = (string)AppMsgExtInfo.GetValue("cover"); aMessage.Author = (string)AppMsgExtInfo.GetValue("author"); aMessage.CopyrightStat = (string)AppMsgExtInfo.GetValue("copyright_stat"); messages.Add(aMessage); if ((int)AppMsgExtInfo.GetValue("is_multi") == 1) { JArray multi_app_msg_item_list = (JArray)AppMsgExtInfo.GetValue("multi_app_msg_item_list"); BatchMessage moreMessage = new BatchMessage(); foreach (JObject subMsg in multi_app_msg_item_list) { url = (string)subMsg.GetValue("content_url"); if (!string.IsNullOrEmpty(url)) { if (!url.Contains("http://mp.weixin.qq.com")) { url = "http://mp.weixin.qq.com" + url; } } else { url = ""; } moreMessage.Title = (string)subMsg.GetValue("title"); moreMessage.Digest = (string)subMsg.GetValue("digest"); moreMessage.FileId = (int)subMsg.GetValue("fileid"); moreMessage.ContentUrl = url; moreMessage.SourceUrl = (string)subMsg.GetValue("source_url"); moreMessage.Cover = (string)subMsg.GetValue("cover"); moreMessage.Author = (string)subMsg.GetValue("author"); moreMessage.CopyrightStat = (string)subMsg.GetValue("copyright_stat"); messages.Add(moreMessage); } } continue; case "62": //视频 aMessage.CdnVideoId = (string)msg.SelectToken("video_msg_ext_info.cdn_videoid"); aMessage.Thumb = (string)msg.SelectToken("video_msg_ext_info.thumb"); aMessage.VideoSrc = "https://mp.weixin.qq.com/mp/getcdnvideourl?__biz=" + biz + "&cdn_videoid=" + aMessage.CdnVideoId + "&thumb=" + aMessage.Thumb + "&uin=" + "&key=" + key; break; default: break; } messages.Add(aMessage); } // 删除搜狗本身携带的空数据 List <BatchMessage> FinalMessages = new List <BatchMessage>(); foreach (var m in messages) { if (m.Type == "49" && string.IsNullOrEmpty(m.ContentUrl)) { } else { FinalMessages.Add(m); } } return(FinalMessages); }
public static bool InsertSentMessages(BatchMessage batch) { Business.OutboxNumber outboxNumberController = new Business.OutboxNumber(); DataTable dtMessages = new DataTable(); DataRow row; List <string> lstSaveNumber = new List <string>(); try { dtMessages.Columns.Add("OutboxGuid", typeof(Guid)); dtMessages.Columns.Add("ItemId", typeof(string)); dtMessages.Columns.Add("ToNumber", typeof(string)); dtMessages.Columns.Add("DeliveryStatus", typeof(byte)); dtMessages.Columns.Add("SendStatus", typeof(byte)); dtMessages.Columns.Add("ReturnId", typeof(string)); dtMessages.Columns.Add("CheckId", typeof(string)); dtMessages.Columns.Add("SmsSenderAgentReference", typeof(byte)); foreach (InProgressSms sms in batch.Receivers) { LogController <ServiceLogs> .LogInFile(ServiceLogs.SaveSentMessage, string.Format("mobile:{0},returnId:{1},deliverystatus:{2},tryCount:{3},saveToDatabase:{4},typesend:{5}", sms.RecipientNumber, sms.ReturnID, sms.DeliveryStatus, sms.SendTryCount, sms.SaveToDatabase, batch.SmsSendType)); if (sms.SaveToDatabase) { continue; } if ((sms.DeliveryStatus == (int)DeliveryStatus.NotSent) && batch.SmsSendType != (int)SmsSendType.SendBulkSms && sms.SendTryCount <= 20) { sms.SaveToDatabase = false; continue; } else if ((sms.DeliveryStatus == (int)DeliveryStatus.NotSent) && sms.SendTryCount < batch.MaximumTryCount) { sms.SaveToDatabase = false; continue; } row = dtMessages.NewRow(); row["OutboxGuid"] = batch.Guid; row["ItemId"] = batch.PageNo; row["ToNumber"] = sms.RecipientNumber; row["SendStatus"] = Helper.GetByte((int)sms.SendStatus); row["DeliveryStatus"] = Helper.GetByte((int)sms.DeliveryStatus); row["ReturnId"] = sms.ReturnID; row["CheckId"] = sms.CheckID; row["SmsSenderAgentReference"] = Helper.GetByte((int)batch.SmsSenderAgentReference); sms.SaveToDatabase = true; lstSaveNumber.Add(sms.RecipientNumber); dtMessages.Rows.Add(row); LogController <ServiceLogs> .LogInFile(ServiceLogs.SaveSentMessage, string.Format("mobile:{0},returnId:{1},deliverystatus:{2},tryCount:{3},saveToDatabase:{4},typesend:{5}", sms.RecipientNumber, sms.ReturnID, sms.DeliveryStatus, sms.SendTryCount, sms.SaveToDatabase, batch.SmsSendType)); } if (outboxNumberController.InsertSentMessages(dtMessages)) { batch.Receivers.RemoveAll(sms => sms.SaveToDatabase == true); return(true); } else { foreach (string receiver in lstSaveNumber) { batch.Receivers.Where(sms => sms.RecipientNumber == receiver).FirstOrDefault().SaveToDatabase = false; } return(false); } } catch (Exception ex) { throw ex; } }
public void SendSms(BatchMessage batchMessage) { string logFile = string.Format(@"{0}\{1}", ConfigurationManager.GetSetting("RecipientAddress"), batchMessage.Id); try { Sms batch = new Sms(); batch.CheckId = Helper.GetGuid(batchMessage.CheckId); batch.Receivers = string.Join(",", batchMessage.Receivers.Select(sms => sms.RecipientNumber).ToArray()); batch.SmsText = batchMessage.SmsText; batch.IsFlash = batchMessage.IsFlash; batch.SenderId = batchMessage.SenderNumber; string dataToPost = CreateXML(batch); WebRequest request = WebRequest.Create("http://185.37.53.162:8080/Messages/Send"); request.Method = "POST"; request.ContentType = "text/xml"; byte[] byt = System.Text.Encoding.UTF8.GetBytes(batchMessage.Username + ":" + batchMessage.Password); request.Headers.Add("authorization", "Basic " + Convert.ToBase64String(byt)); Stream stream = request.GetRequestStream(); StreamWriter streamWriter = new StreamWriter(stream); streamWriter.Write(dataToPost); streamWriter.Flush(); streamWriter.Close(); stream.Close(); WebResponse response = request.GetResponse(); Stream responseStream = response.GetResponseStream(); StreamReader objStreamReader = new StreamReader(responseStream); string result = objStreamReader.ReadToEnd(); objStreamReader.Close(); responseStream.Close(); response.Close(); ResponseMessage responseMessage = DeserializeXml(result); foreach (InProgressSms smsItem in batchMessage.Receivers) { CheckErrorSms(responseMessage, smsItem); } LogController <ServiceLogs> .LogInFile(logFile, string.Format("Id={0}batchGuid={1}Sms={2}Receivers={3}{4}", batchMessage.Id, batchMessage.Guid, batchMessage.SmsText, string.Join(";", batchMessage.Receivers.Select <InProgressSms, string>(sms => string.Format("{0}*{1}*{2}{3}", sms.RecipientNumber, sms.ReturnID, batchMessage.PageNo, Environment.NewLine))), Environment.NewLine)); } catch (Exception ex) { foreach (InProgressSms smsItem in batchMessage.Receivers) { CheckErrorSms(null, smsItem); } LogController <ServiceLogs> .LogInFile(ServiceLogs.Arad, string.Format("\r\n-------------------------------------------------------------------------")); LogController <ServiceLogs> .LogInFile(ServiceLogs.Arad, string.Format("\r\n{0} : Message : {1}", "aradWebService.SendSms", ex.Message)); LogController <ServiceLogs> .LogInFile(ServiceLogs.Arad, string.Format("\r\n{0} : SmsSentGuid : {1}", "aradWebService.SendSms", batchMessage.Guid.ToString())); LogController <ServiceLogs> .LogInFile(ServiceLogs.Arad, string.Format("\r\n-------------------------------------------------------------------------")); } }
public void SendSms(BatchMessage batchMessage) { var responseData = string.Empty; string messageIDs = string.Empty; int counter = 0; string logFile = string.Format(@"{0}\{1}", ConfigurationManager.GetSetting("RecipientAddress"), batchMessage.Id); try { responseData = HttpGet(string.Format("{0}?{1}", batchMessage.SendLink, string.Format(parameterPatern, batchMessage.Username, batchMessage.Password, batchMessage.SenderNumber, string.Join(";", batchMessage.Receivers.Select(receiver => receiver.RecipientNumber)), HttpUtility.UrlEncode(batchMessage.SmsText), batchMessage.IsUnicode))); LogController <ServiceLogs> .LogInFile(logFile, string.Format("responseData={0}", responseData)); if (responseData.StartsWith("Send OK.")) { messageIDs = XDocument.Parse(responseData.Split('.')[1]).Element("ReturnIDs").Value; List <string> lstMessageIDs = messageIDs.Trim().Split(';').ToList(); foreach (InProgressSms sms in batchMessage.Receivers) { sms.ReturnID = lstMessageIDs[counter]; sms.DeliveryStatus = (int)DeliveryStatus.SentToItc; sms.DeliveryGetTime = DateTime.Now.AddMinutes(5); sms.SendTryCount += 1; if (lstMessageIDs[counter] == "-1") { sms.SendStatus = (int)SendStatus.BlackList; } else if (!string.IsNullOrEmpty(sms.ReturnID)) { sms.SendStatus = (int)SendStatus.Sent; } counter++; } } else { string responseMessage = responseData.StartsWith("<message>") ? XElement.Parse(responseData).Value : responseData; foreach (InProgressSms smsItem in batchMessage.Receivers) { CheckErrorSms(responseMessage, smsItem); } } LogController <ServiceLogs> .LogInFile(logFile, string.Format("Id={0}Guid={1}Sms={2}Receivers={3}{4}", batchMessage.Id, batchMessage.Guid, batchMessage.SmsText, string.Join(";", batchMessage.Receivers.Select <InProgressSms, string>(sms => string.Format("{0}*{1}*{2}{3}", sms.RecipientNumber, sms.ReturnID, batchMessage.PageNo, Environment.NewLine))), Environment.NewLine)); } catch (Exception ex) { LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabPG, string.Format("\r\n-------------------------------------------------------------------------")); LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabPG, string.Format("\r\n{0} : Message : {1}", "RahyabPGWebService.sendsms", ex.Message)); LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabPG, string.Format("\r\n{0} : SmsSentGuid : {1}", "RahyabPGWebService.sendsms", batchMessage.Guid)); LogController <ServiceLogs> .LogInFile(ServiceLogs.RahyabPG, string.Format("\r\n-------------------------------------------------------------------------")); } }
/// <summary> /// Schedules a batch of SMS messages to be sent at the date time you specify /// </summary> /// <exception cref="IO.Swagger.Client.ApiException">Thrown when fails to make API call</exception> /// <param name="body">Message properties</param> /// <returns>ScheduledBatchResponse</returns> public ScheduledBatchResponse ScheduleBatch(BatchMessage body) { ApiResponse <ScheduledBatchResponse> localVarResponse = ScheduleBatchWithHttpInfo(body); return(localVarResponse.Data); }
/// <summary> /// Schedules a batch of SMS messages to be sent at the date time you specify /// </summary> /// <exception cref="IO.Swagger.Client.ApiException">Thrown when fails to make API call</exception> /// <param name="body">Message properties</param> /// <returns>Task of ScheduledBatchResponse</returns> public async System.Threading.Tasks.Task <ScheduledBatchResponse> ScheduleBatchAsync(BatchMessage body) { ApiResponse <ScheduledBatchResponse> localVarResponse = await ScheduleBatchAsyncWithHttpInfo(body); return(localVarResponse.Data); }
public void WhenConstructingShouldNotThrow() { var batchMessage = new BatchMessage(1, new Uri("http://post.com"), "payload"); Assert.NotNull(batchMessage); Assert.Equal(1, batchMessage.ReynaId); }
/// <summary> /// Send a single SMS message to multiple recipients /// </summary> /// <exception cref="IO.Swagger.Client.ApiException">Thrown when fails to make API call</exception> /// <param name="body">Message properties</param> /// <returns>BatchMessageResponse</returns> public BatchMessageResponse SendBatch(BatchMessage body) { ApiResponse <BatchMessageResponse> localVarResponse = SendBatchWithHttpInfo(body); return(localVarResponse.Data); }
public HttpResponseMessage Send(PostSendVASMessageModel vas) { if (!ModelState.IsValid) { ResponseMessage rm = new ResponseMessage(); rm.IsSuccessful = false; rm.StatusCode = (int)ErrorCode.ValidationNotValid; foreach (ModelState modelState in ModelState.Values) { foreach (ModelError error in modelState.Errors) { rm.Message += string.Format("{0}", error.ErrorMessage); } } throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.ValidationNotValid, rm.Message); } if (string.IsNullOrEmpty(vas.SenderId) || vas.PrivateNumberGuid == Guid.Empty) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.ServiceIdIsInvalid, Language.GetString("ServiceIdIsInvalid")); } if (vas.ReferenceGuid == Guid.Empty) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.ServiceIdIsInvalid, Language.GetString("ServiceIdIsInvalid")); } if (vas.InProgressSmsList.Count > 0) { if (Facade.PhoneBook.RecipientIsRegisteredToVasGroup(vas.GroupId, vas.Receiver) == Guid.Empty) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.ServiceIdIsInvalid, Language.GetString("ServiceIdIsInvalid")); } } if (vas.InProgressSmsList.Count == 0 && !string.IsNullOrEmpty(vas.Receiver)) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.ReceiversIsEmpty, Language.GetString("ReceiversIsEmpty")); } var principal = System.Threading.Thread.CurrentPrincipal; if (principal.Identity.IsAuthenticated) { Common.User userInfo = ((MyPrincipal)principal).UserDetails; BatchMessage batchMessage = new BatchMessage(); batchMessage.UserGuid = userInfo.UserGuid; batchMessage.Guid = vas.BatchId; batchMessage.CheckId = vas.CheckId.ToString(); batchMessage.SmsText = vas.SmsText; batchMessage.SmsLen = vas.SmsLen; batchMessage.SenderNumber = vas.SenderId; batchMessage.PrivateNumberGuid = vas.PrivateNumberGuid; batchMessage.ServiceId = vas.ServiceId; batchMessage.Receivers = vas.InProgressSmsList; batchMessage.IsUnicode = vas.IsUnicode; batchMessage.ReferenceGuid = new List <Guid>() { vas.ReferenceGuid }; batchMessage.SmsSendType = (int)Common.SmsSendType.SendSmsFromAPI; if (!ManageQueue.SendMessage(Queues.ApiSendMessage, batchMessage, batchMessage.SenderNumber)) { throw new BusinessException(HttpStatusCode.Accepted, ErrorCode.InternalServerError, Language.GetString("InternalServerError")); } SendSmsResponse sendsms = new SendSmsResponse(); sendsms.IsSuccessful = true; sendsms.BatchId = batchMessage.Guid; return(Request.CreateResponse <SendSmsResponse>(HttpStatusCode.Created, sendsms)); } else { return(Request.CreateResponse(HttpStatusCode.Unauthorized)); } }