package com.hugnew.sps.services.pay.strategy;
import com.hugnew.core.util.PropertiesUtil;
import com.hugnew.sps.services.pay.util.web.unionpay.util.DemoBase;
import com.hugnew.sps.enums.PayType;
import com.unionpay.acp.sdk.SDKConfig;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 银联app支付(对接acp)
* Created by Martin on 2016/7/01.
*/
public class UnionAppStrategy extends DemoBase implements PayStrategy {
private static Logger logger = LoggerFactory.getLogger(UnionAppStrategy.class);
@Override
public String generatePayParams(PayType payType, Map<String, Object> params) {
String retUrl = null;
if (params.size() > 0 && null != params.get("retUrl")) {
retUrl = (String) params.get("retUrl");
}
//组装请求报文
Map<String, String> data = new HashMap<String, String>();
// 版本号
data.put("version", PropertiesUtil.getValue("pay.request.unionpayApp.version"));
// 字符集编码 默认"UTF-8"
data.put("encoding", PropertiesUtil.getValue("pay.request.unionpayApp.encoding"));
// 签名方法 01 RSA
data.put("signMethod", PropertiesUtil.getValue("pay.request.unionpayApp.signMethod"));
// 交易类型 01-消费
data.put("txnType", PropertiesUtil.getValue("pay.request.unionpayApp.txnType"));
// 交易子类型 01:自助消费 02:订购 03:分期付款
data.put("txnSubType", PropertiesUtil.getValue("pay.request.unionpayApp.txnSubType"));
// 业务类型
data.put("bizType", PropertiesUtil.getValue("pay.request.unionpayApp.bizType"));
// 渠道类型,07-PC,08-手机
data.put("channelType", PropertiesUtil.getValue("pay.request.unionpayApp.channelType"));
// 前台通知地址 ,控件接入方式无作用
data.put("frontUrl", null != retUrl ? retUrl : PropertiesUtil.getValue("pay.request.retUrl"));
// 后台通知地址
data.put("backUrl", PropertiesUtil.getValue("pay.notify.unionpay.url"));
// 接入类型,商户接入填0 0- 商户 , 1: 收单, 2:平台商户
data.put("accessType", PropertiesUtil.getValue("pay.request.unionpayApp.accessType"));
// 商户号码,请改成自己的商户号
data.put("merId", PropertiesUtil.getValue("pay.request.unionpayApp.merId"));
// 商户订单号,8-40位数字字母
data.put("orderId", (String) params.get("payCode"));
// 订单发送时间,取系统时间
data.put("txnTime", new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
data.put("txnAmt", String.valueOf(((BigDecimal) params.get("toPay")).multiply(BigDecimal.valueOf(100)).longValue()));
// 交易币种
data.put("currencyCode", PropertiesUtil.getValue("pay.request.unionpayApp.currencyCode"));
Map<String, String> submitFromData = signData(data);
String requestAppUrl = SDKConfig.getConfig().getAppRequestUrl();
Map<String, String> resmap = submitUrl(submitFromData, requestAppUrl);
if(logger.isDebugEnabled()){
logger.debug("union resmap:{}", resmap.toString());
}
if (StringUtils.isNotBlank(resmap.get("respCode")) && "00".equals(resmap.get("respCode"))) {
return resmap.get("tn");
} else {
return null;
}
}
}