/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

  1. package com.hugnew.sps.services.impls;
  2. import com.alibaba.fastjson.JSON;
  3. import com.hugnew.sps.dao.*;
  4. import com.hugnew.sps.dao.domain.*;
  5. import com.hugnew.sps.dto.PayRequestParam;
  6. import com.hugnew.sps.services.pay.strategy.StrategyContext;
  7. import com.hugnew.sps.enums.PayType;
  8. import com.hugnew.sps.enums.PlatformType;
  9. import com.hugnew.sps.services.*;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import javax.annotation.Resource;
  17. import java.util.*;
  18. /**
  19. * 支付请求路由业务
  20. * Created by Martin on 2016/7/01.
  21. */
  22. @Service
  23. public class PayRouteService implements IPayRouteService {
  24. private static Logger logger = LoggerFactory.getLogger(PayRouteService.class);
  25. @Resource
  26. private RabbitTemplate amqpTemplate;
  27. @Autowired
  28. private PayMapMapper payMapMapper;
  29. public PayType dealPayType(String onLineStyle, String browseType) {
  30. PayType payType = null;
  31. switch (onLineStyle) {
  32. case "alipay":
  33. switch (browseType) {
  34. case "web":
  35. payType = PayType.ALIPAY_WEB;
  36. break;
  37. case "wap":
  38. payType = PayType.ALIPAY_WAP;
  39. break;
  40. case "app":
  41. payType = PayType.ALIPAY_APP;
  42. break;
  43. default:
  44. payType = null;
  45. }
  46. break;
  47. case "unionpay":
  48. switch (browseType) {
  49. case "web":
  50. payType = PayType.UNION_WEB;
  51. break;
  52. case "wap":
  53. payType = PayType.UNION_WAP;
  54. break;
  55. case "app":
  56. payType = PayType.UNION_APP;
  57. break;
  58. default:
  59. payType = null;
  60. }
  61. break;
  62. case "psbc":
  63. switch (browseType) {
  64. case "web":
  65. payType = PayType.PSBC_WEB;
  66. break;
  67. case "wap":
  68. payType = PayType.PSBC_WAP;
  69. break;
  70. default:
  71. payType = null;
  72. }
  73. break;
  74. case "ceb":
  75. switch (browseType) {
  76. case "web":
  77. payType = PayType.CEB_WEB;
  78. break;
  79. case "wap":
  80. payType = PayType.CEB_WAP;
  81. break;
  82. default:
  83. payType = null;
  84. }
  85. break;
  86. case "wechat":
  87. switch (browseType) {
  88. case "app":
  89. payType = PayType.WECHAT_APP;
  90. break;
  91. default:
  92. payType = null;
  93. }
  94. break;
  95. case "ceb_GW":
  96. switch (browseType) {
  97. case "web":
  98. payType = PayType.CEB_GATEWAY_WEB;
  99. break;
  100. case "wap":
  101. payType = PayType.CEB_GATEWAY_WAP;
  102. break;
  103. default:
  104. payType = null;
  105. }
  106. break;
  107. default:
  108. payType = null;
  109. }
  110. return payType;
  111. }
  112. private void savePayRecord(String payRequsetMsg, PayType payType, PayRequestParam payRequestParam) {
  113. PayMap payMap = new PayMap();
  114. payMap.setOrderId(payRequestParam.getOrderID());
  115. payMap.setOrderCode(payRequestParam.getOrderCode());
  116. PlatformType type = PlatformType.getPlatform(payType.value());
  117. payMap.setPlatform(type.value());
  118. payMap.setTempPayCode(payRequestParam.getPayCode());
  119. payMap.setPayParams(payRequsetMsg);
  120. payMap.setRequestBiz(payRequestParam.getRequestBiz());
  121. payMapMapper.insertSelective(payMap);
  122. }
  123. @Override
  124. public Map<String, Object> getPayRetMap(PayRequestParam payRequestParam) {
  125. Map<String, Object> retMap = assembleRetMap(payRequestParam);
  126. return retMap;
  127. }
  128. @Override
  129. public Boolean getPayRetMap4MQ(PayRequestParam payRequestParam) {
  130. Map<String, Object> retMap = assembleRetMap(payRequestParam);
  131. amqpTemplate.convertAndSend("payRequestCallback." + payRequestParam.getRequestBiz() + payRequestParam.getOrderCode(), JSON.toJSONString(retMap));
  132. return true;
  133. }
  134. private Map<String, Object> assembleRetMap(PayRequestParam payRequestParam) {
  135. Map<String, Object> paramsToPass = new HashMap<>();
  136. if (StringUtils.isNotBlank(payRequestParam.getRetUrl())) {
  137. paramsToPass.put("retUrl", payRequestParam.getRetUrl());
  138. }
  139. paramsToPass.put("toPay", payRequestParam.getToPay());
  140. paramsToPass.put("payCode", payRequestParam.getPayCode());
  141. paramsToPass.put("sellerCode", payRequestParam.getSellerCode());
  142. paramsToPass.put("sellerName", payRequestParam.getSellerName());
  143. paramsToPass.put("orderCode", payRequestParam.getOrderCode());
  144. paramsToPass.put("invalidTime", payRequestParam.getInvalidTime());
  145. paramsToPass.put("orderCreateTime", payRequestParam.getCreateTime());
  146. PayType payType = dealPayType(payRequestParam.getOnLineStyle(), payRequestParam.getBrowseType());
  147. StrategyContext context = new StrategyContext();
  148. String payRequsetMsg = context.generatePayParams(payType, paramsToPass);
  149. if(logger.isDebugEnabled()){
  150. logger.debug("订单code为{}的支付请求参数生成信息:{}", new Object[]{payRequestParam.getOrderCode(), payRequsetMsg});
  151. }
  152. savePayRecord(payRequsetMsg, payType, payRequestParam);
  153. Map<String, Object> retMap = new HashMap<>();
  154. retMap.put("payData", payRequsetMsg);
  155. retMap.put("payment", payRequestParam.getOnLineStyle());
  156. retMap.put("orderID", payRequestParam.getOrderID());
  157. retMap.put("errorCode", "0710");
  158. retMap.put("message", "请去第三方平台支付~~");
  159. return retMap;
  160. }
  161. }