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

📄 icspaymentservices.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * $Id: IcsPaymentServices.java 5462 2005-08-05 18:35:48Z jonesde $ * * Copyright (c) 2003 The Open For Business Project - www.ofbiz.org * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */package org.ofbiz.accounting.thirdparty.cybersource;import java.text.DecimalFormat;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Properties;import com.cybersource.ws.client.Client;import com.cybersource.ws.client.ClientException;import com.cybersource.ws.client.FaultException;import org.ofbiz.accounting.payment.PaymentGatewayServices;import org.ofbiz.base.util.Debug;import org.ofbiz.base.util.SSLUtil;import org.ofbiz.base.util.StringUtil;import org.ofbiz.base.util.UtilMisc;import org.ofbiz.base.util.UtilProperties;import org.ofbiz.base.util.UtilValidate;import org.ofbiz.entity.GenericEntityException;import org.ofbiz.entity.GenericValue;import org.ofbiz.service.DispatchContext;import org.ofbiz.service.ServiceUtil;/** * CyberSource WS Integration Services * * @author     <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a> * @version    $Rev: 5462 $ * @since      3.0 */public class IcsPaymentServices {    public static final String module = IcsPaymentServices.class.getName();    // load the JSSE properties    static {        SSLUtil.loadJsseProperties();    }    public static Map ccAuth(DispatchContext dctx, Map context) {        // generate the request/properties        Properties props = buildCsProperties(context);        if (props == null) {            return ServiceUtil.returnError("ERROR: Getting Cybersource property configuration");        }        Map request = buildAuthRequest(context);        request.put("merchantID", props.get("merchantID"));        // transmit the request        Map reply = null;        try {            reply = Client.runTransaction(request, props);        } catch (FaultException e) {            Debug.logError(e, "ERROR: Fault from CyberSource", module);            Debug.logError(e, "Fault : " + e.getFaultString(), module);            return ServiceUtil.returnError("Unable to communicate with CyberSource");        } catch (ClientException e) {            Debug.logError(e, "ERROR: CyberSource Client exception : " + e.getMessage(), module);            return ServiceUtil.returnError("Unable to communicate with CyberSource");        }        // process the reply        Map result = ServiceUtil.returnSuccess();        processAuthResult(reply, result);        return result;    }    public static Map ccReAuth(DispatchContext dctx, Map context) {        return ServiceUtil.returnSuccess();    }    public static Map ccCapture(DispatchContext dctx, Map context) {        GenericValue orderPaymentPreference = (GenericValue) context.get("orderPaymentPreference");        //lets see if there is a auth transaction already in context        GenericValue authTransaction = (GenericValue) context.get("authTrans");        if (authTransaction == null){        	authTransaction = PaymentGatewayServices.getAuthTransaction(orderPaymentPreference);        }        if (authTransaction == null) {            return ServiceUtil.returnError("No authorization transaction found for the OrderPaymentPreference; cannot capture");        }        // generate the request/properties        Properties props = buildCsProperties(context);        if (props == null) {            return ServiceUtil.returnError("ERROR: Getting Cybersource property configuration");        }        Map request = buildCaptureRequest(context, authTransaction);        request.put("merchantID", props.get("merchantID"));        // transmit the request        Map reply = null;        try {            reply = Client.runTransaction(request, props);        } catch (FaultException e) {            Debug.logError(e, "ERROR: Fault from CyberSource", module);            return ServiceUtil.returnError("Unable to communicate with CyberSource");        } catch (ClientException e) {            Debug.logError(e, "ERROR: CyberSource Client exception : " + e.getMessage(), module);            return ServiceUtil.returnError("Unable to communicate with CyberSource");        }        // process the reply        Map result = ServiceUtil.returnSuccess();        processCaptureResult(reply, result);        return result;    }    public static Map ccRelease(DispatchContext dctx, Map context) {        GenericValue orderPaymentPreference = (GenericValue) context.get("orderPaymentPreference");        GenericValue authTransaction = PaymentGatewayServices.getAuthTransaction(orderPaymentPreference);        if (authTransaction == null) {            return ServiceUtil.returnError("No authorization transaction found for the OrderPaymentPreference; cannot release");        }        // generate the request/properties        Properties props = buildCsProperties(context);        if (props == null) {            return ServiceUtil.returnError("ERROR: Getting Cybersource property configuration");        }        Map request = buildReleaseRequest(context, authTransaction);        request.put("merchantID", props.get("merchantID"));        // transmit the request        Map reply = null;        try {            reply = Client.runTransaction(request, props);        } catch (FaultException e) {            Debug.logError(e, "ERROR: Fault from CyberSource", module);            return ServiceUtil.returnError("Unable to communicate with CyberSource");        } catch (ClientException e) {            Debug.logError(e, "ERROR: CyberSource Client exception : " + e.getMessage(), module);            return ServiceUtil.returnError("Unable to communicate with CyberSource");        }        // process the reply        Map result = ServiceUtil.returnSuccess();        processReleaseResult(reply, result);        return result;    }    public static Map ccRefund(DispatchContext dctx, Map context) {        GenericValue orderPaymentPreference = (GenericValue) context.get("orderPaymentPreference");        GenericValue authTransaction = PaymentGatewayServices.getAuthTransaction(orderPaymentPreference);        if (authTransaction == null) {            return ServiceUtil.returnError("No authorization transaction found for the OrderPaymentPreference; cannot refund");        }        // generate the request/properties        Properties props = buildCsProperties(context);        if (props == null) {            return ServiceUtil.returnError("ERROR: Getting Cybersource property configuration");        }        Map request = buildRefundRequest(context, authTransaction);        request.put("merchantID", props.get("merchantID"));        // transmit the request        Map reply = null;        try {            reply = Client.runTransaction(request, props);        } catch (FaultException e) {            Debug.logError(e, "ERROR: Fault from CyberSource", module);            return ServiceUtil.returnError("Unable to communicate with CyberSource");        } catch (ClientException e) {            Debug.logError(e, "ERROR: CyberSource Client exception : " + e.getMessage(), module);            return ServiceUtil.returnError("Unable to communicate with CyberSource");        }        // process the reply        Map result = ServiceUtil.returnSuccess();        processRefundResult(reply, result);        return result;    }    public static Map ccCredit(DispatchContext dctx, Map context) {        // generate the request/properties        Properties props = buildCsProperties(context);        if (props == null) {            return ServiceUtil.returnError("ERROR: Getting Cybersource property configuration");        }        Map request = buildCreditRequest(context);        request.put("merchantID", props.get("merchantID"));        // transmit the request        Map reply = null;        try {            reply = Client.runTransaction(request, props);        } catch (FaultException e) {            Debug.logError(e, "ERROR: Fault from CyberSource", module);            return ServiceUtil.returnError("Unable to communicate with CyberSource");        } catch (ClientException e) {            Debug.logError(e, "ERROR: CyberSource Client exception : " + e.getMessage(), module);            return ServiceUtil.returnError("Unable to communicate with CyberSource");        }        // process the reply        Map result = ServiceUtil.returnSuccess();        processCreditResult(reply, result);        return result;    }    private static Properties buildCsProperties(Map context) {        String configString = (String) context.get("paymentConfig");        if (configString == null) {            configString = "payment.properties";        }        String merchantId = UtilProperties.getPropertyValue(configString, "payment.cybersource.merchantID");        String targetApi = UtilProperties.getPropertyValue(configString, "payment.cybersource.api.version");        String production = UtilProperties.getPropertyValue(configString, "payment.cybersource.production");        String enableLog = UtilProperties.getPropertyValue(configString, "payment.cybersource.log");        String logSize = UtilProperties.getPropertyValue(configString, "payment.cybersource.log.size");        String logFile = UtilProperties.getPropertyValue(configString, "payment.cybersource.log.file");        String logDir = UtilProperties.getPropertyValue(configString, "payment.cybersource.log.dir");        String keysPath = UtilProperties.getPropertyValue(configString, "payment.cybersource.keysDir");        String keysFile = UtilProperties.getPropertyValue(configString, "payment.cybersource.keysFile");        // some property checking        if (UtilValidate.isEmpty(merchantId)) {            Debug.logWarning("The merchantId property in [" + configString + "] is not configured", module);            return null;        }        if (UtilValidate.isEmpty(keysPath)) {            Debug.logWarning("The keysDir property in [" + configString + "] is not configured", module);            return null;        }        // create some properties for CS Client        Properties props = new Properties();        props.put("merchantID", merchantId);        props.put("keysDirectory", keysPath);        props.put("targetAPIVersion", targetApi);        props.put("sendToProduction", production);        props.put("enableLog", enableLog);        props.put("logDirectory", logDir);        props.put("logFilename", logFile);        props.put("logMaximumSize", logSize);        if (keysFile != null && keysFile.length() > 0) {            props.put("alternateKeyFilename", keysFile);        }        //Debug.logInfo("Created CyberSource Properties : " + props, module);        return props;    }    private static Map buildAuthRequest(Map context) {        String configString = (String) context.get("paymentConfig");        String currency = (String) context.get("currency");        if (configString == null) {            configString = "payment.properties";        }        // make the request map        String capture = UtilProperties.getPropertyValue(configString, "payment.cybersource.autoBill", "false");        String orderId = (String) context.get("orderId");        Map request = new HashMap();        request.put("ccAuthService_run", "true");              // run auth service        request.put("ccCaptureService_run", capture);          // run capture service (i.e. sale)        request.put("merchantReferenceCode", orderId);         // set the order ref number        request.put("purchaseTotals_currency", currency);      // set the order currency        appendFullBillingInfo(request, context);               // add in all address info        appendItemLineInfo(request, context, "processAmount"); // add in the item info        appendAvsRules(request, context);                      // add in the AVS flags and decline codes        return request;    }    private static Map buildCaptureRequest(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("ccCaptureService_run", "true");        request.put("ccCaptureService_authRequestID", authTransaction.getString("referenceNum"));        request.put("item_0_unitPrice", getAmountString(context, "captureAmount"));        request.put("merchantReferenceCode", orderPaymentPreference.getString("orderId"));        request.put("purchaseTotals_currency", currency);        // TODO: add support for verbal authorizations        //request.put("ccCaptureService_authType", null);   -- should be 'verbal'        //request.put("ccCaptureService_verbalAuthCode", null); -- code from verbal auth        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 buildReleaseRequest(Map context, GenericValue authTransaction) {        GenericValue orderPaymentPreference = (GenericValue) context.get("orderPaymentPreference");

⌨️ 快捷键说明

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