public async Task <BuyItemRes> BuyItem(BuyItemReq request) { return(await Task.Run(() => { try { /*Will hardcode response, but in production, data could be stored in db and * payment reference generated after payment is confirmed */ BuyItemRes buyItemRes = new BuyItemRes() { ReferenceNo = "XXXXXX", ResponseCode = $"0{((int)InternalResponseCode.Succesful).ToString()}", ResponseMessage = "Payment Successful" }; return buyItemRes; } catch (Exception ex) { logger.Error(ex); return null; } })); }
public async Task <HttpResponseMessage> BuyItem(BuyItemReq req) { BuyItemRes res = new BuyItemRes(); try { if (req == null) { res.ResponseCode = ((int)InternalResponseCode.InvalidRequestBody).ToString(); res.ResponseMessage = "Request body cannot be null"; return(Request.CreateResponse(HttpStatusCode.BadRequest, res)); } CommonLib commonLib = new CommonLib(); var identity = (ClaimsIdentity)User.Identity; //get merchantname from identity var merchantname = identity.Name; //get merchant profile from name var profile = commonLib.GetUserProfileByMerchantName(merchantname); if (profile == null) { //invalid profile res.ResponseCode = ((int)InternalResponseCode.InvalidCredential).ToString(); res.ResponseMessage = "Invalid Credential"; return(Request.CreateResponse(HttpStatusCode.Forbidden, res)); } //generate hash and compare with what was included in the requestbody var mygeneratedhash = commonLib.GenerateSHA256Hash(profile.SecretKey, req.timestamp, profile.ApiKey, req.ReceiptRef); //compare with hash sent by client if (mygeneratedhash != req.HashValue || string.IsNullOrEmpty(req.HashValue)) { //unrecognised user res.ResponseCode = ((int)InternalResponseCode.InvalidHash).ToString(); res.ResponseMessage = "Invalid Hash"; return(Request.CreateResponse(HttpStatusCode.Forbidden, res)); } res = await commonLib.BuyItem(req); return(Request.CreateResponse(HttpStatusCode.OK, res)); } catch (Exception ex) { logger.Error(ex); res.ResponseCode = ((int)InternalResponseCode.Exception).ToString(); res.ResponseMessage = "Exception Occurred"; return(Request.CreateResponse(HttpStatusCode.ExpectationFailed, res)); } }