/src/main/java/com/hugnew/sps/services/impls/PayRouteService.java
https://github.com/Martin404/PayMap · Java · 175 lines · 157 code · 14 blank · 4 comment · 9 complexity · f3fc1c402ed2bf82513300cab95a005a MD5 · raw file
- package com.hugnew.sps.services.impls;
- import com.alibaba.fastjson.JSON;
- import com.hugnew.sps.dao.*;
- import com.hugnew.sps.dao.domain.*;
- import com.hugnew.sps.dto.PayRequestParam;
- import com.hugnew.sps.services.pay.strategy.StrategyContext;
- import com.hugnew.sps.enums.PayType;
- import com.hugnew.sps.enums.PlatformType;
- import com.hugnew.sps.services.*;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.amqp.rabbit.core.RabbitTemplate;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.util.*;
- /**
- * 支付请求路由业务
- * Created by Martin on 2016/7/01.
- */
- @Service
- public class PayRouteService implements IPayRouteService {
- private static Logger logger = LoggerFactory.getLogger(PayRouteService.class);
- @Resource
- private RabbitTemplate amqpTemplate;
- @Autowired
- private PayMapMapper payMapMapper;
- public PayType dealPayType(String onLineStyle, String browseType) {
- PayType payType = null;
- switch (onLineStyle) {
- case "alipay":
- switch (browseType) {
- case "web":
- payType = PayType.ALIPAY_WEB;
- break;
- case "wap":
- payType = PayType.ALIPAY_WAP;
- break;
- case "app":
- payType = PayType.ALIPAY_APP;
- break;
- default:
- payType = null;
- }
- break;
- case "unionpay":
- switch (browseType) {
- case "web":
- payType = PayType.UNION_WEB;
- break;
- case "wap":
- payType = PayType.UNION_WAP;
- break;
- case "app":
- payType = PayType.UNION_APP;
- break;
- default:
- payType = null;
- }
- break;
- case "psbc":
- switch (browseType) {
- case "web":
- payType = PayType.PSBC_WEB;
- break;
- case "wap":
- payType = PayType.PSBC_WAP;
- break;
- default:
- payType = null;
- }
- break;
- case "ceb":
- switch (browseType) {
- case "web":
- payType = PayType.CEB_WEB;
- break;
- case "wap":
- payType = PayType.CEB_WAP;
- break;
- default:
- payType = null;
- }
- break;
- case "wechat":
- switch (browseType) {
- case "app":
- payType = PayType.WECHAT_APP;
- break;
- default:
- payType = null;
- }
- break;
- case "ceb_GW":
- switch (browseType) {
- case "web":
- payType = PayType.CEB_GATEWAY_WEB;
- break;
- case "wap":
- payType = PayType.CEB_GATEWAY_WAP;
- break;
- default:
- payType = null;
- }
- break;
- default:
- payType = null;
- }
- return payType;
- }
- private void savePayRecord(String payRequsetMsg, PayType payType, PayRequestParam payRequestParam) {
- PayMap payMap = new PayMap();
- payMap.setOrderId(payRequestParam.getOrderID());
- payMap.setOrderCode(payRequestParam.getOrderCode());
- PlatformType type = PlatformType.getPlatform(payType.value());
- payMap.setPlatform(type.value());
- payMap.setTempPayCode(payRequestParam.getPayCode());
- payMap.setPayParams(payRequsetMsg);
- payMap.setRequestBiz(payRequestParam.getRequestBiz());
- payMapMapper.insertSelective(payMap);
- }
- @Override
- public Map<String, Object> getPayRetMap(PayRequestParam payRequestParam) {
- Map<String, Object> retMap = assembleRetMap(payRequestParam);
- return retMap;
- }
- @Override
- public Boolean getPayRetMap4MQ(PayRequestParam payRequestParam) {
- Map<String, Object> retMap = assembleRetMap(payRequestParam);
- amqpTemplate.convertAndSend("payRequestCallback." + payRequestParam.getRequestBiz() + payRequestParam.getOrderCode(), JSON.toJSONString(retMap));
- return true;
- }
- private Map<String, Object> assembleRetMap(PayRequestParam payRequestParam) {
- Map<String, Object> paramsToPass = new HashMap<>();
- if (StringUtils.isNotBlank(payRequestParam.getRetUrl())) {
- paramsToPass.put("retUrl", payRequestParam.getRetUrl());
- }
- paramsToPass.put("toPay", payRequestParam.getToPay());
- paramsToPass.put("payCode", payRequestParam.getPayCode());
- paramsToPass.put("sellerCode", payRequestParam.getSellerCode());
- paramsToPass.put("sellerName", payRequestParam.getSellerName());
- paramsToPass.put("orderCode", payRequestParam.getOrderCode());
- paramsToPass.put("invalidTime", payRequestParam.getInvalidTime());
- paramsToPass.put("orderCreateTime", payRequestParam.getCreateTime());
- PayType payType = dealPayType(payRequestParam.getOnLineStyle(), payRequestParam.getBrowseType());
- StrategyContext context = new StrategyContext();
- String payRequsetMsg = context.generatePayParams(payType, paramsToPass);
- if(logger.isDebugEnabled()){
- logger.debug("订单code为{}的支付请求参数生成信息:{}", new Object[]{payRequestParam.getOrderCode(), payRequsetMsg});
- }
- savePayRecord(payRequsetMsg, payType, payRequestParam);
- Map<String, Object> retMap = new HashMap<>();
- retMap.put("payData", payRequsetMsg);
- retMap.put("payment", payRequestParam.getOnLineStyle());
- retMap.put("orderID", payRequestParam.getOrderID());
- retMap.put("errorCode", "0710");
- retMap.put("message", "请去第三方平台支付~~");
- return retMap;
- }
- }