/// <summary> /// Captures payment /// </summary> /// <param name="capturePaymentRequest">Capture payment request</param> /// <returns>Capture payment result</returns> public CapturePaymentResult Capture(CapturePaymentRequest capturePaymentRequest) { var result = new CapturePaymentResult(); result.AddError("Capture method not supported"); return result; }
/// <summary> /// Capture an order (from admin panel) /// </summary> /// <param name="order">Order</param> /// <returns>A list of errors; empty list if no errors</returns> public virtual IList<string> Capture(Order order) { if (order == null) throw new ArgumentNullException("order"); if (!CanCapture(order)) throw new NasException("Cannot do capture for order."); var request = new CapturePaymentRequest(); CapturePaymentResult result = null; try { //old info from placing order request.Order = order; result = _paymentService.Capture(request); if (result.Success) { var paidDate = order.PaidDateUtc; if (result.NewPaymentStatus == PaymentStatus.Paid) paidDate = DateTime.UtcNow; order.CaptureTransactionId = result.CaptureTransactionId; order.CaptureTransactionResult = result.CaptureTransactionResult; order.PaymentStatus = result.NewPaymentStatus; order.PaidDateUtc = paidDate; _orderService.UpdateOrder(order); //add a note order.OrderNotes.Add(new OrderNote() { Note = "Order has been captured", DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); CheckOrderStatus(order); //raise event if (order.PaymentStatus == PaymentStatus.Paid) { _eventPublisher.PublishOrderPaid(order); } } } catch (Exception exc) { if (result == null) result = new CapturePaymentResult(); result.AddError(string.Format("Error: {0}. Full exception: {1}", exc.Message, exc.ToString())); } //process errors string error = ""; for (int i = 0; i < result.Errors.Count; i++) { error += string.Format("Error {0}: {1}", i, result.Errors[i]); if (i != result.Errors.Count - 1) error += ". "; } if (!String.IsNullOrEmpty(error)) { //add a note order.OrderNotes.Add(new OrderNote() { Note = string.Format("Unable to capture order. {0}", error), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); //log it string logError = string.Format("Error capturing order #{0}. Error: {1}", order.Id, error); _logger.InsertLog(LogLevel.Error, logError, logError); } return result.Errors; }
/// <summary> /// Captures payment /// </summary> /// <param name="capturePaymentRequest">Capture payment request</param> /// <returns>Capture payment result</returns> public CapturePaymentResult Capture(CapturePaymentRequest capturePaymentRequest) { var result = new CapturePaymentResult(); string googleOrderNumber = capturePaymentRequest.Order.AuthorizationTransactionId; var chargeOrderRequest = new GCheckout.OrderProcessing.ChargeOrderRequest(googleOrderNumber); var chargeOrderResponse = chargeOrderRequest.Send(); if (chargeOrderResponse.IsGood) { result.NewPaymentStatus = PaymentStatus.Paid; result.CaptureTransactionResult = chargeOrderResponse.ResponseXml; } else { result.AddError(chargeOrderResponse.ErrorMessage); } return result; }
/// <summary> /// Captures payment /// </summary> /// <param name="capturePaymentRequest">Capture payment request</param> /// <returns>Capture payment result</returns> public CapturePaymentResult Capture(CapturePaymentRequest capturePaymentRequest) { var result = new CapturePaymentResult(); string authorizationId = capturePaymentRequest.Order.AuthorizationTransactionId; var req = new DoCaptureReq(); req.DoCaptureRequest = new DoCaptureRequestType(); req.DoCaptureRequest.Version = GetApiVersion(); req.DoCaptureRequest.AuthorizationID = authorizationId; req.DoCaptureRequest.Amount = new BasicAmountType(); req.DoCaptureRequest.Amount.Value = Math.Round(capturePaymentRequest.Order.OrderTotal, 2).ToString("N", new CultureInfo("en-us")); req.DoCaptureRequest.Amount.currencyID = PaypalHelper.GetPaypalCurrency(_currencyService.GetCurrencyById(_currencySettings.PrimaryStoreCurrencyId)); req.DoCaptureRequest.CompleteType = CompleteCodeType.Complete; using (var service2 = new PayPalAPIAASoapBinding()) { if (!_paypalDirectPaymentSettings.UseSandbox) service2.Url = "https://api-3t.paypal.com/2.0/"; else service2.Url = "https://api-3t.sandbox.paypal.com/2.0/"; service2.RequesterCredentials = new CustomSecurityHeaderType(); service2.RequesterCredentials.Credentials = new UserIdPasswordType(); service2.RequesterCredentials.Credentials.Username = _paypalDirectPaymentSettings.ApiAccountName; service2.RequesterCredentials.Credentials.Password = _paypalDirectPaymentSettings.ApiAccountPassword; service2.RequesterCredentials.Credentials.Signature = _paypalDirectPaymentSettings.Signature; service2.RequesterCredentials.Credentials.Subject = ""; DoCaptureResponseType response = service2.DoCapture(req); string error = ""; bool success = PaypalHelper.CheckSuccess(response, out error); if (success) { result.NewPaymentStatus = PaymentStatus.Paid; result.CaptureTransactionId = response.DoCaptureResponseDetails.PaymentInfo.TransactionID; result.CaptureTransactionResult = response.Ack.ToString(); } else { result.AddError(error); } } return result; }
/// <summary> /// Captures payment /// </summary> /// <param name="capturePaymentRequest">Capture payment request</param> /// <returns>Capture payment result</returns> public CapturePaymentResult Capture(CapturePaymentRequest capturePaymentRequest) { var result = new CapturePaymentResult(); WebClient webClient = new WebClient(); NameValueCollection form = new NameValueCollection(); form.Add("x_login", _authorizeNetPaymentSettings.LoginId); form.Add("x_tran_key", _authorizeNetPaymentSettings.TransactionKey); //we should not send "x_test_request" parameter. otherwise, the transaction won't be logged in the sandbox //if (_authorizeNetPaymentSettings.UseSandbox) // form.Add("x_test_request", "TRUE"); //else // form.Add("x_test_request", "FALSE"); form.Add("x_delim_data", "TRUE"); form.Add("x_delim_char", "|"); form.Add("x_encap_char", ""); form.Add("x_version", GetApiVersion()); form.Add("x_relay_response", "FALSE"); form.Add("x_method", "CC"); form.Add("x_currency_code", _currencyService.GetCurrencyById(_currencySettings.PrimaryStoreCurrencyId).CurrencyCode); form.Add("x_type", "PRIOR_AUTH_CAPTURE"); var orderTotal = Math.Round(capturePaymentRequest.Order.OrderTotal, 2); form.Add("x_amount", orderTotal.ToString("0.00", CultureInfo.InvariantCulture)); string[] codes = capturePaymentRequest.Order.AuthorizationTransactionCode.Split(','); //x_trans_id. When x_test_request (sandbox) is set to a positive response, //or when Test mode is enabled on the payment gateway, this value will be "0". form.Add("x_trans_id", codes[0]); string reply = null; Byte[] responseData = webClient.UploadValues(GetAuthorizeNETUrl(), form); reply = Encoding.ASCII.GetString(responseData); if (!String.IsNullOrEmpty(reply)) { string[] responseFields = reply.Split('|'); switch (responseFields[0]) { case "1": result.CaptureTransactionId = string.Format("{0},{1}", responseFields[6], responseFields[4]); result.CaptureTransactionResult = string.Format("Approved ({0}: {1})", responseFields[2], responseFields[3]); //result.AVSResult = responseFields[5]; //responseFields[38]; result.NewPaymentStatus = PaymentStatus.Paid; break; case "2": result.AddError(string.Format("Declined ({0}: {1})", responseFields[2], responseFields[3])); break; case "3": result.AddError(string.Format("Error: {0}", reply)); break; } } else { result.AddError("Authorize.NET unknown error"); } return result; }