Return or Refund

For general questions and discussions specific to the AbleCommerce GOLD ASP.Net shopping cart software.
mbartens
Lieutenant Commander (LCDR)
Lieutenant Commander (LCDR)
Posts: 107
Joined: Mon Mar 09, 2015 3:34 am

Return or Refund

Post by mbartens » Thu Mar 03, 2016 3:39 am

Previously I had posted I was using Authorize.NET CIM and there was an error when trying to do a refund. The issue was I was doing the refund within minutes of purchase.

Now with that same order it appears that one of the site admins did a Return. Does a return issue a refund? If an item is returned can it then be refunded?
When I look at the order now, the item is missing and the balance is -22.00
However it wasn't actually refunded and I received this error (same as before :? )
E00027 The transaction was unsuccessful.
May

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Thu Mar 03, 2016 4:24 am

A return puts the item back in inventory and adjusts the order balance.

A refund (from the Payments page) is the only way to give the customer their money back. Was the payment batched by Authorize.net before or after you attempted the Return?

There are a couple things you can do to assist yourself in troubleshooting issues with the payment gateway.

- Lookup the Response code here: http://developer.authorize.net/api/refe ... Codes.html

- Enable debug from the AbleCommerce payment configuration page. Then look in the \app_data\logs\{providername}.log for a detailed response from the gateway.

Keep in mind that using your payment gateway in Authorization only mode is the recommended practice for most merchants unless you are selling digital goods or something that ships immediately. When you authorize the order, you can VOID transactions. This costs you nothing. If you process REFUNDS, then you will pay transaction fees for BOTH the initial payment and the return payment.

Thanks,
Katie
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

mbartens
Lieutenant Commander (LCDR)
Lieutenant Commander (LCDR)
Posts: 107
Joined: Mon Mar 09, 2015 3:34 am

Re: Return or Refund

Post by mbartens » Fri Mar 04, 2016 4:31 am

HI,
So if someone does a return (item is removed from order) and then attempts a refund, it wouldn't work then?

Client has it set up for Authorize and Capture.
May

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Fri Mar 04, 2016 5:50 am

We're looking into this now. There may be an issue when the payment is using a stored profile. I will update when I know more.

If you need to issue a Refund, then you can do it through your merchant account and post the credit manually in AbleCommerce. This is just a work-around until I have more information.

Are you using Gold R10?

Thanks
Katie
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

mbartens
Lieutenant Commander (LCDR)
Lieutenant Commander (LCDR)
Posts: 107
Joined: Mon Mar 09, 2015 3:34 am

Re: Return or Refund

Post by mbartens » Tue Mar 08, 2016 7:30 am

Hi,
Yes we are using GoldR9 (build 7670). The payment is not stored. The client is doing manual refunds through the merchant for now.
May

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Thu Mar 10, 2016 5:00 am

Hi May,

Do you anticipate upgrading? There is a bug with refunds and I wasn't sure if you had the ability to upgrade or not. If not, do you have the source code? I can always provide the changes for the Anet CIM source.

Thanks
Katie
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

mbartens
Lieutenant Commander (LCDR)
Lieutenant Commander (LCDR)
Posts: 107
Joined: Mon Mar 09, 2015 3:34 am

Re: Return or Refund

Post by mbartens » Tue Mar 29, 2016 7:55 am

Hi Katie,
I'm not sure when we will upgrade but the client has contacted me again that they did attempt another refund and it did not work so they are getting anxious.
I do have the source code. If you have that code I'd really appreciate it ! Thank you
May

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Wed Mar 30, 2016 5:17 pm

Hi May,

I'm getting a developer to track down the changes and get them documented for you.

Thanks
Katie
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Thu Mar 31, 2016 2:24 am

Here are the changes that need to be made for Authorize.net CIM provider.

Open /IntegratedProviders/AuthorizeNetCIM/AuthNetCIMProvider.cs file

Locate the following method:

Code: Select all

public override Transaction DoRefund(RefundTransactionRequest creditRequest)
and replace with:

Code: Select all

private Transaction DoStandardRefund(RefundTransactionRequest creditRequest)
After renaming the method (as suggested above), copy two new methods somewhere inside AuthNetCIMProvider.cs file

Code: Select all

/// <inheritdoc />
        public override Transaction DoRefund(RefundTransactionRequest creditRequest)
        {
            Payment payment = creditRequest.Payment;
            if (payment == null) throw new ArgumentNullException("request.Payment");
            Order order = payment.Order;
            if (order == null) throw new ArgumentNullException("request.Payment.Order");
            User user = order.User;
            if (payment.PaymentProfile != null)
            {
                return DoProfileRefund(creditRequest, payment.PaymentProfile.CustomerProfileId, payment.PaymentProfile.PaymentProfileId);
            }
            else
            {
                return DoStandardRefund(creditRequest);
            }
        }
and

Code: Select all

private Transaction DoProfileRefund(RefundTransactionRequest creditRequest, string customerProfileId, string paymentProfileId)
        {
            Payment payment = creditRequest.Payment;
            Order order = payment.Order;
            User user = order.User;
            Dictionary<string, string> debugReplacements = new Dictionary<string, string>();

            createCustomerProfileTransactionRequest request = new createCustomerProfileTransactionRequest();
            request.merchantAuthentication = GetMerchantAuth(debugReplacements);

            profileTransRefundType refundTrans = new profileTransRefundType();
            refundTrans.amount = creditRequest.Amount;
            refundTrans.order.invoiceNumber = order.OrderNumber.ToString();
            refundTrans.order.description = StringHelper.RemoveSpecialChars(order.Store.Name) + " Order #" + order.OrderNumber;

            refundTrans.customerProfileId = customerProfileId;
            refundTrans.customerPaymentProfileId = paymentProfileId;

            request.transaction.Item = refundTrans;

            string requestData = StripEmptyElements(request.Serialize(Encoding.UTF8));
            if (this.UseDebugMode) this.RecordCommunication(this.Name, CommunicationDirection.Send, requestData, debugReplacements);

            string responseData = SendRequestToGateway(requestData);
            if (this.UseDebugMode) this.RecordCommunication(this.Name, CommunicationDirection.Receive, responseData, null);

            //PROCESS RESPONSE
            string responseCode = string.Empty;
            string responseMessage = string.Empty;
            createCustomerProfileTransactionResponse response = null;
            try
            {
                response = createCustomerProfileTransactionResponse.Deserialize(responseData);
            }
            catch (InvalidOperationException exp)
            {
                if (IsErrorResponse(responseData, out responseCode, out responseMessage))
                {
                    return Transaction.CreateErrorTransaction(this.PaymentGatewayId, creditRequest, responseCode, responseMessage);
                }

                throw exp;
            }

            List<messagesTypeMessage> messages = response.messages.message;
            if (messages.Count > 0)
            {
                responseCode = messages[0].code;
                responseMessage = messages[0].text;
            }

            if (response.messages.resultCode == messageTypeEnum.Ok)
            {
                //CREATE THE TRANSACTION OBJECT         
                Transaction transaction = new Transaction();
                TransactionType transType = TransactionType.Refund;
                transaction.PaymentGatewayId = this.PaymentGatewayId;
                transaction.TransactionType = transType;
                transaction.ResponseMessage = responseMessage;
                transaction.ResponseCode = responseCode;
                transaction.TransactionDate = LocaleHelper.LocalNow;
                transaction.Amount = creditRequest.Amount;
                transaction.RemoteIP = creditRequest.RemoteIP;

                if (messages[0].code.Equals("I00001"))
                {
                    // transaction successful
                    transaction.TransactionStatus = TransactionStatus.Successful;
                    string[] responseValues = response.directResponse.Split(",".ToCharArray());
                    transaction.AuthorizationCode = responseValues[4];
                    transaction.AVSResultCode = responseValues[5];
                    transaction.ProviderTransactionId = responseValues[6];
                    transaction.CVVResultCode = responseValues[38];
                    transaction.CAVResultCode = responseValues[39];
                }
                else
                {
                    // transaction failed
                    transaction.TransactionStatus = TransactionStatus.Failed;
                }

                return transaction;
            }
            else
            {
                return Transaction.CreateErrorTransaction(this.PaymentGatewayId, creditRequest, responseCode, responseMessage);
            }
        }
Compile the AuthorizeNetCIM project so that the dlls can be copied to website\bin folder. After that compile the website project and you are good to go.
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

mbartens
Lieutenant Commander (LCDR)
Lieutenant Commander (LCDR)
Posts: 107
Joined: Mon Mar 09, 2015 3:34 am

Re: Return or Refund

Post by mbartens » Thu Mar 31, 2016 8:41 am

Hi,
I've implemented the code but the refund still did not work. I enabled debugging and this is the error message:
<errorCode>33</errorCode>
<errorText>Credit card number is required.</errorText>
May

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Thu Mar 31, 2016 11:07 am

It should work. Can you explain in detail, the exact steps you've taken to test?

Keep in mind that a Refund can only occur after the transaction has been batched for the day.

So, if you ran a test transaction today, you would generally have to wait until that money has been processed on the Authorize net side.
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

mbartens
Lieutenant Commander (LCDR)
Lieutenant Commander (LCDR)
Posts: 107
Joined: Mon Mar 09, 2015 3:34 am

Re: Return or Refund

Post by mbartens » Fri Apr 01, 2016 2:24 am

Hi, the order was placed on 3/21 so that is enough time for it to be batched.

1. Below is the transaction history for this order:
Date Gateway Type Amount Result Notes
3/21/2016 6:02 PM Authorize.NET CIM Authorize Capture $200.00 SUCCESS Successful. (I00001)
Transaction ID:8091906417
Authorization:06158B
AVS:Match (Y) Common AVS Codes
CVV:Match (M) Common CVV Codes
3/28/2016 8:36 PM Authorize.NET CIM Refund $200.00 FAILED The transaction was unsuccessful. (E00027)
3/31/2016 12:59 PM Authorize.NET CIM Refund $200.00 FAILED The transaction was unsuccessful. (E00027)
3/31/2016 2:36 PM Authorize.NET CIM Refund $200.00 FAILED The transaction was unsuccessful. (E00027)

2. From the Edit Gateway page:
Assembly: CommerceBuilder.AuthorizeNetCIM (v7.88.5934.19940)
Authorization Mode:Authorize & Capture
Gateway Mode:Production Gateway, Live Mode
Debug Mode:On
Advanced Settings:
XML API Live Url : https://api.authorize.net/xml/v1/request.api
XML API Test Url : https://apitest.authorize.net/xml/v1/request.api

Payment Methods:MasterCard,Visa

3. Under Checkout settings we do not have Payment Storage checked. Could that be it? Another possibility is that we were never able to encrypt the database string.
4. Below is from the log:
Send: <createTransactionRequest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
<merchantAuthentication>
<name>xxxxxxxxxx</name>
<transactionKey>xxxxxxxxxx</transactionKey>
</merchantAuthentication>
<transactionRequest>
<transactionType>refundTransaction</transactionType>
<amount>200.00</amount>
<refTransId>8091906417</refTransId>
<order>
<invoiceNumber>5311</invoiceNumber>
<description>HLCCA+Order+%235311</description>
</order>
<tax>
<amount>0</amount>
</tax>
<duty>
<amount>0</amount>
</duty>
<shipping>
<amount>0</amount>
</shipping>
<customer>
<id>79474</id>
<email>REMOVED61413%40hotmail.com</email>
</customer>
<billTo>
<firstName>REMOVED+and+REMOVED</firstName>
<lastName>REMOVED</lastName>
<address>917+s.+REMOVED+st.</address>
<city>REMOVED</city>
<state>REMOVED</state>
<zip>REMOVED</zip>
<country>US</country>
<phoneNumber>REMOVED</phoneNumber>
</billTo>
<customerIP>REMOVED</customerIP>
<transactionSettings>
<setting>
<settingName>duplicateWindow</settingName>
<settingValue>0</settingValue>
</setting>
</transactionSettings>
</transactionRequest>
</createTransactionRequest>

Receive: <?xml version="1.0" encoding="utf-8"?><createTransactionResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"><messages><resultCode>Error</resultCode><message><code>E00027</code><text>The transaction was unsuccessful.</text></message></messages><transactionResponse><responseCode>3</responseCode><authCode /><avsResultCode>P</avsResultCode><cvvResultCode /><cavvResultCode /><transId>0</transId><refTransID>8091906417</refTransID><transHash>REMOVED</transHash><testRequest>0</testRequest><accountNumber /><entryMode>Keyed</entryMode><accountType>Visa</accountType><errors><error><errorCode>33</errorCode><errorText>Credit card number is required.</errorText></error></errors></transactionResponse></createTransactionResponse>

5. As far as applying the code, I added the code and compiled it. I then moved CommerceBuilder.AuthorizeNetCIM.dll to our production server. I made a change in the Web.Config and saved it to restart the application.
May

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Fri Apr 01, 2016 2:34 am

Under Checkout settings we do not have Payment Storage checked. Could that be it?
That might be it. I seem to recall that Authorizenet requires the last 4 digits of the credit card to process a refund. I need to do another test to see if this is the issue.

Thanks for providing the detailed information. This really helps us a lot when troubleshooting.

Katie
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

mbartens
Lieutenant Commander (LCDR)
Lieutenant Commander (LCDR)
Posts: 107
Joined: Mon Mar 09, 2015 3:34 am

Re: Return or Refund

Post by mbartens » Mon Apr 04, 2016 2:33 am

From the Authorize.NET CIM Developer guide: http://www.authorize.net/content/dam/au ... _guide.pdf
For Refund Transactions
If you are submitting a refund against a previous CIM transaction, the following guidelines apply:
include customerProfileId, customerPaymentProfileId, and transId.
customerShippingAddressId is optional.
creditCardNumberMasked, bankRoutingNumberMasked, and bankAccountNumberMasked
do not need to be included, but they will be validated if they are included.

The example that they have is different from what is being sent:
Merchant Web Services API CIM XML Guide- December 2015
createCustomerProfileTransactionRequest for a Refund transaction

Code: Select all

  <merchantAuthentication>
    <name>YourUserLogin</name>
    <transactionKey>YourTranKey</transactionKey>
  </merchantAuthentication>
  <transaction>
    <profileTransRefund>
      <amount>10.95</amount>
      <tax>
        <amount>1.00</amount>
        <name>WA state sales tax</name>
        <description>Washington state sales tax</description>
      </tax>
      <shipping>
        <amount>2.00</amount>
        <name>ground based shipping</name>
        <description>Ground based 5 to 10 day shipping</description>
      </shipping>
<lineItems>
        <itemId>ITEM00001</itemId>
        <name>name of item sold</name>
        <description>Description of item sold</description>
        <quantity>1</quantity>
        <unitPrice>6.95</unitPrice>
        <taxable>true</taxable>
      </lineItems>
<lineItems>
        <itemId>ITEM00002</itemId>
        <name>name of other item sold</name>
        <description>Description of other item sold</description>
        <quantity>1</quantity>
        <unitPrice>1.00</unitPrice>
        <taxable>true</taxable>
      </lineItems>
<customerProfileId>10000</customerProfileId>
      <customerPaymentProfileId>20000</customerPaymentProfileId>
      <customerShippingAddressId>30000</customerShippingAddressId>
      <creditCardNumberMasked>XXXX1111</creditCardNumberMasked>
<order>
        <invoiceNumber>INV000001</invoiceNumber>
        <description>description of transaction</description>
        <purchaseOrderNumber>PONUM000001</purchaseOrderNumber>
      </order>
      <transId>40000</transId>
    </profileTransRefund>
  </transaction>
  <extraOptions><![CDATA[]]></extraOptions>
</createCustomerProfileTransactionRequest>
Is there going to be a fix for this soon?
May

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Mon Apr 04, 2016 4:13 am

We're looking into it.
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Sat Apr 09, 2016 3:02 am

Update: We are still trying to figure this out. It's not just the Anet CIM gateway. I'm also having trouble getting a refund for std. Authorize.net and Chase Paymentech. We're trying to identify the code that might have changed.

Thanks for your patience.

Katie
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

mbartens
Lieutenant Commander (LCDR)
Lieutenant Commander (LCDR)
Posts: 107
Joined: Mon Mar 09, 2015 3:34 am

Re: Return or Refund

Post by mbartens » Wed Apr 13, 2016 6:12 am

I'm working on upgrading my site and I just noticed something that could be related...

AbleCommerceGold-GoldR11-b8643-SRC.zip\IntegratedProviders\AuthorizeNetCIM\AnetApiSchema.designer.cs
// Generated by Xsd2Code. Version 3.4.0.37595

UpgradeGold-R11b8643-R11SR1b8858-SRC.zip\IntegratedProviders\AuthorizeNetCIM\AnetApiSchema.designer.cs
// Generated by Xsd2Code. Version 3.4.0.32989

Shouldn't the version numbers be increasing with each release? Which file am I supposed to use for R11SR1b8858?
May

User avatar
mazhar
Master Yoda
Master Yoda
Posts: 5084
Joined: Wed Jul 09, 2008 8:21 am
Contact:

Re: Return or Refund

Post by mazhar » Mon Apr 18, 2016 1:00 am

mbartens wrote:I'm working on upgrading my site and I just noticed something that could be related...

AbleCommerceGold-GoldR11-b8643-SRC.zip\IntegratedProviders\AuthorizeNetCIM\AnetApiSchema.designer.cs
// Generated by Xsd2Code. Version 3.4.0.37595

UpgradeGold-R11b8643-R11SR1b8858-SRC.zip\IntegratedProviders\AuthorizeNetCIM\AnetApiSchema.designer.cs
// Generated by Xsd2Code. Version 3.4.0.32989

Shouldn't the version numbers be increasing with each release? Which file am I supposed to use for R11SR1b8858?
Xsd2Code is a Visual Studio extension. The version number is not for the document but the tool that generated the document. It seems like machine that was used to generate file was using an old version of extension apart from this generate file itself is latest.

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Tue Apr 19, 2016 10:33 am

Update: We are still trying to figure this out. It's not just the Anet CIM gateway. I'm also having trouble getting a refund for std. Authorize.net and Chase Paymentech. We're trying to identify the code that might have changed.
I wanted to share with you some information that might help you understand how refunds work. With the Anet CIM gateway, a user has an option to store his/her payment information. When this happens, the credit card is ONLY stored with Authorize.net. Performing a refund in this case should not require that the card number and expiration date be entered. This is a bug and we'll be providing a fix for you soon.

Now, there are cases when you want to enable credit card storage. If you want to perform post-order processing (eg. Refunds) then you need to have that credit card available. This is true of most gateways, but each might be slightly different in what information they require.

So, even if you are using Authorize.net CIM, there is the case where a customer chooses not to store their credit card information. In which case, you would not be able to perform a refund through AbleCommerce unless you contacted the customer directly or enabled payment storage. Keep in mind though, that the credit card information is encrypted in the database as long as you have set an encryption key.

Hope this helps,
Katie
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

User avatar
mazhar
Master Yoda
Master Yoda
Posts: 5084
Joined: Wed Jul 09, 2008 8:21 am
Contact:

Re: Return or Refund

Post by mazhar » Tue Apr 19, 2016 8:44 pm

Here are the changes which will allow you to do post order processing for refunds. Edit Website/Admin/Orders/Payments/RefundPayment.aspx.cs and locate following code

Code: Select all

if (_PaymentProvider != null && _PaymentProvider.RefundRequiresAccountData)
and update to

Code: Select all

if (_PaymentProvider != null && 
                (_PaymentProvider.RefundRequiresAccountData || (_PaymentProvider.Name == "Authorize.NET CIM" && _Payment.PaymentProfile == null )))
Now when you try to refund a payment which needs card information it will ask you to provide it if its not available. If payment was done via using a stored profile then it won't ask you about card details and you should be able to issue refund without card details.

mbartens
Lieutenant Commander (LCDR)
Lieutenant Commander (LCDR)
Posts: 107
Joined: Mon Mar 09, 2015 3:34 am

Re: Return or Refund

Post by mbartens » Mon Apr 25, 2016 3:00 am

Thank you.. I'm in the process of upgrading from 7670 to 8858. Will this code work for both?
May

mbartens
Lieutenant Commander (LCDR)
Lieutenant Commander (LCDR)
Posts: 107
Joined: Mon Mar 09, 2015 3:34 am

Re: Return or Refund

Post by mbartens » Mon Apr 25, 2016 3:06 am

Katie wrote:
I wanted to share with you some information that might help you understand how refunds work. With the Anet CIM gateway, a user has an option to store his/her payment information. When this happens, the credit card is ONLY stored with Authorize.net. Performing a refund in this case should not require that the card number and expiration date be entered. This is a bug and we'll be providing a fix for you soon.
When you say user, do you mean the person who manages the store?
Katie wrote: Now, there are cases when you want to enable credit card storage. If you want to perform post-order processing (eg. Refunds) then you need to have that credit card available. This is true of most gateways, but each might be slightly different in what information they require.

So, even if you are using Authorize.net CIM, there is the case where a customer chooses not to store their credit card information. In which case, you would not be able to perform a refund through AbleCommerce unless you contacted the customer directly or enabled payment storage. Keep in mind though, that the credit card information is encrypted in the database as long as you have set an encryption key.

Hope this helps,
Katie
Our goal is to not store CC info on our servers (PCI concerns) yet still be able to process refunds through the cart admin. Is this not possible?

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Mon Apr 25, 2016 6:38 am

User = the end user who is paying for the order.

It is possible to process refunds through the store AND have credit card storage disabled, but this will only work for payment profiles that have been stored with Authorize.net CIM.

If you want to process refunds through AbleCommerce AND the user (customer) has decided not to store their credit card AND you (the merchant) has also decided not to store the credit card, then you cannot process a refund through the AbleCommerce admin unless you can provide the payment gateway the required information. This is the usually the card number and expiration date. For these cases, the merchant must contact the customer and ask for the required information to process the refund - which I'm sure they would be glad to hear that you are not saving their credit card information.
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

User avatar
Katie
AbleCommerce Admin
AbleCommerce Admin
Posts: 2651
Joined: Tue Dec 02, 2003 1:54 am
Contact:

Re: Return or Refund

Post by Katie » Mon Apr 25, 2016 6:45 am

Sorry. I forgot to mention that you can always login to Authorize.net and process the Refund there. Then you don't have to contact the customer at all.
Thank you for choosing AbleCommerce!

http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support

mbartens
Lieutenant Commander (LCDR)
Lieutenant Commander (LCDR)
Posts: 107
Joined: Mon Mar 09, 2015 3:34 am

Re: Return or Refund

Post by mbartens » Wed Apr 27, 2016 1:40 am

Thank you. I'm waiting to hear what they want to do.
May

Post Reply