Example #1
0
        public Task SendSmsAsync(string number, string message)
        {
            int appid = _smsSenderOptions.AppId;

            string appkey = _smsSenderOptions.AppKey;

            var phoneNumbers = new string[] { number };

            int templateId = _smsSenderOptions.TemplateId;

            string smsSign = _smsSenderOptions.SmsSign; // 签名的参数(codepie)

            try
            {
                // 签名参数未提供或者为空时,会使用默认签名发送短信
                var ssender = new SmsSingleSender(appid, appkey);
                SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNumbers[0],
                                                                     templateId, new[] { "5678", "tes-.-" }, smsSign, "", "");
            }
            catch (JSONException e)
            {
                Console.WriteLine(e);
            }
            catch (HTTPException e)
            {
                Console.WriteLine(e);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            return(Task.CompletedTask);
        }
Example #2
0
        static void Main(string[] args)
        {
            SmsSingleSender       singleSender = new SmsSingleSender(appid, appkey);
            SmsSingleSenderResult resutl       = singleSender.send(0, "86", "18328636270", "这是测试信息", "", "");

            Console.WriteLine(resutl.result + "---" + resutl.errMsg);
            Console.ReadKey();
        }
Example #3
0
 private static TencentSmsSendResponseData Convert(SmsSingleSenderResult response)
 {
     return(new TencentSmsSendResponseData {
         Result = response.result,
         ErrMsg = response.errMsg,
         Ext = response.ext,
         Fee = response.fee,
         Sid = response.sid
     });
 }
Example #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="phoneNumber"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        public ResultView Send(SingleSendData data)
        {
            SmsSingleSenderResult result = Send(0, "86", data.PhoneNumber, data.Message, "", "");

            if (result.result == 0)
            {
                return(ResultView.Success());
            }
            throw ApiException.BadRequest(result.errMsg);
        }
Example #5
0
 /// <summary>
 /// 发送短信验证码
 /// </summary>
 /// <param name="mobilePhone">手机号</param>
 /// <param name="smsMessage">短信内容</param>
 /// <param name="appID">appID</param>
 /// <param name="appKey">appKey</param>
 /// <param name="signature">短信签名</param>
 /// <param name="templateID">短信模板id</param>
 /// <returns>是否成功发送</returns>
 private bool SendMsg2User(string mobilePhone, List <string> smsMessage, int appID, string appKey, string signature, int templateID)
 {
     try
     {
         SmsSingleSender       smsSender = new SmsSingleSender(appID, appKey);
         SmsSingleSenderResult smsResult = smsSender.SendWithParam("86", mobilePhone, templateID, smsMessage, signature, "", "");
         if (smsResult.result != 0)
         {
             NLog.LogManager.GetCurrentClassLogger().Error("SmsMultiSender has error: " + smsResult);
             return(false);
         }
         return(true);
     }
     catch (Exception ex)
     {
         NLog.LogManager.GetCurrentClassLogger().Error(ex, ex.Message);
         return(false);
     }
 }
Example #6
0
        /// <summary>
        /// 短信单发
        /// </summary>
        /// <param name="phoneNumber">手机号</param>
        /// <param name="templateId">短信模板ID,腾讯云后台查询</param>
        /// <param name="msgParams">短信模板变量一次对应的值</param>
        /// <returns></returns>
        private static SmsSingleSenderResult SingleSend(string phoneNumber, int templateId, string[] msgParams)
        {
            SmsSingleSenderResult result;

            try
            {
                SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
                result = ssender.sendWithParam("86", phoneNumber,
                                               templateId, msgParams, "", "", "");
            }
            catch (Exception ex)
            {
                result = new SmsSingleSenderResult()
                {
                    result = -1, errMsg = ex.Message
                };
            }

            return(result);
        }
Example #7
0
        public JsonResult SendSmsCode(int sendType, string mobiles, int tempId, string parameters)
        {
            try
            {
                var appId  = CommonVariable.SmsAppId;
                var appKey = CommonVariable.SmsAppKey;

                List <string> templParams  = parameters.Split(',').ToList();
                List <string> phoneNumbers = mobiles.Split(',').ToList();
                if (sendType == 1)
                {
                    MemoryCacheManager cache     = new MemoryCacheManager();
                    LoginUser          loginUser = cache.Get <LoginUser>(phoneNumbers[0]);
                    if (loginUser == null)
                    {
                        loginUser = new LoginUser(phoneNumbers[0], 0);
                    }
                    if (loginUser.smsSendTimes >= 5)
                    {
                        return(Json(new { result = 1 }));
                    }
                    SmsSingleSender       singleSender = new SmsSingleSender(appId, appKey);
                    SmsSingleSenderResult singleResult = singleSender.SendWithParam("86", phoneNumbers[0], tempId, templParams, "", "", "");
                    loginUser.smsSendTimes += 1;
                    //记录该用户今日发短信验证码的次数
                    cache.Set(phoneNumbers[0], loginUser, 60 * 24);
                    return(Json(singleResult));
                }
                else if (sendType == 2)
                {
                    SmsMultiSender       multiSender = new SmsMultiSender(appId, appKey);
                    SmsMultiSenderResult multiResult = multiSender.SendWithParam("86", phoneNumbers, tempId, templParams, "", "", "");
                    return(Json(multiResult));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            return(Json(new { result = -1 }));
        }
Example #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="nationCode"></param>
        /// <param name="phoneNumber"></param>
        /// <param name="msg"></param>
        /// <param name="extend"></param>
        /// <param name="ext"></param>
        /// <returns></returns>
        public SmsSingleSenderResult Send(int type, string nationCode, string phoneNumber,
                                          string msg, string extend, string ext)
        {
            long random = SmsSenderUtil.getRandom();
            long now    = SmsSenderUtil.getCurrentTime();

            if (!string.IsNullOrWhiteSpace(SmsSign))
            {
                msg = SmsSign + msg;
            }
            JSONObjectBuilder body = new JSONObjectBuilder()
                                     .Put("tel", (new JSONObjectBuilder()).Put("nationcode", nationCode).Put("mobile", phoneNumber).Build())
                                     .Put("type", type)
                                     .Put("msg", msg)
                                     .Put("sig", SmsSenderUtil.calculateSignature(this.appkey, random, now, phoneNumber))
                                     .Put("time", now)
                                     .Put("extend", !String.IsNullOrEmpty(extend) ? extend : "")
                                     .Put("ext", !String.IsNullOrEmpty(ext) ? ext : "");

            HTTPRequest req = new HTTPRequest(HTTPMethod.POST, this.url)
                              .addHeader("Conetent-Type", "application/json")
                              .addQueryParameter("sdkappid", this.appid)
                              .addQueryParameter("random", random)
                              .setConnectionTimeout(60 * 1000)
                              .setRequestTimeout(60 * 1000)
                              .setBody(body.Build().ToString());

            // May throw HttpRequestException
            HTTPResponse res = httpclient.fetch(req);

            // May throw HTTPException
            handleError(res);

            SmsSingleSenderResult result = new SmsSingleSenderResult();

            // May throw JSONException
            result.parseFromHTTPResponse(res);

            return(result);
        }
Example #9
0
        public int Send(string phone, string Content, SMSType type)
        {
#if !FB
            return(0);
#endif
            SmsSingleSenderResult result = null;
            try
            {
                resultMsg = "";
                SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
                result = ssender.sendWithParam("86", phone,
                                               289735, new[] { Content }, "单身狗APP", "", ""); // 签名参数未提供或者为空时,会使用默认签名发送短信
                Console.WriteLine(result);
                resultMsg = Newtonsoft.Json.JsonConvert.SerializeObject(result);
            }
            catch (JSONException e)
            {
                resultMsg = e.Message;
                Console.WriteLine(e);
                return(1);
            }
            catch (HTTPException e)
            {
                resultMsg = e.Message;
                Console.WriteLine(e);
                return(1);
            }
            catch (Exception e)
            {
                resultMsg = e.Message;
                Console.WriteLine(e);
                return(1);
            }
            if (result.result != 0)
            {
                resultMsg = result.errMsg;
                return(1);
            }
            return(0);
        }
Example #10
0
            // 将单发回包解析成结果对象
            public SmsSingleSenderResult ResponseStrToSingleSenderResult(string str)
            {
                SmsSingleSenderResult result = JsonConvert.DeserializeObject <SmsSingleSenderResult>(str);

                return(result);
            }
Example #11
0
            /**
             * 普通单发短信接口,明确指定内容,如果有多个签名,请在内容中以【】的方式添加到信息内容中,否则系统将使用默认签名
             * @param type 短信类型,0 为普通短信,1 营销短信
             * @param nationCode 国家码,如 86 为中国
             * @param phoneNumber 不带国家码的手机号
             * @param msg 信息内容,必须与申请的模板格式一致,否则将返回错误
             * @param extend 扩展码,可填空
             * @param ext 服务端原样返回的参数,可填空
             * @return SmsSingleSenderResult
             */
            public SmsSingleSenderResult Send(
                int type,
                string nationCode,
                string phoneNumber,
                string msg,
                string extend,
                string ext)
            {
                /*
                 * 请求包体
                 * {
                 *  "tel": {
                 *      "nationcode": "86",
                 *      "mobile": "13788888888"
                 *  },
                 *  "type": 0,
                 *  "msg": "你的验证码是1234",
                 *  "sig": "fdba654e05bc0d15796713a1a1a2318c",
                 *  "time": 1479888540,
                 *  "extend": "",
                 *  "ext": ""
                 * }
                 * 应答包体
                 * {
                 *  "result": 0,
                 *  "errmsg": "OK",
                 *  "ext": "",
                 *  "sid": "xxxxxxx",
                 *  "fee": 1
                 * }
                 */
                if (0 != type && 1 != type)
                {
                    throw new Exception("type " + type + " error");
                }
                if (null == extend)
                {
                    extend = "";
                }
                if (null == ext)
                {
                    ext = "";
                }

                long random  = util.GetRandom();
                long curTime = util.GetCurTime();

                // 按照协议组织 post 请求包体
                JObject data = new JObject();

                JObject tel = new JObject();

                tel.Add("nationcode", nationCode);
                tel.Add("mobile", phoneNumber);

                data.Add("tel", tel);
                data.Add("msg", msg);
                data.Add("type", type);
                data.Add("sig", util.StrToHash(String.Format(
                                                   "appkey={0}&random={1}&time={2}&mobile={3}",
                                                   appkey, random, curTime, phoneNumber)));
                data.Add("time", curTime);
                data.Add("extend", extend);
                data.Add("ext", ext);

                string         wholeUrl = url + "?sdkappid=" + sdkappid + "&random=" + random;
                HttpWebRequest request  = util.GetPostHttpConn(wholeUrl);

                byte[] requestData = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data));
                request.ContentLength = requestData.Length;
                Stream requestStream = request.GetRequestStream();

                requestStream.Write(requestData, 0, requestData.Length);
                requestStream.Close();

                // 接收返回包
                HttpWebResponse response       = (HttpWebResponse)request.GetResponse();
                Stream          responseStream = response.GetResponseStream();
                StreamReader    streamReader   = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
                string          responseStr    = streamReader.ReadToEnd();

                streamReader.Close();
                responseStream.Close();
                SmsSingleSenderResult result;

                if (HttpStatusCode.OK == response.StatusCode)
                {
                    result = util.ResponseStrToSingleSenderResult(responseStr);
                }
                else
                {
                    result        = new SmsSingleSenderResult();
                    result.result = -1;
                    result.errmsg = "http error " + response.StatusCode + " " + responseStr;
                }
                return(result);
            }
Example #12
0
            /**
             * 指定模板单发
             * @param nationCode 国家码,如 86 为中国
             * @param phoneNumber 不带国家码的手机号
             * @param templId 模板 id
             * @param templParams 模板参数列表,如模板 {1}...{2}...{3},那么需要带三个参数
             * @param extend 扩展码,可填空
             * @param ext 服务端原样返回的参数,可填空
             * @return SmsSingleSenderResult
             */
            public SmsSingleSenderResult SendWithParam(
                string nationCode,
                string phoneNumber,
                int templId,
                List <string> templParams,
                string sign,
                string extend,
                string ext)
            {
                /*
                 * 请求包体
                 * {
                 *  "tel": {
                 *      "nationcode": "86",
                 *      "mobile": "13788888888"
                 *  },
                 *  "sign": "腾讯云",
                 *  "tpl_id": 19,
                 *  "params": [
                 *      "验证码",
                 *      "1234",
                 *      "4"
                 *  ],
                 *  "sig": "fdba654e05bc0d15796713a1a1a2318c",
                 *  "time": 1479888540,
                 *  "extend": "",
                 *  "ext": ""
                 * }
                 * 应答包体
                 * {
                 *  "result": 0,
                 *  "errmsg": "OK",
                 *  "ext": "",
                 *  "sid": "xxxxxxx",
                 *  "fee": 1
                 * }
                 */
                if (null == sign)
                {
                    sign = "";
                }
                if (null == extend)
                {
                    extend = "";
                }
                if (null == ext)
                {
                    ext = "";
                }

                long random  = util.GetRandom();
                long curTime = util.GetCurTime();

                // 按照协议组织 post 请求包体
                JObject data = new JObject();

                JObject tel = new JObject();

                tel.Add("nationcode", nationCode);
                tel.Add("mobile", phoneNumber);

                data.Add("tel", tel);
                data.Add("sig", util.CalculateSigForTempl(appkey, random, curTime, phoneNumber));
                data.Add("tpl_id", templId);
                data.Add("params", util.SmsParamsToJSONArray(templParams));
                data.Add("sign", sign);
                data.Add("time", curTime);
                data.Add("extend", extend);
                data.Add("ext", ext);

                string         wholeUrl = url + "?sdkappid=" + sdkappid + "&random=" + random;
                HttpWebRequest request  = util.GetPostHttpConn(wholeUrl);

                byte[] requestData = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data));
                request.ContentLength = requestData.Length;
                Stream requestStream = request.GetRequestStream();

                requestStream.Write(requestData, 0, requestData.Length);
                requestStream.Close();

                // 接收返回包
                HttpWebResponse response       = (HttpWebResponse)request.GetResponse();
                Stream          responseStream = response.GetResponseStream();
                StreamReader    streamReader   = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
                string          responseStr    = streamReader.ReadToEnd();

                streamReader.Close();
                responseStream.Close();
                SmsSingleSenderResult result;

                if (HttpStatusCode.OK == response.StatusCode)
                {
                    result = util.ResponseStrToSingleSenderResult(responseStr);
                }
                else
                {
                    result        = new SmsSingleSenderResult();
                    result.result = -1;
                    result.errmsg = "http error " + response.StatusCode + " " + responseStr;
                }
                return(result);
            }