1 module smsapi_d_client.sms; 2 3 class SmsapiClient 4 { 5 string host, username, passwordHash; 6 7 static SmsapiClient createSmsapiPl(string username, string passwordHash) 8 { 9 return new SmsapiClient("https://api.smsapi.pl", username, passwordHash); 10 } 11 12 static SmsapiClient createSmsapiPlAlternative(string username, string passwordHash) 13 { 14 return new SmsapiClient("https://api2.smsapi.pl", username, passwordHash); 15 } 16 17 static SmsapiClient createSmsapiCom(string username, string passwordHash) 18 { 19 return new SmsapiClient("https://api.smsapi.com", username, passwordHash); 20 } 21 22 static SmsapiClient createSmsapiComAlternative(string username, string passwordHash) 23 { 24 return new SmsapiClient("https://api2.smsapi.com", username, passwordHash); 25 } 26 27 this(string host, string username, string passwordHash) 28 { 29 this.host = host; 30 this.username = username; 31 this.passwordHash = passwordHash; 32 } 33 34 SmsSender createSmsSender() 35 { 36 return new SmsSender(host, username, passwordHash); 37 } 38 } 39 40 class SmsSender 41 { 42 import std.datetime: SysTime; 43 import std.array: join; 44 45 private { 46 immutable string host; 47 string[string] query; 48 } 49 50 this(string host, string username, string passwordHash) 51 { 52 this.host = host; 53 54 query["username"] = username; 55 query["password"] = passwordHash; 56 } 57 58 SmsSender flash() 59 { 60 query["flash"] = "1"; 61 62 return this; 63 } 64 65 SmsSender test() 66 { 67 query["test"] = "1"; 68 69 return this; 70 } 71 72 SmsSender details() 73 { 74 query["details"] = "1"; 75 76 return this; 77 } 78 79 SmsSender idx(string idx) 80 { 81 query["idx"] = idx; 82 83 return this; 84 } 85 86 SmsSender checkIdx() 87 { 88 query["check_idx"] = "1"; 89 90 return this; 91 } 92 93 SmsSender date(SysTime date) 94 { 95 query["date"] = date.toISOExtString; 96 97 return this; 98 } 99 100 SmsSender dateValidate() 101 { 102 query["date_validate"] = "1"; 103 104 return this; 105 } 106 107 SmsSender expirationDate(SysTime expirationDate) 108 { 109 query["expiration_date"] = expirationDate.toISOExtString; 110 111 return this; 112 } 113 114 SmsSender from(string from) 115 { 116 query["from"] = from; 117 118 return this; 119 } 120 121 SmsSender udh(string udh) 122 { 123 query["udh"] = udh; 124 query["datacoding"] = "bin"; 125 126 return this; 127 } 128 129 SmsSender discountGroup(string discountGroup) 130 { 131 query["discount_group"] = discountGroup; 132 133 return this; 134 } 135 136 SmsSender partnerId(string partnerId) 137 { 138 query["partner_id"] = partnerId; 139 140 return this; 141 } 142 143 SmsSender parameters(string[] param1, string[] param2, string[] param3, string[] param4) 144 { 145 query["param1"] = param1.join("|"); 146 query["param2"] = param2.join("|"); 147 query["param3"] = param3.join("|"); 148 query["param4"] = param4.join("|"); 149 150 return this; 151 } 152 153 SmsSender message(string message) 154 { 155 query["message"] = message; 156 157 return this; 158 } 159 160 SmsSender noUnicode() 161 { 162 query["nounicode"] = "1"; 163 164 return this; 165 } 166 167 SmsSender normalize() 168 { 169 query["normalize"] = "1"; 170 171 return this; 172 } 173 174 SmsSender skipForeign() 175 { 176 query["skip_foreign"] = "1"; 177 178 return this; 179 } 180 181 SmsSender allowDuplicates() 182 { 183 query["allow_duplicates"] = "1"; 184 185 return this; 186 } 187 188 SmsSender to(string[] to) 189 { 190 query["to"] = to.join(","); 191 192 return this; 193 } 194 195 SmsSender notifyUrl(string notifyUrl) 196 { 197 query["notify_url"] = notifyUrl; 198 199 return this; 200 } 201 202 SmsSender group(string group) 203 { 204 query["group"] = group; 205 206 return this; 207 } 208 209 SmsSender maxParts(ubyte maxParts) 210 { 211 import std.conv: text; 212 213 query["max_parts"] = maxParts.text; 214 215 return this; 216 } 217 218 SmsSender encoding(string encoding) 219 { 220 query["encoding"] = encoding; 221 222 return this; 223 } 224 225 char[] send() 226 { 227 import std.net.curl: get; 228 229 string queryString = "json=1"; 230 foreach (string name, string value; query) { 231 queryString ~= "&" ~ name ~ "=" ~ value; 232 } 233 234 return get(host ~ "/sms.do?" ~ queryString); 235 } 236 } 237 238 unittest 239 { 240 import std.stdio: writeln; 241 242 SmsapiClient client = SmsapiClient.createSmsapiPl("email", "password"); 243 SmsSender sender = client.createSmsSender; 244 245 char[] output = sender 246 .test() 247 .to(["790216004"]) 248 .message("test") 249 .send(); 250 251 writeln(output); 252 }