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"); |
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 > |
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 >> |
Free forum by Nabble | Edit this page |