1 module iyzipay.requests; 2 3 import std.json: JSONValue, parseJSON; 4 import std.net.curl: HTTP; 5 import std.conv: to; 6 7 public import iyzipay.iyzipayresource; 8 public import iyzipay.pkibuilder; 9 10 alias GET = HTTP.Method.get; 11 alias POST = HTTP.Method.post; 12 alias DELETE = HTTP.Method.del; 13 14 class ApiTest : IyzipayResource 15 { 16 public string retrieve(Options options) 17 { 18 return connectHTTP(GET, options.baseUrl ~ "/payment/test", options); 19 } 20 } 21 22 class BinNumber : IyzipayResource 23 { 24 public string retrieve(string request, Options options) 25 { 26 string pki = toPkiString(request); 27 return connectHTTP(POST, options.baseUrl ~ "/payment/bin/check", options, request, pki); 28 } 29 30 private string toPkiString(string request) 31 { 32 JSONValue json = parseJSON(request); 33 34 PkiBuilder pki = new PkiBuilder(); 35 pki.append("locale", json["locale"].str); 36 pki.append("conversationId", json["conversationId"].str); 37 pki.append("binNumber", json["binNumber"].str); 38 return pki.getPkiString; 39 } 40 } 41 42 class InstallmentInfo : IyzipayResource 43 { 44 public string retrieve(string request, Options options) 45 { 46 string pki = toPkiString(request); 47 return connectHTTP(POST, options.baseUrl ~ "/payment/iyzipos/installment", options, request, pki); 48 } 49 50 private string toPkiString(string request) 51 { 52 JSONValue json = parseJSON(request); 53 54 PkiBuilder pki = new PkiBuilder(); 55 pki.append("locale", json["locale"].str); 56 pki.append("conversationId", json["conversationId"].str); 57 pki.append("binNumber", json["binNumber"].str); 58 pki.append("price", json["price"].str); 59 return pki.getPkiString; 60 } 61 } 62 63 class Payment : IyzipayResource 64 { 65 public string create(string request, Options options) 66 { 67 string pki = toPkiStringCreate(request); 68 return connectHTTP(POST, options.baseUrl ~ "/payment/auth", options, request, pki); 69 } 70 71 public string retrieve(string request, Options options) 72 { 73 string pki = toPkiStringRetrieve(request); 74 return connectHTTP(POST, options.baseUrl ~ "/payment/detail", options, request, pki); 75 } 76 77 private string toPkiStringCreate(string request) 78 { 79 JSONValue json = parseJSON(request); 80 81 PkiBuilder pki = new PkiBuilder(); 82 pki.append("locale", json["locale"].str); 83 pki.append("conversationId", json["conversationId"].str); 84 pki.appendPrice("price", json["price"].str); 85 pki.appendPrice("paidPrice", json["paidPrice"].str); 86 pki.append("installment", json["installment"].str); 87 pki.append("paymentChannel", json["paymentChannel"].str); 88 pki.append("basketId", json["basketId"].str); 89 pki.append("paymentGroup", json["paymentGroup"].str); 90 pki.append("paymentCard", pkiPaymentCard(json["paymentCard"])); 91 pki.append("buyer", pkiBuyer(json["buyer"])); 92 pki.append("shippingAddress", pkiAddress(json["shippingAddress"])); 93 pki.append("billingAddress", pkiAddress(json["billingAddress"])); 94 pki.append("basketItems", pkiBasketItems(json["basketItems"].array())); 95 pki.append("currency", json["currency"].str); 96 return pki.getPkiString; 97 } 98 99 private string toPkiStringRetrieve(string request) 100 { 101 JSONValue json = parseJSON(request); 102 103 PkiBuilder pki = new PkiBuilder(); 104 pki.append("locale", json["locale"].str); 105 pki.append("conversationId", json["conversationId"].str); 106 pki.append("paymentId", json["paymentId"].str); 107 pki.append("paymentConversationId", json["paymentConversationId"].str); 108 return pki.getPkiString; 109 } 110 111 private string pkiBasketItems(JSONValue[] jsonArray) 112 { 113 string bastketItems; 114 foreach (JSONValue item; jsonArray) 115 { 116 PkiBuilder pki = new PkiBuilder(); 117 pki.append("id", item["id"].str); 118 pki.appendPrice("price", item["price"].str); 119 pki.append("name", item["name"].str); 120 pki.append("category1", item["category1"].str); 121 pki.append("category2", item["category2"].str); 122 pki.append("itemType", item["itemType"].str); 123 bastketItems ~= pki.getPkiString ~ ", "; 124 } 125 return "[" ~ bastketItems[0..$-2] ~ "]"; 126 } 127 128 private string pkiAddress(JSONValue json) 129 { 130 PkiBuilder pki = new PkiBuilder(); 131 pki.append("address", json["address"].str); 132 pki.append("zipCode", json["zipCode"].str); 133 pki.append("contactName", json["contactName"].str); 134 pki.append("city", json["city"].str); 135 pki.append("country", json["country"].str); 136 return pki.getPkiString; 137 } 138 139 private string pkiBuyer(JSONValue json) 140 { 141 PkiBuilder pki = new PkiBuilder(); 142 pki.append("id", json["id"].str); 143 pki.append("name", json["name"].str); 144 pki.append("surname", json["surname"].str); 145 pki.append("identityNumber", json["identityNumber"].str); 146 pki.append("email", json["email"].str); 147 pki.append("gsmNumber", json["gsmNumber"].str); 148 pki.append("registrationDate", json["registrationDate"].str); 149 pki.append("lastLoginDate", json["lastLoginDate"].str); 150 pki.append("registrationAddress", json["registrationAddress"].str); 151 pki.append("city", json["city"].str); 152 pki.append("country", json["country"].str); 153 pki.append("zipCode", json["zipCode"].str); 154 pki.append("ip", json["ip"].str); 155 return pki.getPkiString; 156 } 157 158 private string pkiPaymentCard(JSONValue json) 159 { 160 PkiBuilder pki = new PkiBuilder(); 161 pki.append("cardHolderName", json["cardHolderName"].str); 162 pki.append("cardNumber", json["cardNumber"].str); 163 pki.append("expireYear", json["expireYear"].str); 164 pki.append("expireMonth", json["expireMonth"].str); 165 pki.append("cvc", json["cvc"].str); 166 pki.append("registerCard", to!string(json["registerCard"].integer)); 167 return pki.getPkiString; 168 } 169 } 170 171 class ThreedsInitialize: IyzipayResource 172 { 173 public string create(string request, Options options) 174 { 175 string pki = toPkiString(request); 176 return connectHTTP(POST, options.baseUrl ~ "/payment/3dsecure/initialize", options, request, pki); 177 } 178 179 private string toPkiString(string request) 180 { 181 JSONValue json = parseJSON(request); 182 183 PkiBuilder pki = new PkiBuilder(); 184 pki.append("locale", json["locale"].str); 185 pki.append("conversationId", json["conversationId"].str); 186 pki.appendPrice("price", json["price"].str); 187 pki.appendPrice("paidPrice", json["paidPrice"].str); 188 pki.append("installment", json["installment"].str); 189 pki.append("paymentChannel", json["paymentChannel"].str); 190 pki.append("basketId", json["basketId"].str); 191 pki.append("paymentGroup", json["paymentGroup"].str); 192 pki.append("paymentCard", pkiPaymentCard(json["paymentCard"])); 193 pki.append("buyer", pkiBuyer(json["buyer"])); 194 pki.append("shippingAddress", pkiAddress(json["shippingAddress"])); 195 pki.append("billingAddress", pkiAddress(json["billingAddress"])); 196 pki.append("basketItems", pkiBasketItems(json["basketItems"].array())); 197 pki.append("currency", json["currency"].str); 198 pki.append("callbackUrl", json["callbackUrl"].str); 199 return pki.getPkiString; 200 } 201 202 private string pkiBasketItems(JSONValue[] jsonArray) 203 { 204 string bastketItems; 205 foreach (JSONValue item; jsonArray) 206 { 207 PkiBuilder pki = new PkiBuilder(); 208 pki.append("id", item["id"].str); 209 pki.appendPrice("price", item["price"].str); 210 pki.append("name", item["name"].str); 211 pki.append("category1", item["category1"].str); 212 pki.append("category2", item["category2"].str); 213 pki.append("itemType", item["itemType"].str); 214 bastketItems ~= pki.getPkiString ~ ", "; 215 } 216 return "[" ~ bastketItems[0..$-2] ~ "]"; 217 } 218 219 private string pkiAddress(JSONValue json) 220 { 221 PkiBuilder pki = new PkiBuilder(); 222 pki.append("address", json["address"].str); 223 pki.append("zipCode", json["zipCode"].str); 224 pki.append("contactName", json["contactName"].str); 225 pki.append("city", json["city"].str); 226 pki.append("country", json["country"].str); 227 return pki.getPkiString; 228 } 229 230 private string pkiBuyer(JSONValue json) 231 { 232 PkiBuilder pki = new PkiBuilder(); 233 pki.append("id", json["id"].str); 234 pki.append("name", json["name"].str); 235 pki.append("surname", json["surname"].str); 236 pki.append("identityNumber", json["identityNumber"].str); 237 pki.append("email", json["email"].str); 238 pki.append("gsmNumber", json["gsmNumber"].str); 239 pki.append("registrationDate", json["registrationDate"].str); 240 pki.append("lastLoginDate", json["lastLoginDate"].str); 241 pki.append("registrationAddress", json["registrationAddress"].str); 242 pki.append("city", json["city"].str); 243 pki.append("country", json["country"].str); 244 pki.append("zipCode", json["zipCode"].str); 245 pki.append("ip", json["ip"].str); 246 return pki.getPkiString; 247 } 248 249 private string pkiPaymentCard(JSONValue json) 250 { 251 PkiBuilder pki = new PkiBuilder(); 252 pki.append("cardHolderName", json["cardHolderName"].str); 253 pki.append("cardNumber", json["cardNumber"].str); 254 pki.append("expireYear", json["expireYear"].str); 255 pki.append("expireMonth", json["expireMonth"].str); 256 pki.append("cvc", json["cvc"].str); 257 pki.append("registerCard", to!string(json["registerCard"].integer)); 258 return pki.getPkiString; 259 } 260 } 261 262 class ThreedsPayment: IyzipayResource 263 { 264 public string create(string request, Options options) 265 { 266 string pki = toPkiStringCreate(request); 267 return connectHTTP(POST, options.baseUrl ~ "/payment/3dsecure/auth", options, request, pki); 268 } 269 270 public string retrieve(string request, Options options) 271 { 272 string pki = toPkiStringRetrieve(request); 273 return connectHTTP(POST, options.baseUrl ~ "/payment/detail", options, request, pki); 274 } 275 276 private string toPkiStringCreate(string request) 277 { 278 JSONValue json = parseJSON(request); 279 280 PkiBuilder pki = new PkiBuilder(); 281 pki.append("locale", json["locale"].str); 282 pki.append("conversationId", json["conversationId"].str); 283 pki.append("paymentId", json["paymentId"].str); 284 pki.append("conversationData", json["conversationData"].str); 285 return pki.getPkiString; 286 } 287 288 private string toPkiStringRetrieve(string request) 289 { 290 JSONValue json = parseJSON(request); 291 292 PkiBuilder pki = new PkiBuilder(); 293 pki.append("locale", json["locale"].str); 294 pki.append("conversationId", json["conversationId"].str); 295 pki.append("paymentId", json["paymentId"].str); 296 pki.append("paymentConversationId", json["paymentConversationId"].str); 297 return pki.getPkiString; 298 } 299 } 300 301 class Cancel: IyzipayResource 302 { 303 public string create(string request, Options options) 304 { 305 string pki = toPkiString(request); 306 return connectHTTP(POST, options.baseUrl ~ "/payment/cancel", options, request, pki); 307 } 308 309 private string toPkiString(string request) 310 { 311 JSONValue json = parseJSON(request); 312 313 PkiBuilder pki = new PkiBuilder(); 314 pki.append("locale", json["locale"].str); 315 pki.append("conversationId", json["conversationId"].str); 316 pki.append("paymentId", json["paymentId"].str); 317 pki.append("ip", json["ip"].str); 318 return pki.getPkiString; 319 } 320 } 321 322 class Refund: IyzipayResource 323 { 324 public string create(string request, Options options) 325 { 326 string pki = toPkiString(request); 327 import std.stdio; 328 writeln("-> " ~ pki); 329 return connectHTTP(POST, options.baseUrl ~ "/payment/refund", options, request, pki); 330 } 331 332 private string toPkiString(string request) 333 { 334 JSONValue json = parseJSON(request); 335 336 PkiBuilder pki = new PkiBuilder(); 337 pki.append("locale", json["locale"].str); 338 pki.append("conversationId", json["conversationId"].str); 339 pki.append("paymentTransactionId", json["paymentTransactionId"].str); 340 pki.appendPrice("price", json["price"].str); 341 pki.append("ip", json["ip"].str); 342 pki.append("currency", json["currency"].str); 343 return pki.getPkiString; 344 } 345 } 346 347 class Card: IyzipayResource 348 { 349 public string create(string request, Options options) 350 { 351 string pki = toPkiStringCreate(request); 352 return connectHTTP(POST, options.baseUrl ~ "/cardstorage/card", options, request, pki); 353 } 354 355 public string delete_(string request, Options options) 356 { 357 string pki = toPkiStringDelete(request); 358 return connectHTTP(DELETE, options.baseUrl ~ "/cardstorage/card", options, request, pki); 359 } 360 361 private string toPkiStringCreate(string request) 362 { 363 JSONValue json = parseJSON(request); 364 365 PkiBuilder pki = new PkiBuilder(); 366 pki.append("locale", json["locale"].str); 367 pki.append("conversationId", json["conversationId"].str); 368 pki.append("externalId", json["externalId"].str); 369 pki.append("email", json["email"].str); 370 pki.append("cardUserKey", json["cardUserKey"].str); 371 pki.append("card", pkiCard(json["card"])); 372 return pki.getPkiString; 373 } 374 375 private string toPkiStringDelete(string request) 376 { 377 JSONValue json = parseJSON(request); 378 379 PkiBuilder pki = new PkiBuilder(); 380 pki.append("locale", json["locale"].str); 381 pki.append("conversationId", json["conversationId"].str); 382 pki.append("cardUserKey", json["cardUserKey"].str); 383 pki.append("cardToken", json["cardToken"].str); 384 return pki.getPkiString; 385 } 386 387 private string pkiCard(JSONValue json) 388 { 389 PkiBuilder pki = new PkiBuilder(); 390 pki.append("cardAlias", json["cardAlias"].str); 391 pki.append("cardNumber", json["cardNumber"].str); 392 pki.append("expireYear", json["expireYear"].str); 393 pki.append("expireMonth", json["expireMonth"].str); 394 pki.append("cardHolderName", json["cardHolderName"].str); 395 return pki.getPkiString; 396 } 397 } 398 399 class CardList: IyzipayResource 400 { 401 public string retrieve(string request, Options options) 402 { 403 string pki = toPkiString(request); 404 return connectHTTP(POST, options.baseUrl ~ "/cardstorage/cards", options, request, pki); 405 } 406 407 private string toPkiString(string request) 408 { 409 JSONValue json = parseJSON(request); 410 411 PkiBuilder pki = new PkiBuilder(); 412 pki.append("locale", json["locale"].str); 413 pki.append("conversationId", json["conversationId"].str); 414 pki.append("cardUserKey", json["cardUserKey"].str); 415 return pki.getPkiString; 416 } 417 }