Guest User

Untitled

a guest
Nov 17th, 2018
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.90 KB | None | 0 0
  1. using StecPoint.ES.Infrastructure.Integration.Interfaces.Abstract;
  2. using StecPoint.ES.SendSay.Sdk.Model.Response;
  3.  
  4. namespace StecPoint.ES.Infrastructure.Integration.SendSay
  5. {
  6. class SendSayList : ServiceListAbstract
  7. {
  8. public SendSayList()
  9. {
  10.  
  11. }
  12.  
  13. public SendSayList(List x)
  14. {
  15. Id = x.Id;
  16. Name = x.Name;
  17. }
  18. }
  19. }
  20.  
  21. using StecPoint.ES.Infrastructure.Integration.Interfaces.Abstract;
  22. using StecPoint.ES.Infrastructure.Integration.Interfaces.Dto;
  23. using StecPoint.ES.SendSay.Sdk.Model.Request;
  24.  
  25. namespace StecPoint.ES.Infrastructure.Integration.SendSay
  26. {
  27. public class SendSayMember : ServiceListMemberAbstract
  28. {
  29. public SendSayMember()
  30. {
  31.  
  32. }
  33.  
  34. public SendSayMember(MemberDto x)
  35. {
  36. ListId = x.ListId;
  37. Email = x.Email;
  38. PhoneNumber = x.PhoneNumber;
  39. Params = x.Params;
  40. FirstName = x.FirstName;
  41. LastName = x.LastName;
  42. }
  43. public Subscriber GetSubscriber()
  44. {
  45. var subs = new Subscriber
  46. {
  47. Email = Email,
  48. GroupId = "" // !
  49. };
  50. return subs;
  51. }
  52. }
  53.  
  54. using StecPoint.ES.Infrastructure.Integration.Interfaces.Abstract;
  55. using StecPoint.ES.SendSay.Sdk.Model.Response;
  56.  
  57. namespace StecPoint.ES.Infrastructure.Integration.SendSay
  58. {
  59. public class SendSayProperty : ServiceParamAbstract
  60. {
  61. public SendSayProperty()
  62. {
  63.  
  64. }
  65.  
  66. public SendSayProperty(Quest x)
  67. {
  68. Id = x.Id;
  69. Name = x.Name;
  70. }
  71. }
  72. }
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79. using System;
  80. using System.Collections.Generic;
  81. using System.Linq;
  82. using System.Threading.Tasks;
  83. using StecPoint.ES.Infrastructure.Integration.Interfaces;
  84. using StecPoint.ES.Infrastructure.Integration.Interfaces.Abstract;
  85. using StecPoint.ES.Infrastructure.Integration.Interfaces.Dto;
  86. using StecPoint.ES.SendSay.Sdk.Manager;
  87. using StecPoint.ES.SendSay.Sdk.Model;
  88. using StecPoint.ES.SendSay.Sdk.Model.Response;
  89.  
  90. namespace StecPoint.ES.Infrastructure.Integration.SendSay
  91. {
  92. public class SendSayServiceProvider : IPartnerServiceProvider
  93. {
  94. private readonly SendSayManager _manager;
  95.  
  96. public SendSayServiceProvider(AuthConfigAbstract config)
  97. {
  98. var apiConfig = new ApiConfig { UserName = config.UserName,
  99. Password = config.Password};
  100. _manager = new SendSayManager(apiConfig);
  101. }
  102.  
  103. public async Task<ServerResponseDto> ValidateApiKeyAsync()
  104. {
  105. var status = await _manager.Subscribers.ValidateRequestAsync();
  106. return new ServerResponseDto() { Status = status };
  107. }
  108.  
  109. public async Task<IEnumerable<ServiceListAbstract>> GetListsAsync()
  110. {
  111. var res = new List<SendSayList>();
  112. try
  113. {
  114. var lists = await _manager.Lists.GetAllAsync();
  115. res = lists
  116. .Select(x => new SendSayList(x))
  117. .ToList();
  118.  
  119. var listParams = (await GetListParamsAsync(string.Empty, null)).ToList();
  120.  
  121. foreach (var item in res)
  122. {
  123. item.ServiceListParams = listParams;
  124. }
  125. }
  126. catch
  127. {
  128. // ignore
  129. }
  130. return res;
  131. }
  132.  
  133.  
  134.  
  135. public async Task<ServiceListAbstract> GetListByIdAsync(string id)
  136. {
  137. //return await Task.Run(() => new WebHookList());
  138. return null; // !
  139. }
  140.  
  141. public async Task<IEnumerable<ServiceParamAbstract>> GetListParamsAsync(string listId, string[] standartParams)
  142. {
  143. var res = new List<SendSayProperty>();
  144. var lists = await _manager.Fields.GetAllAsync();
  145. res = lists
  146. .Select(x => new SendSayProperty(x))
  147. .ToList();
  148. return res;
  149. }
  150.  
  151. public async Task<IEnumerable<ServiceParamAbstract>> GetListParamsAsync(string listId, bool addEmailParam)
  152. {
  153. //return await GetListParamsAsync(listId, null);
  154. return null; // !
  155. }
  156.  
  157. public async Task<ServiceListMemberAbstract> AddListMember(MemberDto member)
  158. {
  159. SendSayMember res = null;
  160. try
  161. {
  162. var sendSayMember = new SendSayMember(member);
  163. var subs = sendSayMember.GetSubscriber();
  164.  
  165. var newMembers = await _manager.Subscribers.AddAsync(subs);
  166.  
  167. return new SendSayMember
  168. {
  169. Id = newMembers.Id
  170. };
  171. }
  172. catch
  173. {
  174. // ignore
  175. }
  176. return res;
  177. }
  178.  
  179. public async Task<IEnumerable<int>> GetEmailTemplatesAsync()
  180. {
  181. IEnumerable<int> emailTemplates = await _manager.EmailTemplates.GetAllAsync();
  182. return emailTemplates;
  183. }
  184. }
  185. }
  186.  
  187.  
  188.  
  189.  
  190. using System;
  191. using System.Collections.Generic;
  192. using System.Net;
  193. using System.Threading;
  194. using System.Threading.Tasks;
  195. using StecPoint.ES.SendSay.Sdk.Interface;
  196. using StecPoint.ES.SendSay.Sdk.Model.Response;
  197. using Newtonsoft.Json;
  198. using System.Linq;
  199. using RestSharp;
  200. using Newtonsoft.Json.Linq;
  201. using System.Collections;
  202.  
  203. namespace StecPoint.ES.SendSay.Sdk.Manager
  204. {
  205. public class EmailTemplateManager : ManagerBase, IEmailTemplateManager
  206. {
  207. public EmailTemplateManager(IApiConfig config) : base(config)
  208. {
  209. }
  210.  
  211. public async Task<IEnumerable<int>> GetAllAsync()
  212. {
  213. try
  214. {
  215. RestClient client = GetApiClient();
  216. RestRequest formsRequest = GetBaseRequest("infolett.list");
  217. CancellationTokenSource cancelTokenSrc = new CancellationTokenSource();
  218. IRestResponse formsResp = null;
  219. try
  220. {
  221. formsResp = await client.ExecuteTaskAsync(formsRequest, cancelTokenSrc.Token);
  222. }
  223. catch (Exception e)
  224. {
  225. }
  226. if (formsResp.StatusCode != HttpStatusCode.Created && formsResp.StatusCode != HttpStatusCode.OK)
  227. {
  228. Logger?.Error($"Server return error: {formsResp.StatusCode}");
  229. }
  230. IEnumerable<int> templates = JsonConvert.DeserializeObject<EmailTemplateList>(formsResp.Content).List.Select(x => x.Id).ToArray();
  231. return templates;
  232. }
  233. catch (Exception e)
  234. {
  235. Logger?.Error(e);
  236. return null;
  237. }
  238. }
  239. }
  240. }
  241.  
  242.  
  243.  
  244.  
  245.  
  246. using System;
  247. using System.Collections.Generic;
  248. using System.Net;
  249. using System.Threading;
  250. using System.Threading.Tasks;
  251. using StecPoint.ES.SendSay.Sdk.Interface;
  252. using StecPoint.ES.SendSay.Sdk.Model.Response;
  253. using Newtonsoft.Json;
  254. using System.Linq;
  255. using RestSharp;
  256. using Newtonsoft.Json.Linq;
  257. using System.Collections;
  258.  
  259. namespace StecPoint.ES.SendSay.Sdk.Manager
  260. {
  261. public class FieldManager : ManagerBase, IFieldManager
  262. {
  263. public FieldManager(IApiConfig config) : base(config)
  264. {
  265. }
  266.  
  267. public async Task<IList<Quest>> GetAllAsync()
  268. {
  269. try
  270. {
  271. RestClient client = GetApiClient();
  272. RestRequest formsRequest = GetBaseRequest("anketa.list");
  273. CancellationTokenSource cancelTokenSrc = new CancellationTokenSource();
  274. IRestResponse formsResp = await client.ExecuteTaskAsync(formsRequest, cancelTokenSrc.Token);
  275. if (formsResp.StatusCode != HttpStatusCode.Created && formsResp.StatusCode != HttpStatusCode.OK)
  276. {
  277. Logger?.Error($"Server return error: {formsResp.StatusCode}");
  278. }
  279. List<Quest> quests = new List<Quest>();
  280. string[] formIds = JsonConvert.DeserializeObject<FormList>(formsResp.Content).List.Select(x => x.Id).ToArray();
  281. foreach (string formId in formIds)
  282. {
  283. RestRequest readFormRequest = GetBaseRequest("anketa.get");
  284. Parameter requestParam = readFormRequest.Parameters.FirstOrDefault(x => x.Name == "request");
  285. requestParam.Value = AddObject(requestParam, "id", formId);
  286.  
  287. IRestResponse readFormResp = await client.ExecuteTaskAsync(readFormRequest, cancelTokenSrc.Token);
  288. dynamic json = JArray.Parse('[' + readFormResp.Content + ']');
  289. IEnumerable<Quest> questsFromJSON = ((IEnumerable)json[0].obj.quests)
  290. .Cast<dynamic>()
  291. .Select(x => Deserialize(x))
  292. .Cast<Quest>()
  293. .Select(x => new Quest(x.Id, x.Name));
  294. quests.AddRange(questsFromJSON);
  295. }
  296. return quests;
  297. }
  298. catch (Exception e)
  299. {
  300. Logger?.Error(e);
  301. return null;
  302. }
  303. }
  304.  
  305. public async Task<IEnumerable<FormWithQuests>> GetFormsWithQuestsAsync()
  306. {
  307. try
  308. {
  309. RestClient client = GetApiClient();
  310. RestRequest formsRequest = GetBaseRequest("anketa.list");
  311. CancellationTokenSource cancelTokenSrc = new CancellationTokenSource();
  312. IRestResponse formsResp = await client.ExecuteTaskAsync(formsRequest, cancelTokenSrc.Token);
  313. if (formsResp.StatusCode != HttpStatusCode.Created && formsResp.StatusCode != HttpStatusCode.OK)
  314. {
  315. Logger?.Error($"Server return error: {formsResp.StatusCode}");
  316. }
  317. List<FormWithQuests> formsWithQuests = new List<FormWithQuests>();
  318. string[] formIds = JsonConvert.DeserializeObject<FormList>(formsResp.Content).List.Select(x => x.Id).ToArray();
  319. foreach (string formId in formIds)
  320. {
  321. RestRequest readFormRequest = GetBaseRequest("anketa.get");
  322. Parameter requestParam = readFormRequest.Parameters.FirstOrDefault(x => x.Name == "request");
  323. requestParam.Value = AddObject(requestParam, "id", formId);
  324.  
  325. IRestResponse readFormResp = await client.ExecuteTaskAsync(readFormRequest, cancelTokenSrc.Token);
  326. dynamic json = JArray.Parse('[' + readFormResp.Content + ']');
  327. IEnumerable<Quest> questsFromJSON = ((IEnumerable)json[0].obj.quests)
  328. .Cast<dynamic>()
  329. .Select(x => Deserialize(x))
  330. .Cast<Quest>()
  331. .Select(x => new Quest(x.Id, x.Name));
  332. formsWithQuests.Add(new FormWithQuests(formId, questsFromJSON));
  333.  
  334. }
  335. return formsWithQuests;
  336. }
  337. catch (Exception e)
  338. {
  339. Logger?.Error(e);
  340. return null;
  341. }
  342. }
  343.  
  344. Func<dynamic, dynamic> Deserialize = delegate (dynamic q)
  345. {
  346. return (dynamic)JsonConvert.DeserializeObject<Quest>(q.Value.ToString()
  347. .Replace("rn", string.Empty));
  348. };
  349. }
  350. }
  351.  
  352.  
  353.  
  354. using System;
  355. using System.Collections.Generic;
  356. using System.Net;
  357. using System.Threading;
  358. using System.Threading.Tasks;
  359. using StecPoint.ES.SendSay.Sdk.Interface;
  360. using StecPoint.ES.SendSay.Sdk.Model.Response;
  361. using Newtonsoft.Json;
  362.  
  363. namespace StecPoint.ES.SendSay.Sdk.Manager
  364. {
  365. public class ListManager : ManagerBase, IListManager
  366. {
  367. public ListManager(IApiConfig config) : base(config)
  368. {
  369. }
  370.  
  371. public async Task<IList<List>> GetAllAsync()
  372. {
  373. try
  374. {
  375. var client = GetApiClient();
  376. var request = GetBaseRequest("group.list");
  377. var cancelTokenSrc = new CancellationTokenSource();
  378. var resp = await client.ExecuteTaskAsync<ListResult>(request, cancelTokenSrc.Token);
  379. if (resp.StatusCode != HttpStatusCode.Created && resp.StatusCode != HttpStatusCode.OK)
  380. {
  381. Logger?.Error($"Server return error: {resp.StatusCode}");
  382. }
  383. try
  384. {
  385. ListResult lists = JsonConvert.DeserializeObject<ListResult>(resp.Content);
  386. return lists.List;
  387. }
  388. catch (Exception e)
  389. {
  390. Logger?.Error(e);
  391. return null;
  392. }
  393. }
  394. catch (Exception e)
  395. {
  396. Logger?.Error(e);
  397. return null;
  398. }
  399. }
  400. }
  401. }
  402.  
  403.  
  404.  
  405. using System;
  406. using NLog;
  407. using RestSharp;
  408. using StecPoint.ES.SendSay.Sdk.Interface;
  409. using Newtonsoft.Json;
  410.  
  411. namespace StecPoint.ES.SendSay.Sdk.Manager
  412. {
  413. public class ManagerBase
  414. {
  415. protected readonly IApiConfig ApiConfig;
  416. protected readonly ILogger Logger;
  417. private static readonly string _baseApiServer = "https://api.sendsay.ru/clu206";
  418.  
  419. public ManagerBase(IApiConfig config)
  420. {
  421. ApiConfig = config;
  422. Logger = config.Logger;
  423. }
  424.  
  425. protected RestClient GetApiClient()
  426. {
  427. var client = new RestClient
  428. {
  429. BaseUrl = new Uri(_baseApiServer)
  430. };
  431. return client;
  432. }
  433.  
  434. public RestRequest GetBaseRequest(string action)
  435. {
  436. RestRequest request = new RestRequest(_baseApiServer, Method.POST);
  437. request.AddParameter("apiversion", "100");
  438. request.AddParameter("json", "1");
  439. UserName username = new UserName(ApiConfig.UserName);
  440. string json = JsonConvert.SerializeObject(
  441. new
  442. {
  443. one_time_auth = new
  444. {
  445. login = username.Login,
  446. sublogin = username.Sublogin,
  447. passwd = ApiConfig.Password
  448. },
  449. action = action
  450. });
  451. request.AddParameter("request", json);
  452. return request;
  453. }
  454.  
  455. protected string AddObject(Parameter param, string key, string value)
  456. {
  457. value = key == "obj" ? value : '"'+value+'"';
  458. string paramVal = param.Value.ToString();
  459. return paramVal.Insert(paramVal.Length - 1, ","" + key + "":" + value + "");
  460. }
  461. }
  462. }
  463.  
  464.  
  465.  
  466. using StecPoint.ES.SendSay.Sdk.Interface;
  467.  
  468. namespace StecPoint.ES.SendSay.Sdk.Manager
  469. {
  470. public class SendSayManager : ISendSayManager
  471. {
  472. public IApiConfig ApiConfig { get; set; }
  473.  
  474. public IListManager Lists { get; set; }
  475.  
  476. public ISubscriberManager Subscribers { get; set; }
  477.  
  478. public IFieldManager Fields { get; set; }
  479.  
  480. public IEmailTemplateManager EmailTemplates { get; set; }
  481.  
  482. public SendSayManager(IApiConfig apiConfig)
  483. {
  484. ApiConfig = apiConfig;
  485. Lists = new ListManager(ApiConfig);
  486. Subscribers = new SubscriberManager(ApiConfig);
  487. Fields = new FieldManager(apiConfig);
  488. EmailTemplates = new EmailTemplateManager(apiConfig);
  489. }
  490. }
  491. }
  492.  
  493.  
  494.  
  495.  
  496. using System;
  497. using System.Net;
  498. using System.Threading;
  499. using System.Threading.Tasks;
  500. using StecPoint.ES.SendSay.Sdk.Interface;
  501. using StecPoint.ES.SendSay.Sdk.Model.Request;
  502. using StecPoint.ES.SendSay.Sdk.Model.Response;
  503. using System.Linq;
  504. using RestSharp;
  505. using System.Collections.Generic;
  506. using System.Text;
  507. using Newtonsoft.Json;
  508.  
  509. namespace StecPoint.ES.SendSay.Sdk.Manager
  510. {
  511. public class SubscriberManager : ManagerBase, ISubscriberManager
  512. {
  513. public SubscriberManager(IApiConfig config) : base(config)
  514. {
  515.  
  516. }
  517. public async Task<int> ValidateRequestAsync()
  518. {
  519. try
  520. {
  521. var client = GetApiClient();
  522. var request = GetBaseRequest("group.list");
  523. var cancelTokenSrc = new CancellationTokenSource();
  524. var resp = await client.ExecuteTaskAsync<ListResult>(request, cancelTokenSrc.Token);
  525. if (resp.StatusCode != HttpStatusCode.Created && resp.StatusCode != HttpStatusCode.OK)
  526. {
  527. Logger?.Error($"Server return error: {resp.StatusCode}");
  528. return (int)resp.StatusCode;
  529. }
  530. return 200;
  531. }
  532. catch (Exception e)
  533. {
  534. Logger?.Error(e);
  535. return (int)HttpStatusCode.ServiceUnavailable;
  536. }
  537. }
  538.  
  539. public async Task<Person> AddAsync(Subscriber subscriber)
  540. {
  541. try
  542. {
  543. RestClient client = GetApiClient();
  544. RestRequest request = GetBaseRequest("member.set");
  545.  
  546. Parameter requestParam = request.Parameters.FirstOrDefault(x => x.Name == "request");
  547. requestParam.Value = AddObject(requestParam, "email", subscriber.Email);
  548. requestParam.Value = AddObject(requestParam, "newbie.confirm", subscriber.OptIn ? "1" : "0");
  549. if (subscriber.OptIn)
  550. requestParam.Value = AddObject(requestParam, "newbie.letter.confirm", subscriber.TemplateId.ToString());
  551.  
  552. requestParam.Value = AddObject(requestParam, "obj", await GetObjVal(subscriber.GroupId));
  553.  
  554. CancellationTokenSource cancelTokenSrc = new CancellationTokenSource();
  555. IRestResponse resp = await client.ExecuteTaskAsync(request, cancelTokenSrc.Token);
  556. if (resp.StatusCode != HttpStatusCode.Created && resp.StatusCode != HttpStatusCode.OK)
  557. {
  558. Logger?.Error($"Server return error: {resp.StatusCode}");
  559. }
  560. SubscriberResponse data = JsonConvert.DeserializeObject<SubscriberResponse>(resp.Content);
  561. return data.Member;
  562. }
  563. catch (Exception e)
  564. {
  565. Logger?.Error(e);
  566. return null;
  567. }
  568. }
  569.  
  570. private async Task<string> GetObjVal(string groupId)
  571. {
  572. FieldManager fieldMng = new FieldManager(ApiConfig);
  573. StringBuilder objVal = new StringBuilder("{");
  574. IEnumerable<FormWithQuests> formsWithQuests = await fieldMng.GetFormsWithQuestsAsync();
  575. foreach (FormWithQuests formWithQuests in formsWithQuests)
  576. {
  577. IEnumerable<Quest> quests = formWithQuests.Quests;
  578. if (!quests.Any()) continue;
  579. objVal.Append('"').Append(formWithQuests.Id).Append('"').Append(":{");
  580. for (int i = 0; i < quests.Count(); i++)
  581. {
  582. Quest quest = quests.ElementAt(i);
  583. objVal.Append('"').Append(quest.Id).Append('"')
  584. .Append(':')
  585. .Append('"').Append(quest.Name).Append('"');
  586. if (i < quests.Count() - 1)
  587. {
  588. objVal.Append(',');
  589. }
  590. }
  591. objVal.Append("},");
  592. }
  593. objVal.Append(""-group": {"" + groupId + "":"1"}}");
  594. return objVal.ToString();
  595. }
  596. }
  597. }
  598.  
  599.  
  600. namespace StecPoint.ES.SendSay.Sdk.Manager
  601. {
  602. class UserName
  603. {
  604. private const char delimeter = '|';
  605. public string Login { get; set; }
  606. public string Sublogin { get; set; }
  607. public UserName(string username)
  608. {
  609. Login = username.Split(delimeter)[0];
  610. Sublogin = username.Split(delimeter)[1];
  611. }
  612. }
  613. }
Add Comment
Please, Sign In to add comment