Author: ashish
Date: Wed Nov 4 08:27:44 2009 New Revision: 832678 URL: http://svn.apache.org/viewvc?rev=832678&view=rev Log: Applied patch from jira issue - OFBIZ-3140 - Process payment notification from Google Checkout in ofbiz. Process payment notification of Authorization, Capture and Refund from Google Checkout in ofbiz. Thanks Pranay / Arun for the contribution. Modified: ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java Modified: ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java?rev=832678&r1=832677&r2=832678&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java (original) +++ ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java Wed Nov 4 08:27:44 2009 @@ -137,20 +137,94 @@ } public void processAuthNotification(AuthorizationAmountNotification info) throws GeneralException { - // TODO implement me (if desired) - return; // the notification will be accepted + String externalId = info.getGoogleOrderNumber(); + List<GenericValue> orders = null; + GenericValue orderPaymentPreference = null; + try { + orders = delegator.findByAnd("OrderHeader", UtilMisc.toMap("externalId", externalId, "salesChannelEnumId", SALES_CHANNEL)); + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + if (UtilValidate.isNotEmpty(orders)) { + GenericValue order = EntityUtil.getFirst(orders); + List<GenericValue> orderPaymentPreferences = order.getRelated("OrderPaymentPreference"); + if (UtilValidate.isNotEmpty(orderPaymentPreferences)) { + orderPaymentPreference = EntityUtil.getFirst(orderPaymentPreferences); + BigDecimal maxAmount = new BigDecimal(info.getAuthorizationAmount()); + //Update orderPaymentPreference + Map<String, Object> paymentPrefMap = UtilMisc.toMap("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId"), "maxAmount", maxAmount, "statusId", "PAYMENT_AUTHORIZED", "paymentMethodTypeId", "EXT_GOOGLE_CHECKOUT"); + updatePaymentPreference(paymentPrefMap); + //Create PaymentGatewayResponse + Map<String, Object> newGatewayMap = UtilMisc.toMap("amount", maxAmount, "transCodeEnumId", "PGT_AUTHORIZE", "referenceNum", externalId, "gatewayAvsResult", info.getAvsResponse(), "currencyUomId", info.getCurrencyCode()); + newGatewayMap.put("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId")); + newGatewayMap.put("paymentMethodTypeId", orderPaymentPreference.get("paymentMethodTypeId")); + newGatewayMap.put("transactionDate", order.getTimestamp("orderDate")); + createPaymentGatewayResponse(newGatewayMap); + } + } + return; } - + public void processChargeNotification(ChargeAmountNotification info) throws GeneralException { - // TODO: implement me (if desired) - return; // the notification will be accepted + String externalId = info.getGoogleOrderNumber(); + List<GenericValue> orders = null; + GenericValue orderPaymentPreference = null; + try { + orders = delegator.findByAnd("OrderHeader", UtilMisc.toMap("externalId", externalId, "salesChannelEnumId", SALES_CHANNEL)); + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + if (UtilValidate.isNotEmpty(orders)) { + GenericValue order = EntityUtil.getFirst(orders); + List<GenericValue> orderPaymentPreferences = order.getRelated("OrderPaymentPreference"); + if (UtilValidate.isNotEmpty(orderPaymentPreferences)) { + orderPaymentPreference = EntityUtil.getFirst(orderPaymentPreferences); + BigDecimal maxAmount = new BigDecimal(info.getTotalChargeAmount()); + //Update orderPaymentPreference + Map<String, Object> paymentPrefMap = UtilMisc.toMap("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId"), "maxAmount", maxAmount, "statusId", "PAYMENT_SETTLED", "paymentMethodTypeId", "EXT_GOOGLE_CHECKOUT"); + updatePaymentPreference(paymentPrefMap); + //Create PaymentGatewayResponse + maxAmount = new BigDecimal(info.getLatestChargeAmount()); + Map<String, Object> newGatewayMap = UtilMisc.toMap("amount", maxAmount, "transCodeEnumId", "PGT_CAPTURE", "referenceNum", externalId, "currencyUomId", info.getCurrencyCode()); + newGatewayMap.put("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId")); + newGatewayMap.put("paymentMethodTypeId", orderPaymentPreference.get("paymentMethodTypeId")); + newGatewayMap.put("transactionDate", order.getTimestamp("orderDate")); + createPaymentGatewayResponse(newGatewayMap); + } + } + return; } - + public void processRefundNotification(RefundAmountNotification info) throws GeneralException { - // TODO: implement me (if desired) - return; // the notification will be accepted + String externalId = info.getGoogleOrderNumber(); + List<GenericValue> orders = null; + GenericValue orderPaymentPreference = null; + try { + orders = delegator.findByAnd("OrderHeader", UtilMisc.toMap("externalId", externalId, "salesChannelEnumId", SALES_CHANNEL)); + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + if (UtilValidate.isNotEmpty(orders)) { + GenericValue order = EntityUtil.getFirst(orders); + List<GenericValue> orderPaymentPreferences = order.getRelated("OrderPaymentPreference"); + if (UtilValidate.isNotEmpty(orderPaymentPreferences)) { + orderPaymentPreference = EntityUtil.getFirst(orderPaymentPreferences); + BigDecimal maxAmount = new BigDecimal(info.getTotalRefundAmount()); + //Update orderPaymentPreference + Map<String, Object> paymentPrefMap = UtilMisc.toMap("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId"), "maxAmount", maxAmount, "statusId", "PAYMENT_REFUNDED", "paymentMethodTypeId", "EXT_GOOGLE_CHECKOUT"); + updatePaymentPreference(paymentPrefMap); + //Create PaymentGatewayResponse + maxAmount = new BigDecimal(info.getLatestRefundAmount()); + Map<String, Object> newGatewayMap = UtilMisc.toMap("amount", maxAmount, "transCodeEnumId", "PGT_REFUND", "referenceNum", externalId, "currencyUomId", info.getCurrencyCode()); + newGatewayMap.put("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId")); + newGatewayMap.put("paymentMethodTypeId", orderPaymentPreference.get("paymentMethodTypeId")); + newGatewayMap.put("transactionDate", order.getTimestamp("orderDate")); + createPaymentGatewayResponse(newGatewayMap); + } + } + return; } - + public void processChargeBackNotification(ChargebackAmountNotification info) throws GeneralException { // TODO: implement me (if desired) return; // the notification will be accepted @@ -606,4 +680,29 @@ } return UtilValidate.isNotEmpty(holdOrderNotes); } + + protected void updatePaymentPreference(Map<String, Object> paymentPrefMap) { + GenericValue newPref = delegator.makeValue("OrderPaymentPreference"); + newPref.set("orderPaymentPreferenceId", paymentPrefMap.get("orderPaymentPreferenceId")); + newPref.set("createdByUserLogin", system.getString("userLoginId")); + newPref.setNonPKFields(paymentPrefMap); + try { + delegator.store(newPref); + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + } + + protected void createPaymentGatewayResponse(Map<String, Object> newGatewayMap) { + try { + String responseId = delegator.getNextSeqId("PaymentGatewayResponse"); + GenericValue response = delegator.makeValue("PaymentGatewayResponse"); + response.set("paymentGatewayResponseId", responseId); + response.setNonPKFields(newGatewayMap); + delegator.create(response); + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + } + } \ No newline at end of file |
Free forum by Nabble | Edit this page |