Beispiel #1
0
        public async Task <AliyunDysmsResult> SendCodeAsync(AliyunDysmsCode code)
        {
            if (code == null)
            {
                throw new ArgumentNullException(nameof(code));
            }
            if (string.IsNullOrWhiteSpace(_aliyunDysmsAccount.AccessKeyId))
            {
                throw new ArgumentNullException(nameof(_aliyunDysmsAccount.AccessKeyId));
            }
            if (string.IsNullOrWhiteSpace(_aliyunDysmsAccount.AccessKeySecret))
            {
                throw new ArgumentNullException(nameof(_aliyunDysmsAccount.AccessKeySecret));
            }
            if (string.IsNullOrWhiteSpace(_config.SignName))
            {
                throw new ArgumentNullException(nameof(_config.SignName));
            }

            code.FixParameters(_config);

            code.CheckParameters();

            var bizParams = new Dictionary <string, string>
            {
                { "RegionId", "cn-hangzhou" },
                { "Action", "SendSms" },
                { "Version", "2017-05-25" },
                { "AccessKeyId", _aliyunDysmsAccount.AccessKeyId },
                { "PhoneNumbers", code.GetPhoneString() },
                { "SignName", _config.SignName },
                { "TemplateCode", code.TemplateCode },
                { "TemplateParam", code.GetTemplateParamsString() },
                { "SignatureMethod", "HMAC-SHA1" },
                { "SignatureNonce", Guid.NewGuid().ToString() },
                { "SignatureVersion", "1.0" },
                { "Timestamp", DateTime.Now.ToIso8601DateString() },
                { "Format", "JSON" }
            };

            if (!string.IsNullOrWhiteSpace(code.OutId))
            {
                bizParams.Add("OutId", code.OutId);
            }

            var signature = SignatureHelper.GetApiSignature(bizParams, _aliyunDysmsAccount.AccessKeySecret);

            bizParams.Add("Signature", signature);

            var content = new FormUrlEncodedContent(bizParams);

            return(await _proxy.SendCodeAsync(content)
                   .Retry(_config.RetryTimes)
                   .Handle()
                   .WhenCatch <Exception>(e =>
            {
                _exceptionHandler?.Invoke(e);
                return ReturnAsDefautlResponse();
            }));
        }
Beispiel #2
0
        public async Task <ResponseData <SmsCalledResult> > SendAsync(SendCloudSmsMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }
            if (string.IsNullOrWhiteSpace(_sendCloudAccount.SmsUser))
            {
                throw new ArgumentNullException(nameof(_sendCloudAccount.SmsUser));
            }
            if (string.IsNullOrWhiteSpace(_sendCloudAccount.SmsKey))
            {
                throw new ArgumentNullException(nameof(_sendCloudAccount.SmsKey));
            }

            message.CheckParameters();

            var timestamp = await GetTimeStampAsync();

            var bizParams = new SortedDictionary <string, string>
            {
                { "smsUser", _sendCloudAccount.SmsUser },
                { "msgType", message.MsgType.ToString() },
                { "phone", message.GetPhoneString() },
                { "templateId", message.TemplateId.ToString() },
                { "timestamp", timestamp.Info.Timestamp.ToString() }
            };

            if (message.Vars?.Count > 0)
            {
                bizParams.Add("vars", message.GetVarsString());
            }

            var signature = SignatureHelper.GetApiSignature(bizParams, _sendCloudAccount.SmsKey);

            bizParams.Add("signature", signature);

            var content = new FormUrlEncodedContent(bizParams);

            return(await _proxy.SendMessageAsync(content)
                   .Retry(_config.RetryTimes)
                   .Handle().WhenCatch <Exception>(e =>
            {
                _exceptionHandler?.Invoke(e);
                return ReturnAsDefautlResponse();
            }));
        }