public HttpResponseMessage OnAuthorization() { AmexAuthRequest request = ParseRequest(); AmexAuthResponse response = new AmexAuthResponse(); CommerceContext context = CommerceContext.BuildSynchronousContext("Amex payment authorization request", request, response); context.Log.Verbose("Amex payment authorization payload : \r\n\"{0}\".", Request.Content.ReadAsStringAsync().Result); if (IsAuthorized(context)) { Stopwatch callTimer = Stopwatch.StartNew(); HttpStatusCode httpStatusCode = ProcessAmexAuthCall(context, callTimer, () => { AmexAuthorizationExecutor amexAuthorizationExecutor = new AmexAuthorizationExecutor(context); return(amexAuthorizationExecutor.Execute()); }); if (httpStatusCode != HttpStatusCode.OK) { response.ResponseCode = AmexAuthResponseCode.AmexAuthInternalError; context.Log.Warning("Amex payment authorization processing error. Request : {0} ", request.ToString()); } HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <AmexAuthResponse>(response, new XmlMediaTypeFormatter()) }; return(message); } return(new HttpResponseMessage(HttpStatusCode.Unauthorized)); }
/// <summary> /// Helper Method to parse incoming payload from AMEX. /// </summary> /// <returns> /// Auth representation /// </returns> private AmexAuthRequest ParseRequest() { string payLoad = Request.Content.ReadAsStringAsync().Result; AmexAuthRequest resultingMessage = null; XmlSerializer serializer = new XmlSerializer(typeof(AmexAuthRequest)); using (StringReader rdr = new StringReader(payLoad)) { resultingMessage = (AmexAuthRequest)serializer.Deserialize(rdr); } return(resultingMessage); }
/// <summary> /// Marshals information from the Amex Auth request into the Authorization object in the context. /// </summary> public void MarshalAuthorization() { AmexAuthRequest request = (AmexAuthRequest)Context[Key.Request]; // Populate the Authorization. DataModels.Authorization authorization = (DataModels.Authorization)Context[Key.Authorization]; authorization.AuthorizationAmount = AmexUtilities.ParseAuthAmount(request.TransactionAmount); authorization.Currency = "USD"; authorization.TransactionId = request.TransactionId; authorization.PurchaseDateTime = AmexUtilities.ParseAuthDateTime(request.TransactionTime); // Populate the Amex Auth Info. Context[Key.PartnerDealId] = request.OfferId; Context[Key.PartnerCardId] = request.CardToken; Context[Key.PartnerMerchantId] = request.MerchantNumber; }