package com.hugnew.sps.services.pay.strategy;
import com.hugnew.core.util.PropertiesUtil;
import com.hugnew.core.web.system.listener.InitListener;
import com.hugnew.sps.enums.PayType;
import com.hugnew.sps.services.ICheckSellerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
/**
* 支付宝wap支付(对接手机网站支付,包含国内、国际)
* Created by Martin on 2016/7/01.
*/
public class AlipayWapStrategy implements PayStrategy {
private static Logger logger = LoggerFactory.getLogger(AlipayWapStrategy.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");
}
String sellerCode = (String) params.get("sellerCode");
ICheckSellerService checkSellerService = (ICheckSellerService) InitListener.context.getBean("checkSellerService");
if(checkSellerService.isUseGlobalPay(sellerCode)){
//国际支付
return makeGlobalParam(params, retUrl);
}else{
//国内支付
return makeMainParam(params, retUrl);
}
}
private String makeGlobalParam(Map<String, Object> params, String retUrl) {
Map<String, String> sParaTemp = new HashMap<>();
sParaTemp.put("service", PropertiesUtil.getValue("pay.request.alipayWapGlobal.service"));
sParaTemp.put("partner", PropertiesUtil.getValue("pay.request.alipayWebGlobal.partner"));
sParaTemp.put("seller_email", PropertiesUtil.getValue("pay.request.alipayWebGlobal.seller_email"));
sParaTemp.put("_input_charset", PropertiesUtil.getValue("pay.request.alipayWebGlobal.input_charset"));
sParaTemp.put("payment_type", PropertiesUtil.getValue("pay.request.alipayWebGlobal.payment_type"));
sParaTemp.put("notify_url", PropertiesUtil.getValue("pay.notify.alipay.global.url"));
sParaTemp.put("return_url", null != retUrl ? retUrl : "http://www.hugnew.com");
sParaTemp.put("out_trade_no", (String) params.get("payCode"));
sParaTemp.put("subject", PropertiesUtil.getValue("pay.request.alipayWebGlobal.subject"));
sParaTemp.put("rmb_fee", String.valueOf(((BigDecimal) params.get("toPay")).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()));
sParaTemp.put("show_url", null != retUrl ? retUrl : PropertiesUtil.getValue("pay.request.retUrl"));
sParaTemp.put("show_url", PropertiesUtil.getValue("pay.request.alipayWebGlobal.show_url"));
//支付宝国际此处要求填写签约时所选的币种,此参数为必需参数,文档坑人
sParaTemp.put("currency", PropertiesUtil.getValue("pay.request.alipayWebGlobal.currency"));
sParaTemp.put("merchant_url", PropertiesUtil.getValue("pay.request.alipayWapGlobal.merchant_url"));
//建立请求
String sHtmlText = com.hugnew.sps.services.pay.util.web.ali.global.util.AlipaySubmit.buildRequestParams(sParaTemp);
if(logger.isDebugEnabled()){
logger.debug("alipay参数信息:{}", sHtmlText);
}
return sHtmlText;
}
private String makeMainParam(Map<String, Object> params, String retUrl) {
Map<String, String> sParaTemp = new HashMap<>();
sParaTemp.put("seller_id", PropertiesUtil.getValue("pay.request.alipayWebMain.partner"));
sParaTemp.put("service", PropertiesUtil.getValue("pay.request.alipayWapMain.service"));
sParaTemp.put("partner", PropertiesUtil.getValue("pay.request.alipayWebMain.partner"));
sParaTemp.put("seller_email", PropertiesUtil.getValue("pay.request.alipayWebMain.seller_email"));
sParaTemp.put("_input_charset", PropertiesUtil.getValue("pay.request.alipayWebMain.input_charset"));
sParaTemp.put("payment_type", PropertiesUtil.getValue("pay.request.alipayWebMain.payment_type"));
//此处通过 配置不同的notify_url来确定不同的通知路径 ,也就确定了不同的返回通知验证
sParaTemp.put("notify_url", PropertiesUtil.getValue("pay.notify.alipay.main.url"));
sParaTemp.put("return_url", null != retUrl ? retUrl : PropertiesUtil.getValue("pay.request.retUrl"));
sParaTemp.put("out_trade_no", (String) params.get("payCode"));
sParaTemp.put("subject", PropertiesUtil.getValue("pay.request.alipayWebMain.input_charset"));
sParaTemp.put("total_fee", String.valueOf(((BigDecimal) params.get("toPay")).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()));
sParaTemp.put("body", PropertiesUtil.getValue("pay.request.alipayWebMain.body"));
sParaTemp.put("paymethod", PropertiesUtil.getValue("pay.request.alipayWapMain.paymethod"));
sParaTemp.put("defaultbank", PropertiesUtil.getValue("pay.request.alipayWapMain.defaultbank"));
//订单或者商品 展示url;
sParaTemp.put("show_url", PropertiesUtil.getValue("pay.request.alipayWebMain.show_url"));
//建立请求
String sHtmlText = com.hugnew.sps.services.pay.util.web.ali.main.util.AlipaySubmit.buildRequestParams(sParaTemp);
if(logger.isDebugEnabled()){
logger.debug("alipay参数信息:{}", sHtmlText);
}
return sHtmlText;
}
}