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