/// <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);
        }
Esempio n. 2
0
        /// <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);
        }