/// <summary> /// 发送短信 /// 立马返回结果,后台线程处理具体消息发送 /// </summary> /// <param name="channel"></param> /// <param name="msg"></param> public static ResultModel SendMsg(string channel, Cmpp2MsgEnt msg) { if (_smsChannels.Keys.Contains(channel)) { // todo 处理长短信 var subReq = GetSubmitReq(msg); bool isOk = _cmppCommands.Post(Tuple.Create(channel, subReq)); return(isOk ? new ResultModel() : new ResultModel(ResultTypes.AddFail, "添加消息缓冲池失败!")); } return(new ResultModel(ResultTypes.ObjectNull, "未找到对应消息通道")); }
/// <summary> /// /// </summary> /// <param name="msg"></param> /// <returns></returns> private static SubmitReq GetSubmitReq(Cmpp2MsgEnt msg) { //这里的字段根据需要设定 SubmitReq submit = new SubmitReq(); submit.PkTotal = 1; // uint _Pk_total; submit.PkNumber = 1; // uint _Pk_number; // 1 Unsigned Integer 相同Msg_Id的信息序号,从1开始。 submit.RegisteredDelivery = 1; // 返回错误报告 // // 0:不需要; // // 1:需要。 submit.MsgLevel = 1; submit.ServiceId = "1"; // string _Service_Id; // 10 Octet String 业务标识,是数字、字母和符号的组合。 submit.FeeUserType = 1; // uint _Fee_UserType; // 1 Unsigned Integer 计费用户类型字段: // // 0:对目的终端MSISDN计费; // // 1:对源终端MSISDN计费; // // 2:对SP计费; // // 3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。 submit.FeeTerminalId = string.Empty; // string _Fee_terminal_Id; // 32 Octet String 被计费用户的号码,当Fee_UserType为3时该值有效,当Fee_UserType为0、1、2时该值无意义。 submit.TpPId = 0; // uint _TP_pId; // 1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9。 submit.TpUdhi = 0; // uint _TP_udhi; // 1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐。 submit.MsgFmt = 8; // uint _Msg_Fmt; // 1 Unsigned Integer 信息格式: // // 0:ASCII串; // // 3:短信写卡操作; // // 4:二进制信息; // // 8:UCS2编码; // // 15:含GB汉字...... submit.FeeType = "01"; // string _FeeType; // 2 Octet String 资费类别: // // 01:对"计费用户号码"免费; // // 02:对"计费用户号码"按条计信息费; // // 03:对"计费用户号码"按包月收取信息费。 submit.FeeCode = "0000"; // string _FeeCode; // 6 Octet String 资费代码(以分为单位)。 //submit.ValIdTime = DateTimeHelper.Get_MMddHHmmss_String(DateTime.Now.AddHours(2)) // + "032+"; // string _ValId_Time; // 17 Octet String 存活有效期,格式遵循SMPP3.3协议。 //submit.At_Time = DateTimeHelper.Get_MMddHHmmss_String(DateTime.Now) + "032+"; // string _At_Time; // 17 Octet String 定时发送时间,格式遵循SMPP3.3协议。 submit.SrcId = msg.ChanelExt; // string _Src_Id; // 21 Octet String 源号码。SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码。 submit.DestId = new[] { msg.Mobile }; //new string[] {"1391xxx1138", "1391xxx1137"}; // string[] _Dest_terminal_Id; // 32*DestUsr_tl Octet String 接收短信的MSISDN号码。 submit.MsgContent = msg.Content; // uint _Dest_terminal_type; // 1 Unsigned Integer 接收短信的用户的号码类型,0:真实号码;1:伪码。 return(submit); }