📄 payflowpro.java
字号:
} public static Map ccRefund(DispatchContext dctx, Map context) { GenericValue paymentPref = (GenericValue) context.get("orderPaymentPreference"); Double amount = (Double) context.get("refundAmount"); String configString = (String) context.get("paymentConfig"); if (configString == null) { configString = "payment.properties"; } GenericValue captureTrans = PaymentGatewayServices.getCaptureTransaction(paymentPref); if (captureTrans == null) { return ServiceUtil.returnError("No capture transaction found for the OrderPaymentPreference; cannot refund"); } // auth ref number String refNum = captureTrans.getString("referenceNum"); Map data = UtilMisc.toMap("ORIGID", refNum); // tx type (Credit) data.put("TRXTYPE", "C"); // credit card tender data.put("TENDER", "C"); // get the orderID String orderId = paymentPref.getString("orderId"); data.put("COMMENT1", orderId); // amount to capture data.put("AMT", amount.toString()); PFProAPI pn = init(configString); // get the base params StringBuffer params = makeBaseParams(configString); // parse the context parameters params.append("&" + parseContext(data)); // transmit the request if (Debug.verboseOn()) Debug.logVerbose("Sending to Verisign: " + params.toString(), module); String resp = pn.SubmitTransaction(params.toString()); if (Debug.verboseOn()) Debug.logVerbose("Response from Verisign: " + resp, module); // reset for next use pn.DestroyContext(); // check the response Map result = ServiceUtil.returnSuccess(); parseRefundResponse(resp, result, configString); result.put("refundAmount", amount); return result; } private static void parseAuthResponse(String resp, Map result, String resource, boolean isReAuth) { Debug.logInfo("Verisign response string: " + resp, module); Map parameters = new LinkedMap(); List params = StringUtil.split(resp, "&"); Iterator i = params.iterator(); while (i.hasNext()) { String str = (String) i.next(); if (str.length() > 0) { List kv = StringUtil.split(str, "="); Object k = kv.get(0); Object v = kv.get(1); if (k != null && v != null) parameters.put(k, v); } } // txType boolean isSale = !UtilProperties.propertyValueEqualsIgnoreCase(resource, "payment.verisign.preAuth", "Y"); // avs checking - ignore on re-auth boolean avsCheckOkay = true; String avsCode = null; if (!isReAuth) { boolean checkAvs = UtilProperties.propertyValueEqualsIgnoreCase(resource, "payment.verisign.checkAvs", "Y"); if (checkAvs && !isSale) { String addAvs = (String) parameters.get("AVSADDR"); String zipAvs = (String) parameters.get("AVSZIP"); avsCode = addAvs + zipAvs; if ("N".equals(addAvs) || "N".equals(zipAvs)) { avsCheckOkay = false; } } } // cvv2 checking - ignore on re-auth boolean cvv2CheckOkay = true; String cvvCode = null; if (!isReAuth) { boolean checkCvv2 = UtilProperties.propertyValueEqualsIgnoreCase(resource, "payment.verisign.checkAvs", "Y"); if (checkCvv2 && !isSale) { cvvCode = (String) parameters.get("CVV2MATCH"); if ("N".equals(cvvCode)) { cvv2CheckOkay = false; } } } String respCode = (String) parameters.get("RESULT"); if (respCode.equals("0") && avsCheckOkay && cvv2CheckOkay) { result.put("authResult", Boolean.TRUE); result.put("authCode", parameters.get("AUTHCODE")); } else { result.put("authResult", Boolean.FALSE); } result.put("cvCode", cvvCode); result.put("avsCode", avsCode); result.put("authRefNum", parameters.get("PNREF")); result.put("authFlag", parameters.get("RESULT")); result.put("authMessage", parameters.get("RESPMSG")); } private static void parseCaptureResponse(String resp, Map result, String resource) { Map parameters = new LinkedMap(); List params = StringUtil.split(resp, "&"); Iterator i = params.iterator(); while (i.hasNext()) { String str = (String) i.next(); if (str.length() > 0) { List kv = StringUtil.split(str, "="); Object k = kv.get(0); Object v = kv.get(1); if (k != null && v != null) parameters.put(k, v); } } String respCode = (String) parameters.get("RESULT"); if (respCode.equals("0")) { result.put("captureResult", Boolean.TRUE); result.put("captureCode", parameters.get("AUTHCODE")); } else { result.put("captureResult", Boolean.FALSE); } result.put("captureRefNum", parameters.get("PNREF")); result.put("captureFlag", parameters.get("RESULT")); result.put("captureMessage", parameters.get("RESPMSG")); } private static void parseVoidResponse(String resp, Map result, String resource) { Map parameters = new LinkedMap(); List params = StringUtil.split(resp, "&"); Iterator i = params.iterator(); while (i.hasNext()) { String str = (String) i.next(); if (str.length() > 0) { List kv = StringUtil.split(str, "="); Object k = kv.get(0); Object v = kv.get(1); if (k != null && v != null) parameters.put(k, v); } } String respCode = (String) parameters.get("RESULT"); if (respCode.equals("0")) { result.put("releaseResult", Boolean.TRUE); result.put("releaseCode", parameters.get("AUTHCODE")); } else { result.put("releaseResult", Boolean.FALSE); } result.put("releaseRefNum", parameters.get("PNREF")); result.put("releaseFlag", parameters.get("RESULT")); result.put("releaseMessage", parameters.get("RESPMSG")); } private static void parseRefundResponse(String resp, Map result, String resource) { Map parameters = new LinkedMap(); List params = StringUtil.split(resp, "&"); Iterator i = params.iterator(); while (i.hasNext()) { String str = (String) i.next(); if (str.length() > 0) { List kv = StringUtil.split(str, "="); Object k = kv.get(0); Object v = kv.get(1); if (k != null && v != null) parameters.put(k, v); } } String respCode = (String) parameters.get("RESULT"); if (respCode.equals("0")) { result.put("refundResult", Boolean.TRUE); result.put("refundCode", parameters.get("AUTHCODE")); } else { result.put("refundResult", Boolean.FALSE); } result.put("refundRefNum", parameters.get("PNREF")); result.put("refundFlag", parameters.get("RESULT")); result.put("refundMessage", parameters.get("RESPMSG")); } private static String parseContext(Map context) { StringBuffer buf = new StringBuffer(); Set keySet = context.keySet(); Iterator i = keySet.iterator(); while (i.hasNext()) { Object name = i.next(); Object value = context.get(name); if (value != null && (value instanceof String) && ((String) value).length() == 0) continue; buf.append(name + "="); buf.append(value); if (i.hasNext()) buf.append("&"); } return buf.toString(); } private static StringBuffer makeBaseParams(String resource) { StringBuffer buf = new StringBuffer(); try { buf.append("PARTNER="); buf.append(UtilProperties.getPropertyValue(resource, "payment.verisign.partner", "VeriSign")); buf.append("&"); buf.append("VENDOR="); buf.append(UtilProperties.getPropertyValue(resource, "payment.verisign.vendor", "nobody")); buf.append("&"); buf.append("USER="); buf.append(UtilProperties.getPropertyValue(resource, "payment.verisign.user", "nobody")); buf.append("&"); buf.append("PWD="); buf.append(UtilProperties.getPropertyValue(resource, "payment.verisign.pwd", "password")); } catch (Exception e) { Debug.logError(e, module); return null; } return buf; } private static PFProAPI init(String resource) { String certsPath = UtilProperties.getPropertyValue(resource, "payment.verisign.certsPath", "pfcerts"); String hostAddress = UtilProperties.getPropertyValue(resource, "payment.verisign.hostAddress", "test-payflow.verisign.com"); Integer hostPort = Integer.decode(UtilProperties.getPropertyValue(resource, "payment.verisign.hostPort", "443")); Integer timeout = Integer.decode(UtilProperties.getPropertyValue(resource, "payment.verisign.timeout", "80")); String proxyAddress = UtilProperties.getPropertyValue(resource, "payment.verisign.proxyAddress", ""); Integer proxyPort = Integer.decode(UtilProperties.getPropertyValue(resource, "payment.verisign.proxyPort", "80")); String proxyLogon = UtilProperties.getPropertyValue(resource, "payment.verisign.proxyLogon", ""); String proxyPassword = UtilProperties.getPropertyValue(resource, "payment.verisign.proxyPassword", ""); PFProAPI pn = new PFProAPI(); // Set the certificate path pn.SetCertPath(certsPath); // Call the client. pn.CreateContext(hostAddress, hostPort.intValue(), timeout.intValue(), proxyAddress, proxyPort.intValue(), proxyLogon, proxyPassword); return pn; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -