public void RefundTransaction(string TransactionID) { RefundTransactionRequestType refundRequest = new RefundTransactionRequestType(); BasicAmountType amount = new BasicAmountType(); amount.currencyID = CurrencyCodeType.USD; refundRequest.Memo = "Transaction ID: " + TransactionID; refundRequest.RefundType = RefundPurposeTypeCodeType.Full; refundRequest.TransactionID = TransactionID; refundRequest.Version = "2.0"; RefundTransactionReq request = new RefundTransactionReq(); request.RefundTransactionRequest = refundRequest; try { RefundTransactionResponseType response = service.RefundTransaction(request); string errors = CheckForErrors(response); if (errors == string.Empty) { IsSubmissionSuccess = true; } else { IsSubmissionSuccess = false; SubmissionError = errors; } } catch (Exception ex) { throw ex; } }
/// <summary> /// Refunds payment /// </summary> /// <param name="order">Order</param> /// <param name="cancelPaymentResult">Cancel payment result</param> public void Refund(Order order, ref CancelPaymentResult cancelPaymentResult) { InitSettings(); string transactionID = cancelPaymentResult.CaptureTransactionId; RefundTransactionReq req = new RefundTransactionReq(); req.RefundTransactionRequest = new RefundTransactionRequestType(); //NOTE: Specify amount in partial refund req.RefundTransactionRequest.RefundType = RefundType.Full; req.RefundTransactionRequest.RefundTypeSpecified = true; req.RefundTransactionRequest.Version = this.APIVersion; req.RefundTransactionRequest.TransactionID = transactionID; RefundTransactionResponseType response = service1.RefundTransaction(req); string error = string.Empty; bool Success = PaypalHelper.CheckSuccess(response, out error); if (Success) { cancelPaymentResult.PaymentStatus = PaymentStatusEnum.Refunded; //cancelPaymentResult.RefundTransactionID = response.RefundTransactionID; } else { cancelPaymentResult.Error = error; } }
/// <summary> /// Handles refund /// </summary> /// <param name="request">RefundPaymentRequest</param> /// <returns>RefundPaymentResult</returns> public override RefundPaymentResult Refund(RefundPaymentRequest request) { var result = new RefundPaymentResult(); string transactionId = request.Order.CaptureTransactionId; var req = new RefundTransactionReq(); req.RefundTransactionRequest = new RefundTransactionRequestType(); //NOTE: Specify amount in partial refund req.RefundTransactionRequest.RefundType = RefundType.Full; req.RefundTransactionRequest.RefundTypeSpecified = true; req.RefundTransactionRequest.Version = PayPalHelper.GetApiVersion(); req.RefundTransactionRequest.TransactionID = transactionId; using (var service = new PayPalAPISoapBinding()) { service.Url = PayPalHelper.GetPaypalServiceUrl(Settings); service.RequesterCredentials = PayPalHelper.GetPaypalApiCredentials(Settings); RefundTransactionResponseType response = service.RefundTransaction(req); string error = string.Empty; bool Success = PayPalHelper.CheckSuccess(_helper, response, out error); if (Success) { result.NewPaymentStatus = PaymentStatus.Refunded; //cancelPaymentResult.RefundTransactionID = response.RefundTransactionID; } else { result.AddError(error); } } return(result); }
/// <summary> /// Refunds a payment /// </summary> /// <param name="refundPaymentRequest">Request</param> /// <returns>Result</returns> public RefundPaymentResult Refund(RefundPaymentRequest refundPaymentRequest) { var result = new RefundPaymentResult(); string transactionId = refundPaymentRequest.Order.CaptureTransactionId; var req = new RefundTransactionReq(); req.RefundTransactionRequest = new RefundTransactionRequestType(); //NOTE: Specify amount in partial refund req.RefundTransactionRequest.RefundType = RefundType.Full; req.RefundTransactionRequest.RefundTypeSpecified = true; req.RefundTransactionRequest.Version = GetApiVersion(); req.RefundTransactionRequest.TransactionID = transactionId; using (var service1 = new PayPalAPISoapBinding()) { if (!_paypalDirectPaymentSettings.UseSandbox) { service1.Url = "https://api-3t.paypal.com/2.0/"; } else { service1.Url = "https://api-3t.sandbox.paypal.com/2.0/"; } service1.RequesterCredentials = new CustomSecurityHeaderType(); service1.RequesterCredentials.Credentials = new UserIdPasswordType(); service1.RequesterCredentials.Credentials.Username = _paypalDirectPaymentSettings.ApiAccountName; service1.RequesterCredentials.Credentials.Password = _paypalDirectPaymentSettings.ApiAccountPassword; service1.RequesterCredentials.Credentials.Signature = _paypalDirectPaymentSettings.Signature; service1.RequesterCredentials.Credentials.Subject = ""; RefundTransactionResponseType response = service1.RefundTransaction(req); string error = string.Empty; bool Success = PaypalHelper.CheckSuccess(response, out error); if (Success) { result.NewPaymentStatus = PaymentStatus.Refunded; //cancelPaymentResult.RefundTransactionID = response.RefundTransactionID; } else { result.AddError(error); } } return(result); }
// if RefundAmount == 0.0M, then then ENTIRE order amount will be refunded! public override string RefundOrder(int OriginalOrderNumber, int NewOrderNumber, decimal RefundAmount, String RefundReason, Address UseBillingAddress) { String result = String.Empty; DB.ExecuteSQL("update orders set RefundTXCommand=NULL, RefundTXResult=NULL where OrderNumber=" + OriginalOrderNumber.ToString()); String TransID = String.Empty; Decimal OrderTotal = System.Decimal.Zero; using (var con = new SqlConnection(DB.GetDBConn())) { con.Open(); using (var rs = DB.GetRS("select * from Orders with (NOLOCK) where OrderNumber=" + OriginalOrderNumber.ToString(), con)) { if (rs.Read()) { TransID = Regex.Match(DB.RSField(rs, "AuthorizationPNREF"), "(?<=CAPTURE=)[0-9A-Z]+", RegexOptions.Compiled).ToString(); OrderTotal = DB.RSFieldDecimal(rs, "OrderTotal"); } } } if (TransID.Length == 0 || TransID == "0") { result = "Invalid or Empty Transaction ID"; } else { try { RefundTransactionReq RefundReq = new RefundTransactionReq(); RefundTransactionRequestType RefundRequestType = new RefundTransactionRequestType(); RefundTransactionResponseType RefundResponse; BasicAmountType BasicAmount = new BasicAmountType(); RefundRequestType.TransactionID = TransID; RefundRequestType.Version = API_VER; BasicAmount.currencyID = (CurrencyCodeType)Enum.Parse(typeof(CurrencyCodeType), AppLogic.AppConfig("Localization.StoreCurrency"), true); //If partial refund set value ( like 1.95). If FULL Refund leave it empty. The transactionID will take care of the amount if (OrderTotal == RefundAmount || RefundAmount == 0.0M) { RefundRequestType.RefundType = RefundType.Full; } else { BasicAmount.Value = Localization.CurrencyStringForGatewayWithoutExchangeRate(RefundAmount); RefundRequestType.RefundType = RefundType.Partial; } RefundRequestType.Amount = BasicAmount; RefundRequestType.RefundTypeSpecified = true; if (!String.IsNullOrEmpty(RefundReason)) { RefundRequestType.Memo = RefundReason; } RefundReq.RefundTransactionRequest = RefundRequestType; DB.ExecuteSQL("update orders set RefundTXCommand=" + DB.SQuote(XmlCommon.SerializeObject(RefundRequestType, RefundRequestType.GetType())) + " where OrderNumber=" + OriginalOrderNumber.ToString()); RefundResponse = (RefundTransactionResponseType)IPayPalRefund.RefundTransaction(RefundReq); //if (LogToErrorTable) //{ // PayPalController.Log(XmlCommon.SerializeObject(RefundReq, RefundReq.GetType()), "RefundTransaction Request"); // PayPalController.Log(XmlCommon.SerializeObject(RefundResponse, RefundResponse.GetType()), "RefundTransaction Response"); //} DB.ExecuteSQL("update orders set RefundTXCommand=" + DB.SQuote(XmlCommon.SerializeObject(RefundReq, RefundReq.GetType())) + ", RefundTXResult=" + DB.SQuote(XmlCommon.SerializeObject(RefundResponse, RefundResponse.GetType())) + " where OrderNumber=" + OriginalOrderNumber.ToString()); String RefundTXResult = String.Empty; if (RefundResponse != null && RefundResponse.Ack.ToString().StartsWith("success", StringComparison.InvariantCultureIgnoreCase)) { result = AppLogic.ro_OK; String RefundTransID = RefundResponse.RefundTransactionID; DB.ExecuteSQL("update orders set AuthorizationPNREF=AuthorizationPNREF+'|REFUND=" + RefundTransID + "' where OrderNumber=" + OriginalOrderNumber.ToString()); } else { if (RefundResponse.Errors != null) { bool first = true; for (int ix = 0; ix < RefundResponse.Errors.Length; ix++) { if (!first) { result += ", "; } result += "Error: [" + RefundResponse.Errors[ix].ErrorCode + "] " + RefundResponse.Errors[ix].LongMessage; first = false; } result += "Note: If you are using Accelerated Boarding for PayPal Express you will not be able to modify orders until you sign up for a full account and enter your API credentials."; } } } catch { result = "NO RESPONSE FROM GATEWAY!"; } } return(result); }