But you're typically only using one payment processor per store right? So the store settings should be sufficient, but even if not this should really be solved in a more generic way with some sort of setting at a higher level.
Also it looks like your using the deprecated payment.properties for configuration instead of the PaymentGatewayConfig entities. Regards Scott On 17/02/2011, at 10:28 PM, Hans Bakker wrote: > This feature is not always for all paymentmethods for every order. > > Certain payment processors can be easily checked and approved afterwards > with the payment processor while others do not have this feature. > > Regards, > Hans > > > On Thu, 2011-02-17 at 22:11 +1300, Scott Gray wrote: >> Hi Hans, >> >> Isn't that more of an order related setting rather than anything the payment >> gateway needs to worry about? Surely we already have processes for this >> sort of thing? >> >> Also, we're going to end up with a hell of a mess if we keep putting payment >> processor specific code in the order logic. >> >> Regards >> Scott >> >> On 17/02/2011, at 7:57 PM, [email protected] wrote: >> >>> Author: hansbak >>> Date: Thu Feb 17 06:57:51 2011 >>> New Revision: 1071517 >>> >>> URL: http://svn.apache.org/viewvc?rev=1071517&view=rev >>> Log: >>> update to cybersource payment gateway: added a properties setting that >>> orders are still accepted but put into the created stage when a credit card >>> fails authorisation. The default is the current setting: order is not >>> created >>> >>> Modified: >>> ofbiz/trunk/applications/accounting/config/payment.properties >>> ofbiz/trunk/applications/accounting/servicedef/services_paymentmethod.xml >>> >>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java >>> >>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/cybersource/IcsPaymentServices.java >>> >>> ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java >>> >>> Modified: ofbiz/trunk/applications/accounting/config/payment.properties >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/config/payment.properties?rev=1071517&r1=1071516&r2=1071517&view=diff >>> ============================================================================== >>> --- ofbiz/trunk/applications/accounting/config/payment.properties (original) >>> +++ ofbiz/trunk/applications/accounting/config/payment.properties Thu Feb >>> 17 06:57:51 2011 >>> @@ -118,6 +118,12 @@ payment.cybersource.ignoreAvs=false >>> # AVS Decline Codes -- May not be supported any longer >>> #payment.cybersource.avsDeclineCodes= >>> >>> +# Ignore status of cybersource transaction reply (Y|N) (if cybersource >>> response transaction status not equals "ACCEPT" then OFBiz will still >>> create the order but in status 'created'. >>> +# default N = Don't create order if cybersource reported transaction >>> status not equals "ACCEPT". >>> +payment.cybersource.ignoreStatus=N >>> +# It happens pretty often that a creditcard is rejected for not valid >>> reasons, one can check to Cybersource fraud queue and after that the order >>> can still be rejected or approved. >>> + >>> + >>> ############################################ >>> # ClearCommerce Configuration >>> ############################################ >>> >>> Modified: >>> ofbiz/trunk/applications/accounting/servicedef/services_paymentmethod.xml >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_paymentmethod.xml?rev=1071517&r1=1071516&r2=1071517&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/applications/accounting/servicedef/services_paymentmethod.xml >>> (original) >>> +++ >>> ofbiz/trunk/applications/accounting/servicedef/services_paymentmethod.xml >>> Thu Feb 17 06:57:51 2011 >>> @@ -267,6 +267,7 @@ under the License. >>> <attribute name="errors" type="Boolean" mode="OUT" optional="false"/> >>> <attribute name="messages" type="List" mode="OUT" optional="true"/> >>> <attribute name="processAmount" type="BigDecimal" mode="OUT" >>> optional="true"/> >>> + <attribute name="authCode" type="String" mode="OUT" >>> optional="true"/> >>> </service> >>> >>> <service name="authOrderPayments" engine="java" >>> @@ -276,6 +277,7 @@ under the License. >>> <attribute name="processResult" type="String" mode="OUT" >>> optional="false"/> >>> <attribute name="authResultMsgs" type="List" mode="OUT" >>> optional="true"/> >>> <attribute name="reAuth" type="Boolean" mode="IN" optional="true"/> >>> + <attribute name="authCode" type="String" mode="OUT" >>> optional="true"/> >>> </service> >>> >>> <service name="releaseOrderPayments" engine="java" >>> >>> Modified: >>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java?rev=1071517&r1=1071516&r2=1071517&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java >>> (original) >>> +++ >>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java >>> Thu Feb 17 06:57:51 2011 >>> @@ -201,6 +201,7 @@ public class PaymentGatewayServices { >>> results.put("processAmount", thisAmount); >>> results.put("finished", Boolean.TRUE); >>> results.put("errors", Boolean.FALSE); >>> + results.put("authCode", >>> authPaymentResult.get("authCode")); >>> return results; >>> } else { >>> boolean needsNsfRetry = >>> needsNsfRetry(orderPaymentPreference, authPaymentResult, delegator); >>> @@ -399,6 +400,9 @@ public class PaymentGatewayServices { >>> continue; >>> } >>> >>> + // add authorization code to the result >>> + result.put("authCode", results.get("authCode")); >>> + >>> if (ServiceUtil.isError(results)) { >>> hadError += 1; >>> messages.add("Could not authorize OrderPaymentPreference [" >>> + paymentPref.getString("orderPaymentPreferenceId") + "] for order [" + >>> orderId + "]: " + results.get(ModelService.ERROR_MESSAGE)); >>> >>> Modified: >>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/cybersource/IcsPaymentServices.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/cybersource/IcsPaymentServices.java?rev=1071517&r1=1071516&r2=1071517&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/cybersource/IcsPaymentServices.java >>> (original) >>> +++ >>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/cybersource/IcsPaymentServices.java >>> Thu Feb 17 06:57:51 2011 >>> @@ -536,12 +536,17 @@ public class IcsPaymentServices { >>> >>> private static void processAuthResult(Map<String, Object> reply, >>> Map<String, Object> result) { >>> String decision = getDecision(reply); >>> + String checkModeStatus = >>> UtilProperties.getPropertyValue("payment.properties", >>> "payment.cybersource.ignoreStatus"); >>> if ("ACCEPT".equalsIgnoreCase(decision)) { >>> result.put("authCode", >>> reply.get("ccAuthReply_authorizationCode")); >>> result.put("authResult", Boolean.TRUE); >>> } else { >>> result.put("authCode", decision); >>> - result.put("authResult", Boolean.FALSE); >>> + if ("N".equals(checkModeStatus)) { >>> + result.put("authResult", Boolean.FALSE); >>> + } else { >>> + result.put("authResult", Boolean.TRUE); >>> + } >>> // TODO: based on reasonCode populate the following flags as >>> applicable: resultDeclined, resultNsf, resultBadExpire, resultBadCardNumber >>> } >>> >>> >>> Modified: >>> ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java?rev=1071517&r1=1071516&r2=1071517&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java >>> (original) >>> +++ >>> ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java >>> Thu Feb 17 06:57:51 2011 >>> @@ -1067,9 +1067,27 @@ public class CheckOutHelper { >>> >>> // set the order and item status to approved >>> if (autoApproveOrder) { >>> - boolean ok = >>> OrderChangeHelper.approveOrder(dispatcher, userLogin, orderId, manualHold); >>> - if (!ok) { >>> - throw new GeneralException("Problem with order >>> change; see above error"); >>> + List<GenericValue> productStorePaymentSettingList >>> = delegator.findByAnd("ProductStorePaymentSetting", >>> UtilMisc.toMap("productStoreId", productStore.getString("productStoreId"), >>> "paymentMethodTypeId", "CREDIT_CARD", "paymentService", >>> "cyberSourceCCAuth")); >>> + if (productStorePaymentSettingList.size() > 0) { >>> + String decision = (String) >>> paymentResult.get("authCode"); >>> + if (UtilValidate.isNotEmpty(decision)) { >>> + if ("ACCEPT".equalsIgnoreCase(decision)) { >>> + boolean ok = >>> OrderChangeHelper.approveOrder(dispatcher, userLogin, orderId, manualHold); >>> + if (!ok) { >>> + throw new >>> GeneralException("Problem with order change; see above error"); >>> + } >>> + } >>> + } else { >>> + boolean ok = >>> OrderChangeHelper.approveOrder(dispatcher, userLogin, orderId, manualHold); >>> + if (!ok) { >>> + throw new GeneralException("Problem >>> with order change; see above error"); >>> + } >>> + } >>> + } else { >>> + boolean ok = >>> OrderChangeHelper.approveOrder(dispatcher, userLogin, orderId, manualHold); >>> + if (!ok) { >>> + throw new GeneralException("Problem with >>> order change; see above error"); >>> + } >>> } >>> } >>> } else if (authResp.equals("ERROR")) { >>> >>> >> > > -- > Ofbiz on twitter: http://twitter.com/apache_ofbiz > Myself on twitter: http://twitter.com/hansbak > Antwebsystems.com: Quality services for competitive rates. >
smime.p7s
Description: S/MIME cryptographic signature
