/// <summary> /// 生成发送报文 /// </summary> /// <param name="phones">手机号</param> /// <param name="content">内容</param> /// <returns></returns> protected override SmsMessage[] PackageMessages(string[] phones, string content) { //if (this.messageList != null && this.messageList.Count > 0) //{ // foreach (var item in messageList) // { // _log.InfoFormat("打印日志:{0}", item); // } // lock (_lock) // { // messageList.Clear(); // } //} var targetCount = (phones.Length - 1) / 100 + 1; // 群发短信最多支持100条 var contentBytes = SmsMessage.Ucs2Encoding.GetBytes(content); var contentCount = (contentBytes.Length - 1) / 132 + 1; // 如果使用6位格式的协议头则短信内容最多可以有134个字节(140-6) // 如果使用7位格式的协议头则短信内容最多可以有132个字节 (140-7) 但是发133个字节会出现乱码所以发132个字节 var result = new CmppSubmitMessage[targetCount * contentCount]; for (int i = 0; i < targetCount; i++) { //var udhiId = (byte) Random.Next(byte.MaxValue); ushort udhiId = (ushort)Random.Next(ushort.MaxValue); byte[] byteArr = BitConverter.GetBytes(udhiId); Array.Reverse(byteArr); for (int j = 0; j < contentCount; j++) { var message = new CmppSubmitMessage { SequenceId = NextSequenceId(), PkTotal = (uint)contentCount, PkNumber = (uint)(j + 1), ServiceId = serviceId, MsgFmt = 8, FeeType = "01", MsgSrc = cpId, SrcId = appPhone, DestUserTl = (uint)Math.Min(100, phones.Length - i * 100) }; message.DestTerminalId = new string[message.DestUserTl]; Array.Copy(phones, i * 100, message.DestTerminalId, 0, (int)message.DestUserTl); Udhi(message, contentBytes, j, contentCount, byteArr, 139, 7); //_log.InfoFormat("udhiId:{0}",udhiId); result[i * j + j] = message; } } return(result); }
/// <summary> /// 生成发送报文 /// </summary> /// <param name="phones">手机号</param> /// <param name="content">内容</param> /// <returns></returns> protected override SmsMessage[] PackageMessages(string[] phones, string content) { var targetCount = (phones.Length - 1) / 100 + 1; // 群发短信最多支持100条 var contentBytes = SmsMessage.Ucs2Encoding.GetBytes(content); var contentCount = (contentBytes.Length - 1) / 140 + 1; // 短信内容最多支持140字节 var result = new CmppSubmitMessage[targetCount * contentCount]; for (int i = 0; i < targetCount; i++) { var udhiId = (byte)Random.Next(byte.MaxValue); for (int j = 0; j < contentCount; j++) { var message = new CmppSubmitMessage { SequenceId = NextSequenceId(), PkTotal = (uint)contentCount, PkNumber = (uint)(j + 1), ServiceId = serviceId, MsgFmt = 8, FeeType = "01", MsgSrc = cpId, SrcId = appPhone, DestUserTl = (uint)Math.Min(100, phones.Length - i * 100) }; message.DestTerminalId = new string[message.DestUserTl]; Array.Copy(phones, i * 100, message.DestTerminalId, 0, (int)message.DestUserTl); Udhi(message, contentBytes, j, contentCount, udhiId); result[i * j + j] = message; } } return(result); }