Return or Refund
Return or Refund
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.
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
Re: Return or Refund
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
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
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
Re: Return or Refund
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.
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
Re: Return or Refund
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
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
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
Re: Return or Refund
Hi,
Yes we are using GoldR9 (build 7670). The payment is not stored. The client is doing manual refunds through the merchant for now.
Yes we are using GoldR9 (build 7670). The payment is not stored. The client is doing manual refunds through the merchant for now.
May
Re: Return or Refund
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
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
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
Re: Return or Refund
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
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
Re: Return or Refund
Hi May,
I'm getting a developer to track down the changes and get them documented for you.
Thanks
Katie
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
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
Re: Return or Refund
Here are the changes that need to be made for Authorize.net CIM provider.
Open /IntegratedProviders/AuthorizeNetCIM/AuthNetCIMProvider.cs file
Locate the following method:
and replace with:
After renaming the method (as suggested above), copy two new methods somewhere inside AuthNetCIMProvider.cs file
and
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.
Open /IntegratedProviders/AuthorizeNetCIM/AuthNetCIMProvider.cs file
Locate the following method:
Code: Select all
public override Transaction DoRefund(RefundTransactionRequest creditRequest)
Code: Select all
private Transaction DoStandardRefund(RefundTransactionRequest creditRequest)
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);
}
}
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);
}
}
Thank you for choosing AbleCommerce!
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
Re: Return or Refund
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>
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
Re: Return or Refund
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.
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
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
Re: Return or Refund
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.
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
Re: Return or Refund
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.Under Checkout settings we do not have Payment Storage checked. Could that be it?
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
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
Re: Return or Refund
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
Is there going to be a fix for this soon?
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>
May
Re: Return or Refund
We're looking into it.
Thank you for choosing AbleCommerce!
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
Re: Return or Refund
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
Thanks for your patience.
Katie
Thank you for choosing AbleCommerce!
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
Re: Return or Refund
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?
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
Re: Return or Refund
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.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?
Re: Return or Refund
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.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.
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
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
Re: Return or Refund
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
and update to
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.
Code: Select all
if (_PaymentProvider != null && _PaymentProvider.RefundRequiresAccountData)
Code: Select all
if (_PaymentProvider != null &&
(_PaymentProvider.RefundRequiresAccountData || (_PaymentProvider.Name == "Authorize.NET CIM" && _Payment.PaymentProfile == null )))
Re: Return or Refund
Thank you.. I'm in the process of upgrading from 7670 to 8858. Will this code work for both?
May
Re: Return or Refund
When you say user, do you mean the person who manages the store?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.
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?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
Re: Return or Refund
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.
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
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support
Re: Return or Refund
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
http://help.ablecommerce.com - product support
http://wiki.ablecommerce.com - developer support