⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 icspaymentservices.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        String currency = (String) context.get("currency");        Map request = new HashMap();        request.put("ccAuthReversalService_run", "true");        request.put("ccAuthReversalService_authRequestID", authTransaction.getString("referenceNum"));        request.put("item_0_unitPrice", getAmountString(context, "releaseAmount"));        request.put("merchantReferenceCode", orderPaymentPreference.getString("orderId"));        request.put("purchaseTotals_currency", currency);        return request;    }    private static Map buildRefundRequest(Map context, GenericValue authTransaction) {        GenericValue orderPaymentPreference = (GenericValue) context.get("orderPaymentPreference");        String configString = (String) context.get("paymentConfig");        String currency = (String) context.get("currency");        if (configString == null) {            configString = "payment.properties";        }        String merchantDesc = UtilProperties.getPropertyValue(configString, "payment.cybersource.merchantDescr", null);        String merchantCont = UtilProperties.getPropertyValue(configString, "payment.cybersource.merchantContact", null);        Map request = new HashMap();        request.put("ccCreditService_run", "true");        request.put("ccCreditService_captureRequestID", authTransaction.getString("referenceNum"));        request.put("item_0_unitPrice", getAmountString(context, "refundAmount"));        request.put("merchantReferenceCode", orderPaymentPreference.getString("orderId"));        request.put("purchaseTotals_currency", currency);        if (merchantDesc != null) {            request.put("invoiceHeader_merchantDescriptor", merchantDesc);        // merchant description        }        if (merchantCont != null) {            request.put("invoiceHeader_merchantDescriptorContact", merchantCont); // merchant contact info        }        return request;    }    private static Map buildCreditRequest(Map context) {        String refCode = (String) context.get("referenceCode");        Map request = new HashMap();        request.put("ccCreditService_run", "true");            // run credit service        request.put("merchantReferenceCode", refCode);         // set the ref number could be order id        appendFullBillingInfo(request, context);               // add in all address info        appendItemLineInfo(request, context, "creditAmount");  // add in the item info        return request;    }    private static void appendAvsRules(Map request, Map context) {        String configString = (String) context.get("paymentConfig");        if (configString == null) {            configString = "payment.properties";        }        String avsCodes = UtilProperties.getPropertyValue(configString, "payment.cybersource.avsDeclineCodes", null);        GenericValue party = (GenericValue) context.get("billToParty");        if (party != null) {            GenericValue avsOverride = null;            try {                avsOverride = party.getDelegator().findByPrimaryKey("PartyIcsAvsOverride",                        UtilMisc.toMap("partyId", party.getString("partyId")));            } catch (GenericEntityException e) {                Debug.logError(e, module);            }            if (avsOverride != null && avsOverride.get("avsDeclineString") != null) {                String overrideString = avsOverride.getString("avsDeclineString");                if (overrideString != null && overrideString.length() > 0) {                    avsCodes = overrideString;                }            }        }        if (avsCodes != null && avsCodes.length() > 0) {            request.put("businessRules_declineAVSFlags", avsCodes);        }        String avsIgnore = UtilProperties.getPropertyValue(configString, "payment.cybersource.avsDeclineCodes", "false");        request.put("businessRules_ignoreAVS", avsIgnore);    }    private static void appendFullBillingInfo(Map request, Map context) {        // person info        GenericValue party = (GenericValue) context.get("billToParty");        // contact info        GenericValue email = (GenericValue) context.get("billToEmail");        if (email != null) {            request.put("billTo_email", email.getString("infoString"));        } else {            Debug.logWarning("Email not defined; Cybersource will fail.", module);        }        // phone number seems to not be used; possibly only for reporting.        // CC payment info        GenericValue creditCard = (GenericValue) context.get("creditCard");        if (creditCard != null) {            List expDateList = StringUtil.split(creditCard.getString("expireDate"), "/");            request.put("billTo_firstName", creditCard.getString("firstNameOnCard"));            request.put("billTo_lastName", creditCard.getString("lastNameOnCard"));            request.put("card_accountNumber", creditCard.getString("cardNumber"));            request.put("card_expirationMonth", expDateList.get(0));            request.put("card_expirationYear", expDateList.get(1));        } else {            Debug.logWarning("CreditCard not defined; Cybersource will fail.", module);        }        // CCV info        String cvNum = (String) context.get("cardSecurityCode");        String cvSet = UtilValidate.isEmpty(cvNum) ? "1" : "0";        request.put("card_cvIndicator", cvSet);        if ("1".equals(cvNum)) {            request.put("card_cvNumber", cvNum);        }        // payment contact info        GenericValue billingAddress = (GenericValue) context.get("billingAddress");        if (billingAddress != null) {            request.put("billTo_street1", billingAddress.getString("address1"));            if (billingAddress.get("address2") != null) {                request.put("billTo_street2", billingAddress.getString("address2"));            }            request.put("billTo_city", billingAddress.getString("city"));            String bCountry = billingAddress.get("countryGeoId") != null ? billingAddress.getString("countryGeoId") : "USA";            request.put("billTo_country", bCountry);            request.put("billTo_postalCode", billingAddress.getString("postalCode"));            if (billingAddress.get("stateProvinceGeoId") != null) {                request.put("billTo_state", billingAddress.getString("stateProvinceGeoId"));            }        } else {            Debug.logWarning("BillingAddress not defined; Cybersource will fail.", module);        }        // order shipping information        GenericValue shippingAddress = (GenericValue) context.get("shippingAddress");        if (shippingAddress != null) {            if (creditCard != null) {                // TODO: this is just a kludge since we don't have a firstName and lastName on the PostalAddress entity, that needs to be done                request.put("shipTo_firstName", creditCard.getString("firstNameOnCard"));                request.put("shipTo_lastName", creditCard.getString("lastNameOnCard"));            }            request.put("shipTo_street1", shippingAddress.getString("address1"));            if (shippingAddress.get("address2") != null) {                request.put("shipTo_street2", shippingAddress.getString("address2"));            }            request.put("shipTo_city", shippingAddress.getString("city"));            String sCountry = shippingAddress.get("countryGeoId") != null ? shippingAddress.getString("countryGeoId") : "USA";            request.put("shipTo_country", sCountry);            request.put("shipTo_postalCode", shippingAddress.getString("postalCode"));            if (shippingAddress.get("stateProvinceGeoId") != null) {                request.put("shipTo_state", shippingAddress.getString("stateProvinceGeoId"));            }        }    }    private static void appendItemLineInfo(Map request, Map context, String amountField) {        // send over a line item total offer w/ the total for billing; don't trust CyberSource for calc        String currency = (String) context.get("currency");        int lineNumber = 0;        request.put("item_" + lineNumber + "_unitPrice", getAmountString(context, amountField));        // the currency        request.put("purchaseTotals_currency", currency);        // create the offers (one for each line item)        List orderItems = (List) context.get("orderItems");        if (orderItems != null) {            Iterator itemIterator = orderItems.iterator();            while (itemIterator.hasNext()) {                lineNumber++;                GenericValue item = (GenericValue) itemIterator.next();                GenericValue product = null;                try {                    product = item.getRelatedOne("Product");                } catch (GenericEntityException e) {                    Debug.logError(e, "ERROR: Unable to get Product from OrderItem, not passing info to CyberSource");                }                if (product != null) {                    request.put("item_" + lineNumber + "_productName", product.getString("productName"));                    request.put("item_" + lineNumber + "_productSKU", product.getString("productId"));                } else {                    // no product; just send the item description -- non product items                    request.put("item_" + lineNumber + "_productName", item.getString("description"));                }                // get the quantity..                Double quantity = item.getDouble("quantity");                // test quantity if INT pass as is; if not pass as 1                long roundQ = Math.round(quantity.doubleValue());                Double rounded = new Double(new Long(roundQ).toString());                if (rounded.doubleValue() != quantity.doubleValue()) {                    request.put("item_" + lineNumber + "_quantity", "1");                } else {                    request.put("", new Integer(quantity.intValue()).toString());                }                // set the amount to 0.0000 -- we will send a total too.                request.put("item_" + lineNumber + "_unitPrice", "0.0000");            }        }    }    private static String getAmountString(Map context, String amountField) {        String currencyFormat = UtilProperties.getPropertyValue("general.properties", "currency.decimal.format", "##0.00");        DecimalFormat formatter = new DecimalFormat(currencyFormat);        Double processAmount = (Double) context.get(amountField);        return formatter.format(processAmount);    }    private static void processAuthResult(Map reply, Map result) {        String decision = getDecision(reply);        if ("ACCEPT".equalsIgnoreCase(decision)) {            result.put("authCode", reply.get("ccAuthReply_authorizationCode"));            result.put("authResult", new Boolean(true));        } else {            result.put("authCode", decision);            result.put("authResult", new Boolean(false));        }        if (reply.get("ccAuthReply_amount") != null) {            result.put("processAmount", new Double((String) reply.get("ccAuthReply_amount")));        } else {            result.put("processAmount", new Double(0.00));        }        result.put("authRefNum", reply.get("requestID"));        result.put("authFlag", reply.get("ccAuthReply_reasonCode"));        result.put("authMessage", reply.get("ccAuthReply_processorResponse"));        result.put("cvCode", reply.get("ccAuthReply_cvCode"));        result.put("avsCode", reply.get("ccAuthReply_avsCode"));        result.put("scoreCode", reply.get("ccAuthReply_authFactorCode"));        result.put("captureRefNum", reply.get("requestID")); // maybe use something else here?        result.put("captureCode", reply.get("ccCaptureReply_reconciliationID"));    }    private static void processCaptureResult(Map reply, Map result) {        String decision = getDecision(reply);        if ("ACCEPT".equalsIgnoreCase(decision)) {            result.put("captureResult", new Boolean(true));        } else {            result.put("captureResult", new Boolean(false));        }        if (reply.get("ccCaptureReply_amount") != null) {            result.put("captureAmount", new Double((String) reply.get("ccCaptureReply_amount")));        } else {            result.put("captureAmount", new Double(0.00));        }        result.put("captureRefNum", reply.get("requestID"));        result.put("captureCode", reply.get("ccCaptureReply_reconciliationID"));        result.put("captureFlag", reply.get("ccCaptureReply_reasonCode"));        result.put("captureMessage", reply.get("decision"));    }    private static void processReleaseResult(Map reply, Map result) {        String decision = getDecision(reply);        if ("ACCEPT".equalsIgnoreCase(decision)) {            result.put("releaseResult", new Boolean(true));        } else {            result.put("releaseResult", new Boolean(false));        }        if (reply.get("ccAuthReversalReply_amount") != null) {            result.put("releaseAmount", new Double((String) reply.get("ccAuthReversalReply_amount")));        } else {            result.put("releaseAmount", new Double(0.00));        }        result.put("releaseRefNum", reply.get("requestID"));        result.put("releaseCode", reply.get("ccAuthReversalReply_authorizationCode"));        result.put("releaseFlag", reply.get("ccAuthReversalReply_reasonCode"));        result.put("releaseMessage", reply.get("decision"));    }    private static void processRefundResult(Map reply, Map result) {        String decision = getDecision(reply);        if ("ACCEPT".equalsIgnoreCase(decision)) {            result.put("refundResult", new Boolean(true));        } else {            result.put("refundResult", new Boolean(false));        }        if (reply.get("ccCreditReply_amount") != null) {            result.put("refundAmount", new Double((String) reply.get("ccCreditReply_amount")));        } else {            result.put("refundAmount", new Double(0.00));        }        result.put("refundRefNum", reply.get("requestID"));        result.put("refundCode", reply.get("ccCreditReply_reconciliationID"));        result.put("refundFlag", reply.get("ccCreditReply_reasonCode"));        result.put("refundMessage", reply.get("decision"));    }    private static void processCreditResult(Map reply, Map result) {        String decision = (String) reply.get("decision");        if ("ACCEPT".equalsIgnoreCase(decision)) {            result.put("creditResult", new Boolean(true));        } else {            result.put("creditResult", new Boolean(false));        }        if (reply.get("ccCreditReply_amount") != null) {            result.put("creditAmount", new Double((String) reply.get("ccCreditReply_amount")));        } else {            result.put("creditAmount", new Double(0.00));        }        result.put("creditRefNum", reply.get("requestID"));        result.put("creditCode", reply.get("ccCreditReply_reconciliationID"));        result.put("creditFlag", reply.get("ccCreditReply_reasonCode"));        result.put("creditMessage", reply.get("decision"));    }    private static String getDecision(Map reply) {        String decision = (String) reply.get("decision");        String reasonCode = (String) reply.get("reasonCode");        if (!"ACCEPT".equalsIgnoreCase(decision)) {            Debug.logInfo("CyberSource : " + decision + " (" + reasonCode + ")", module);            Debug.logInfo("Reply Dump : " + reply, module);        }        return decision;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -