Testing a declined capture request

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Testing a declined capture request

Jacopo Cappellato
Hi all,

I'm in the process of testing the following scenario (a customer
reported some weird things, but I'm still not sure by what they are caused):

1) order with credit card payment preference
2) the payment *authorization* is succesful (the order is created and
approved)
3) when the order is shipped, the payment capture is declined by the
payment processor

In order to test it I've created a new service named
"alwaysDeclineCCCapture" (can I commit it into trunk?).

I've noticed that the declined response is never stored in the
PaymentGatewayResponse entity by the
PaymentGatewayServices.processCaptureResult(...) method; the attached
patch will fix this: can I commit this one?

Going on with my tests.

Jacopo

Index: applications/accounting/servicedef/services_paymentmethod.xml
===================================================================
--- applications/accounting/servicedef/services_paymentmethod.xml (revision 551510)
+++ applications/accounting/servicedef/services_paymentmethod.xml (working copy)
@@ -567,6 +567,11 @@
         <description>Credit Card Processing</description>
         <implements service="ccAuthInterface"/>
     </service>
+    <service name="alwaysDeclineCCCapture" engine="java"
+            location="org.ofbiz.accounting.payment.PaymentGatewayServices" invoke="alwaysDeclineCCCapture">
+        <description>Credit Card Processing - always decline a cc capture request</description>
+        <implements service="ccCaptureInterface"/>
+    </service>
     <service name="alwaysNsfCCProcessor" engine="java"
         location="org.ofbiz.accounting.payment.PaymentGatewayServices" invoke="alwaysNsfProcessor">
         <description>Credit Card Processing</description>
Index: applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java
===================================================================
--- applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java (revision 551510)
+++ applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java (working copy)
@@ -1856,25 +1856,23 @@
         BigDecimal amtBd = new BigDecimal(amount.doubleValue());
         amtBd = amtBd.setScale(decimals, rounding);
 
-        if (captureResult.booleanValue()) {
-            // capture returned true (passed)
-            result.put("orderPaymentPreference", paymentPreference);
-            result.put("userLogin", userLogin);
-            result.put("serviceTypeEnum", authServiceType);
+        result.put("orderPaymentPreference", paymentPreference);
+        result.put("userLogin", userLogin);
+        result.put("serviceTypeEnum", authServiceType);
 
-            ModelService model = dctx.getModelService("processCaptureResult");
-            Map context = model.makeValid(result, ModelService.IN_PARAM);
-            Map capRes;
-            try {
-                capRes = dispatcher.runSync("processCaptureResult", context);
-            } catch (GenericServiceException e) {
-                Debug.logError(e, module);
-                throw e;
-            }
-            if (capRes != null && ServiceUtil.isError(capRes)) {
-                throw new GeneralException(ServiceUtil.getErrorMessage(capRes));
-            }
-        } else {
+        ModelService model = dctx.getModelService("processCaptureResult");
+        Map context = model.makeValid(result, ModelService.IN_PARAM);
+        Map capRes;
+        try {
+            capRes = dispatcher.runSync("processCaptureResult", context);
+        } catch (GenericServiceException e) {
+            Debug.logError(e, module);
+            throw e;
+        }
+        if (capRes != null && ServiceUtil.isError(capRes)) {
+            throw new GeneralException(ServiceUtil.getErrorMessage(capRes));
+        }
+        if (!captureResult.booleanValue()) {
             // capture returned false (error)
             try {
                 processReAuthFromCaptureFailure(dctx, result, amtBd, userLogin, paymentPreference);
@@ -2991,6 +2989,25 @@
         return result;
     }
 
+    /**
+     * Always decline processor
+     */
+    public static Map alwaysDeclineCCCapture(DispatchContext dctx, Map context) {
+        Map result = ServiceUtil.returnSuccess();
+        Double processAmount = (Double) context.get("captureAmount");
+        Debug.logInfo("Test Processor Declining Credit Card capture", module);
+
+        String refNum = UtilDateTime.nowAsString();
+
+        result.put("captureResult", Boolean.FALSE);
+        result.put("captureAmount", processAmount);
+        result.put("captureRefNum", refNum);
+        result.put("captureAltRefNum", refNum);
+        result.put("captureFlag", "D");
+        result.put("captureMessage", "This is a test processor; no payments were captured or authorized");
+        return result;
+    }
+
     public static Map testCaptureWithReAuth(DispatchContext dctx, Map context) {
         GenericValue orderPaymentPreference = (GenericValue) context.get("orderPaymentPreference");
         GenericValue authTransaction = (GenericValue) context.get("authTrans");
Reply | Threaded
Open this post in threaded view
|

Re: Testing a declined capture request

David E Jones

Those sound like some important holes in current functionality, and yes I think it'd be great to have both of those in the project.

-David


Jacopo Cappellato wrote:

> Hi all,
>
> I'm in the process of testing the following scenario (a customer
> reported some weird things, but I'm still not sure by what they are
> caused):
>
> 1) order with credit card payment preference
> 2) the payment *authorization* is succesful (the order is created and
> approved)
> 3) when the order is shipped, the payment capture is declined by the
> payment processor
>
> In order to test it I've created a new service named
> "alwaysDeclineCCCapture" (can I commit it into trunk?).
>
> I've noticed that the declined response is never stored in the
> PaymentGatewayResponse entity by the
> PaymentGatewayServices.processCaptureResult(...) method; the attached
> patch will fix this: can I commit this one?
>
> Going on with my tests.
>
> Jacopo
>
Reply | Threaded
Open this post in threaded view
|

Re: Testing a declined capture request

Jacopo Cappellato
David,

I've committed my patch (a slightly different version) in rev. 552432

Thanks,

Jacopo

  David E Jones wrote:

>
> Those sound like some important holes in current functionality, and yes
> I think it'd be great to have both of those in the project.
>
> -David
>
>
> Jacopo Cappellato wrote:
>> Hi all,
>>
>> I'm in the process of testing the following scenario (a customer
>> reported some weird things, but I'm still not sure by what they are
>> caused):
>>
>> 1) order with credit card payment preference
>> 2) the payment *authorization* is succesful (the order is created and
>> approved)
>> 3) when the order is shipped, the payment capture is declined by the
>> payment processor
>>
>> In order to test it I've created a new service named
>> "alwaysDeclineCCCapture" (can I commit it into trunk?).
>>
>> I've noticed that the declined response is never stored in the
>> PaymentGatewayResponse entity by the
>> PaymentGatewayServices.processCaptureResult(...) method; the attached
>> patch will fix this: can I commit this one?
>>
>> Going on with my tests.
>>
>> Jacopo
>>