Ejemplo n.º 1
0
        /**
         * 普通单发短信接口,明确指定内容,如果有多个签名,请在内容中以【】的方式添加到信息内容中,否则系统将使用默认签名
         * @param type 短信类型,0 为普通短信,1 营销短信
         * @param nationCode 国家码,如 86 为中国
         * @param phoneNumber 不带国家码的手机号
         * @param msg 信息内容,必须与申请的模板格式一致,否则将返回错误
         * @param extend 扩展码,可填空
         * @param ext 服务端原样返回的参数,可填空
         * @return SmsSingleSenderResult
         */
        /// <summary>
        /// Sends the specified type.普通单发短信接口
        /// </summary>
        /// <param name="type">The type.短信类型,0 为普通短信,1 营销短信</param>
        /// <param name="nationCode">The nation code.国家码,如 86 为中国</param>
        /// <param name="phoneNumber">The phone number.不带国家码的手机号</param>
        /// <param name="msg">The MSG.信息内容,必须与申请的模板格式一致,否则将返回错误</param>
        /// <param name="extend">The extend.扩展码,可填空</param>
        /// <param name="ext">The ext.服务端原样返回的参数,可填空</param>
        /// <returns>单发短信</returns>
        /// <exception cref="Exception">短信类型不正确</exception>
        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;
            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(requestData, 0, requestData.Length);
                requestStream.Close();
            }

            // 接收返回包
            HttpWebResponse response    = (HttpWebResponse)request.GetResponse();
            string          responseStr = null;

            using (Stream responseStream = response.GetResponseStream())
            {
                using (StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")))
                {
                    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);
        }
Ejemplo n.º 2
0
        // 将单发回包解析成结果对象
        public SmsSingleSenderResult ResponseStrToSingleSenderResult(string str)
        {
            SmsSingleSenderResult result = JsonConvert.DeserializeObject <SmsSingleSenderResult>(str);

            return(result);
        }
Ejemplo n.º 3
0
        /**
         * 指定模板单发
         * @param nationCode 国家码,如 86 为中国
         * @param phoneNumber 不带国家码的手机号
         * @param templId 模板 id
         * @param templParams 模板参数列表,如模板 {1}...{2}...{3},那么需要带三个参数
         * @param extend 扩展码,可填空
         * @param ext 服务端原样返回的参数,可填空
         * @return SmsSingleSenderResult
         */
        /// <summary>
        /// Sends the with parameter.指定模板单发
        /// </summary>
        /// <param name="nationCode">The nation code.国家码,如 86 为中国</param>
        /// <param name="phoneNumber">The phone number.不带国家码的手机号</param>
        /// <param name="templId">The templ identifier.templId 模板 id</param>
        /// <param name="templParams">The templ parameters.模板参数列表,如模板 {1}...{2}...{3},那么需要带三个参数</param>
        /// <param name="sign">The sign.</param>
        /// <param name="extend">The extend.扩展码,可填空</param>
        /// <param name="ext">The ext.服务端原样返回的参数,可填空</param>
        /// <returns>指定模板单发</returns>
        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;
            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(requestData, 0, requestData.Length);
                requestStream.Close();
            }

            // 接收返回包
            HttpWebResponse response    = (HttpWebResponse)request.GetResponse();
            string          responseStr = null;

            using (Stream responseStream = response.GetResponseStream())
            {
                using (StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")))
                {
                    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);
        }