/** * */ package jframe.pay.upmp.req; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import com.unionpay.acp.sdk.SDKConfig; import com.unionpay.acp.sdk.SDKUtil; import jframe.pay.domain.PayCurrency; import jframe.pay.domain.util.IDUtil; import jframe.pay.upmp.domain.UpmpConfig; /** * @author dzh * @date Nov 25, 2015 4:09:58 PM * @since 1.0 */ public class ConsumeReq extends UpmpSdk { public static boolean consume(Map<String, String> req, Map<String, Object> rsp) { /** * 组装请求报文 */ Map<String, String> data = new HashMap<String, String>(); // 版本号 data.put("version", UpmpConfig.getConf(UpmpConfig.KEY_VERSION)); // 字符集编码 默认"UTF-8" data.put("encoding", UpmpConfig.getConf(UpmpConfig.KEY_CHARSET)); // 签名方法 01 RSA data.put("signMethod", "01"); // 交易类型 01-消费 data.put("txnType", "01"); // 交易子类型 01:自助消费 02:订购 03:分期付款 data.put("txnSubType", "01"); // 业务类型 data.put("bizType", "000201"); // 渠道类型,07-PC,08-手机 data.put("channelType", "08"); // 前台通知地址 ,控件接入方式无作用 data.put("frontUrl", UpmpConfig.getConf(UpmpConfig.KEY_FRONT_URL)); // 后台通知地址 data.put("backUrl", UpmpConfig.getConf(UpmpConfig.KEY_BACK_URL)); // 接入类型,商户接入填0 0- 商户 , 1: 收单, 2:平台商户 data.put("accessType", "0"); // 商户号码,请改成自己的商户号 data.put("merId", UpmpConfig.getConf(UpmpConfig.KEY_MER_ID)); // 商户订单号,8-40位数字字母 String orderNo = IDUtil.genOrderNo(); req.put(F_orderNo, orderNo); data.put("orderId", orderNo); // 订单发送时间,取系统时间 data.put("txnTime", new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())); // 交易金额,单位分 data.put("txnAmt", req.get(F_payAmount)); // 交易币种 data.put("currencyCode", PayCurrency.CNY.code); // 请求方保留域,透传字段,查询、通知、对账文件中均会原样出现 // data.put("reqReserved", "透传信息"); // 订单描述,可不上送,上送时控件中会显示该信息 // data.put("orderDesc", "订单描述"); data = signData(data); // 交易请求url 从配置文件读取 String requestAppUrl = SDKConfig.getConfig().getAppRequestUrl(); Map<String, String> resmap = submitUrl(data, requestAppUrl); rsp.putAll(resmap); if (LOG.isDebugEnabled()) { LOG.debug("Consume req->{} rsp->{}", data.toString(), resmap.toString()); } return UpmpConfig.RESPONSE_CODE_SUCCESS.equals(resmap.get("respCode")) ? true : false; } public static boolean backPay(Map<String, String> req, Map<String, Object> rsp) throws UnsupportedEncodingException { return UpmpConfig.RESPONSE_CODE_SUCCESS.equals(req.get("respCode")) && validateData(req); } private static boolean validateData(Map<String, String> req) throws UnsupportedEncodingException { Map<String, String> valideData = null; boolean r = false; if (null != req && !req.isEmpty()) { Iterator<Entry<String, String>> it = req.entrySet().iterator(); valideData = new HashMap<String, String>(req.size()); while (it.hasNext()) { Entry<String, String> e = it.next(); String key = (String) e.getKey(); String value = (String) e.getValue(); value = new String(value.getBytes("ISO-8859-1"), encoding); valideData.put(key, value); } r = SDKUtil.validate(valideData, valideData.get(F_param_encoding)); } if (LOG.isDebugEnabled() && !r) { LOG.error("validateData false valideData -> {}", valideData); } r = true; // TODO return r; } }