Skip to content

Commit 11a8a1a

Browse files
committed
云片网2.0 API For .NET Standard 2.0
1 parent 37d774d commit 11a8a1a

27 files changed

+1266
-0
lines changed

thirdparty/csharp/README.md

+254
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
## 云片短信API文档(2.0)
2+
.NET Standard 2.0 框架
3+
4+
* 设计之初就考虑了依赖注入,方便集成各种系统.
5+
* 由于短信的特殊性,请替换测试的相关代码后再进行单元测试.
6+
* 详细见测试代码
7+
8+
### 使用方法
9+
10+
``` csharp
11+
var _accountManager = new AccountManager(new DefaultYunPianConfiguration
12+
{
13+
ApiKey = "your api key"
14+
});
15+
var accountInfo = await _accountManager.GetAsync();
16+
17+
18+
var smsManager = new SmsManager(new DefaultYunPianConfiguration
19+
{
20+
ApiKey = "your api key"
21+
});
22+
var smsResult = await smsManager.Send(new BatchSendSms()
23+
{
24+
Mobile = new List<string>
25+
{
26+
"13800138000",
27+
"13800138001"
28+
},
29+
Text = "尊敬的用户,您的帐号于2017-01-01成功充值100元,如有疑问请联系客服。"
30+
});
31+
```
32+
33+
### 依赖注入(autofac)
34+
35+
``` csharp
36+
var builder = new ContainerBuilder();
37+
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsImplementedInterfaces();
38+
39+
builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(IYunPianConfiguration)))
40+
.AsImplementedInterfaces();
41+
42+
builder.Register(c => new DefaultYunPianConfiguration
43+
{
44+
ApiKey = "your api key",
45+
}).As<IYunPianConfiguration>().SingleInstance();
46+
47+
IocContainer = builder.Build();
48+
```
49+
50+
### 账户API
51+
``` csharp
52+
public interface IAccountManager
53+
{
54+
/// <summary>
55+
/// 查账户信息
56+
/// </summary>
57+
/// <returns></returns>
58+
Task<Account> GetAsync();
59+
60+
/// <summary>
61+
/// 可一次修改emergency_contact、emergency_mobile和alarm_balance中的一个或多个(必须传入一个)
62+
/// </summary>
63+
/// <param name="account"></param>
64+
/// <returns></returns>
65+
Task<Account> UpdateAsync([NotNull]UpdateAccount account);
66+
}
67+
68+
69+
public class Account : ApiResultBase
70+
{
71+
/// <summary>
72+
/// 用户名
73+
/// </summary>
74+
public string Nick { get; set; }
75+
76+
/// <summary>
77+
/// 注册时间
78+
/// </summary>
79+
public DateTime Gmt_Created { get; set; }
80+
81+
/// <summary>
82+
/// 手机号
83+
/// </summary>
84+
public string Mobile { get; set; }
85+
86+
/// <summary>
87+
/// 邮箱
88+
/// </summary>
89+
public string Email { get; set; }
90+
91+
/// <summary>
92+
/// IP白名单,推荐使用
93+
/// </summary>
94+
public string Ip_WhiteList { get; set; }
95+
96+
/// <summary>
97+
/// api版本号
98+
/// </summary>
99+
public string Api_Version { get; set; }
100+
101+
/// <summary>
102+
/// 账户剩余条数或者剩余金额(根据账户类型)
103+
/// </summary>
104+
public string Balance { get; set; }
105+
106+
/// <summary>
107+
/// 剩余条数或剩余金额低于该值时提醒
108+
/// </summary>
109+
public long Alarm_Balance { get; set; }
110+
111+
/// <summary>
112+
/// 紧急联系人
113+
/// </summary>
114+
public string Emergency_Contact { get; set; }
115+
116+
/// <summary>
117+
/// 紧急联系人电话
118+
/// </summary>
119+
public string Emergency_Mobile { get; set; }
120+
}
121+
```
122+
123+
### 短信API
124+
``` csharp
125+
public interface ISmsManager
126+
{
127+
/// <summary>
128+
/// 单条发送
129+
/// 一次发送一条短信,常用于短信验证、找回密码、短信登录、监控报警
130+
/// </summary>
131+
/// <param name="sms"></param>
132+
/// <returns></returns>
133+
Task<SmsResult> Send(SingleSendSms sms);
134+
135+
/// <summary>
136+
/// 批量发送相同内容
137+
/// 批量发送订单状态通知,活动信息群发
138+
/// </summary>
139+
/// <param name="sms"></param>
140+
/// <returns></returns>
141+
Task<SmsResult> Send(BatchSendSms sms);
142+
143+
/// <summary>
144+
/// 批量发送不同内容
145+
/// 批量发送短信内容带变量的订单状态通知,活动信息群发
146+
/// </summary>
147+
/// <param name="sms"></param>
148+
/// <returns></returns>
149+
Task<SmsResult> Send(MultiSendSms sms);
150+
}
151+
152+
public class SingleSendSms
153+
{
154+
/// <summary>
155+
/// 接收的手机号
156+
/// </summary>
157+
public string Mobile { get; set; }
158+
159+
/// <summary>
160+
/// 已审核短信模板
161+
/// </summary>
162+
public string Text { get; set; }
163+
164+
/// <summary>
165+
/// 其它附加参数
166+
/// </summary>
167+
public SendSmsOption Option { get; set; }
168+
}
169+
170+
public class BatchSendSms
171+
{
172+
/// <summary>
173+
/// 接收的手机号;发送多个手机号请以逗号分隔,一次不要超过1000个;
174+
/// </summary>
175+
public List<string> Mobile { get; set; }
176+
177+
/// <summary>
178+
/// 已审核短信模板
179+
/// </summary>
180+
public string Text { get; set; }
181+
182+
/// <summary>
183+
/// 其它附加参数
184+
/// </summary>
185+
public SendSmsOption Option { get; set; }
186+
}
187+
188+
public class MultiSendSms
189+
{
190+
/// <summary>
191+
/// 接收的手机号;发送多个手机号请以逗号分隔,一次不要超过1000个;
192+
/// </summary>
193+
public List<string> Mobile { get; set; }
194+
195+
/// <summary>
196+
/// 已审核短信模板,多个已审核短信模板请使用UTF-8做urlencode;
197+
/// 使用逗号分隔,一次不要超过1000条且已审核短信模板条数必须与手机号个数相等
198+
/// </summary>
199+
public List<string> Text { get; set; }
200+
201+
/// <summary>
202+
/// 其它附加参数
203+
/// </summary>
204+
public SendSmsOption Option { get; set; }
205+
}
206+
207+
public class SmsResult : ApiResultBase
208+
{
209+
/// <summary>
210+
/// 成功发送总数
211+
/// </summary>
212+
public int Total_Count { get; set; }
213+
214+
/// <summary>
215+
/// 扣费金额,单位:元,类型:双精度浮点型/double
216+
/// </summary>
217+
public double Total_Fee { get; set; }
218+
219+
/// <summary>
220+
/// 计费单位
221+
/// </summary>
222+
public string Unit { get; set; }
223+
224+
public IReadOnlyList<SendResultItem> Data { get; set; }
225+
}
226+
227+
public class SendResultItem : ApiResultBase
228+
{
229+
/// <summary>
230+
/// 发送成功短信的计费条数(计费条数:70个字一条,超出70个字时按每67字一条计费)
231+
/// </summary>
232+
public int Count { get; set; }
233+
234+
/// <summary>
235+
/// 扣费金额,单位:元,类型:双精度浮点型/double
236+
/// </summary>
237+
public double Fee { get; set; }
238+
239+
/// <summary>
240+
/// 计费单位
241+
/// </summary>
242+
public string Unit { get; set; }
243+
244+
/// <summary>
245+
/// 发送手机号
246+
/// </summary>
247+
public string Mobile { get; set; }
248+
249+
/// <summary>
250+
/// 短信id,64位整型, 对应Java和C#的Long,不可用int解析
251+
/// </summary>
252+
public long Sid { get; set; }
253+
}
254+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using System.Threading.Tasks;
5+
using Autofac;
6+
using Shouldly;
7+
using Xunit;
8+
using YunPian.Account;
9+
using YunPian.ApiResult;
10+
using YunPian.Configuration;
11+
12+
namespace YunPian.Tests.Account
13+
{
14+
public class Account_Tests : TestBase
15+
{
16+
private readonly IAccountManager _accountManager;
17+
18+
public Account_Tests()
19+
{
20+
_accountManager = IocContainer.Resolve<IAccountManager>();
21+
}
22+
23+
[Fact]
24+
public async Task GetAccountInfo_Test()
25+
{
26+
//Act
27+
var result = await _accountManager.GetAsync();
28+
29+
//Assert
30+
result.IsSucceed().ShouldBeTrue();
31+
32+
result.Nick.ShouldNotBeNull();
33+
result.Gmt_Created.ShouldNotBe(default(DateTime));
34+
result.Mobile.ShouldNotBeNull();
35+
result.Email.ShouldNotBeNull();
36+
result.Ip_WhiteList.ShouldNotBeNull();
37+
result.Api_Version.ShouldNotBeNull();
38+
result.Balance.ShouldNotBeNull();
39+
result.Alarm_Balance.ShouldNotBeNull();
40+
result.Emergency_Contact.ShouldNotBeNull();
41+
result.Emergency_Mobile.ShouldNotBeNull();
42+
}
43+
44+
[Fact]
45+
public async Task Get_AccountInfo_Has_Error_Test()
46+
{
47+
//Act
48+
var errorAccountManager = new AccountManager(new DefaultYunPianConfiguration { ApiKey = "123456" });
49+
var result = await errorAccountManager.GetAsync();
50+
51+
//Assert
52+
result.IsSucceed().ShouldBeFalse();
53+
54+
result.Nick.ShouldBeNull();
55+
result.Gmt_Created.ShouldBe(default(DateTime));
56+
result.Mobile.ShouldBeNull();
57+
result.Email.ShouldBeNull();
58+
result.Ip_WhiteList.ShouldBeNull();
59+
result.Api_Version.ShouldBeNull();
60+
result.Balance.ShouldBeNull();
61+
result.Alarm_Balance.ShouldBe(0);
62+
result.Emergency_Contact.ShouldBeNull();
63+
result.Emergency_Mobile.ShouldBeNull();
64+
}
65+
66+
67+
[Fact]
68+
public async Task Set_AccountInfo_Test()
69+
{
70+
//Act
71+
var result = await _accountManager.UpdateAsync(new UpdateAccount
72+
{
73+
Alarm_Balance = 100,
74+
Emergency_Contact = "小明",
75+
Emergency_Mobile = "13800138000"
76+
});
77+
78+
//Assert
79+
result.IsSucceed().ShouldBeTrue();
80+
81+
result.Nick.ShouldNotBeNull();
82+
//result.Gmt_Created.ShouldNotBe(default(DateTime));
83+
result.Mobile.ShouldNotBeNull();
84+
result.Email.ShouldNotBeNull();
85+
result.Ip_WhiteList.ShouldNotBeNull();
86+
result.Api_Version.ShouldNotBeNull();
87+
result.Balance.ShouldNotBeNull();
88+
result.Alarm_Balance.ShouldNotBeNull();
89+
result.Emergency_Contact.ShouldNotBeNull();
90+
result.Emergency_Mobile.ShouldNotBeNull();
91+
92+
result.Alarm_Balance.ShouldBe(100);
93+
result.Emergency_Contact.ShouldBe("小明");
94+
result.Emergency_Mobile.ShouldBe("13800138000");
95+
}
96+
97+
[Fact]
98+
public async Task Set_AccountInfo_Must_Pass_Less_One_Argument_Test()
99+
{
100+
//Assert
101+
var ex = await Assert.ThrowsAsync<ArgumentException>(async () =>
102+
await _accountManager.UpdateAsync(new UpdateAccount()));
103+
104+
ex.ShouldNotBeNull();
105+
ex.ShouldBeOfType<ArgumentException>();
106+
//ex.Message.ShouldBe("请至少传入一个欲修改的账户信息");
107+
}
108+
}
109+
}

0 commit comments

Comments
 (0)