AliPayCommonServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. package com.cyksj.service.pay.impl;
  2. import cn.hutool.core.date.DateUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.alipay.api.AlipayApiException;
  5. import com.alipay.api.AlipayClient;
  6. import com.alipay.api.AlipayRequest;
  7. import com.alipay.api.domain.AlipayTradePagePayModel;
  8. import com.alipay.api.domain.AlipayTradeWapPayModel;
  9. import com.alipay.api.request.AlipayTradePagePayRequest;
  10. import com.alipay.api.request.AlipayTradeWapPayRequest;
  11. import com.baomidou.mybatisplus.core.toolkit.Assert;
  12. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  13. import com.cyksj.common.EnvCommonService;
  14. import com.cyksj.common.exception.BusinessRuntimeException;
  15. import com.cyksj.common.snowflake.Sequence;
  16. import com.cyksj.common.util.Codec;
  17. import com.cyksj.common.util.Jsons;
  18. import com.cyksj.common.util.StringUtil;
  19. import com.cyksj.config.zfb.AliPayClientFactory;
  20. import com.cyksj.config.zfb.BaseZfbConfig;
  21. import com.cyksj.config.zfb.ZfbProductCode;
  22. import com.cyksj.mapper.*;
  23. import com.cyksj.mapper.channel.ShopConfigMapper;
  24. import com.cyksj.mapper.mirrorshop.UserMirrorShopFeeOrderDonMapper;
  25. import com.cyksj.mapper.order.OrderDonPostMapper;
  26. import com.cyksj.model.dto.AliPayParams;
  27. import com.cyksj.model.dto.OrderPayBuilderDto;
  28. import com.cyksj.model.entity.*;
  29. import com.cyksj.model.request.AlipayOrderDonReq;
  30. import com.cyksj.model.request.OrderAttach;
  31. import com.cyksj.service.pay.AliPayCommonService;
  32. import com.cyksj.service.sys.SysConfigService;
  33. import lombok.RequiredArgsConstructor;
  34. import lombok.extern.slf4j.Slf4j;
  35. import org.springframework.stereotype.Service;
  36. import java.math.BigDecimal;
  37. import java.math.RoundingMode;
  38. import java.util.Date;
  39. import java.util.List;
  40. import java.util.Optional;
  41. /*
  42. *项目名: netflix
  43. *文件名: AliPayCommonServiceImpl
  44. *创建者: JavaZou
  45. *创建时间:2023/6/14 15:19
  46. */
  47. @Service
  48. @RequiredArgsConstructor
  49. @Slf4j
  50. public class AliPayCommonServiceImpl implements AliPayCommonService {
  51. private final RegisterOrderDonMapper registerOrderDonMapper;
  52. private final OrderDonMapper orderDonMapper;
  53. private final GoodsDonMapper goodsDonMapper;
  54. private final ShopConfigMapper shopConfigMapper;
  55. private final EnvCommonService envCommonService;
  56. private final SysConfigService sysConfigService;
  57. private final OrderDonPostMapper orderDonPostMapper;
  58. private final UpgradeOrderDonMapper upgradeOrderDonMapper;
  59. private final UpgradePackageMapper upgradePackageMapper;
  60. private final GoodsWholesaleOrderDonMapper goodsWholesaleOrderDonMapper;
  61. private final GoodsWholesaleUserDepositMapper depositMapper;
  62. private final UserBenefitsOrderRecordMapper userBenefitsOrderRecordMapper;
  63. private final UserMirrorShopFeeOrderDonMapper feeOrderDonMapper;
  64. private final ZfbShopOrderDayLimitMapper zfbShopOrderDayLimitMapper;
  65. private static final Sequence SEQUENCE = new Sequence(0);
  66. @Override
  67. public AliPayParams unifiedPayRegister(Long orderId, String productCode, String payMode, String returnUrl) throws Exception {
  68. RegisterOrderDon orderDon = registerOrderDonMapper.selectById(orderId);
  69. Assert.notNull(orderDon, "订单不存在");
  70. if (StrUtil.isEmpty(productCode)) throw BusinessRuntimeException.getInstance("支付异常");
  71. //获取支付宝默认商户
  72. String shopId = sysConfigService.getDefaultShopConfigByType("zfb");
  73. orderDon.setShopId(shopId);
  74. orderDon.setType(RegisterOrderDon.Type.ALI_PAY);
  75. if (orderDon.getType() != RegisterOrderDon.Type.ALI_PAY) {
  76. orderDon.setType(RegisterOrderDon.Type.ALI_PAY);
  77. }
  78. registerOrderDonMapper.updateById(orderDon);
  79. //回调地址
  80. String host = envCommonService.getNotifyHost();
  81. String notifyUrl = String.format("%s%s", host, BaseZfbConfig.zfb_register_notify_url);
  82. if (ZfbProductCode.MOBILE_WEB.getProductCode().equals(productCode) && BaseZfbConfig.qrPayMode_redirect.equals(payMode)) {
  83. returnUrl = String.format("%s%s", envCommonService.getDomain(), BaseZfbConfig.zfb_register_login_return_url);
  84. }
  85. String subject = "注册服务";
  86. AliPayParams aliPayParams = builderPayParams(orderDon.getId(),
  87. orderDon.getOrderNo(),
  88. orderDon.getShopId(),
  89. orderDon.getMoney(),
  90. orderDon.getCreatedTime(),
  91. subject,
  92. productCode,
  93. payMode,
  94. notifyUrl,
  95. returnUrl);
  96. return aliPayParams;
  97. }
  98. @Override
  99. public AliPayParams unifiedPay(AlipayOrderDonReq re, String productCode, String payMode) throws Exception {
  100. Long orderId = re.getOrderId();
  101. String returnUrl = re.getReturnUrl();
  102. OrderDon orderDon = orderDonMapper.selectById(orderId);
  103. String appId = null;
  104. if (orderDon.getPopularizeId() != null) {
  105. ShopConfig shopConfig = shopConfigMapper.getByChannelPopularizeId(orderDon.getPopularizeId(), "zfb");
  106. if (shopConfig != null) {
  107. appId = shopConfig.getAppId();
  108. }
  109. }
  110. //排除推广链接
  111. if (StrUtil.isEmpty(appId)) {
  112. //获取每日订单限制 支付宝商户
  113. ZfbShopOrderDayLimit dayLimit = getZfbShopOrdersDayLimit();
  114. if (dayLimit == null) {
  115. //获取支付宝默认商户
  116. appId = sysConfigService.getDefaultShopConfigByType("zfb");
  117. } else {
  118. appId = dayLimit.getAppId();
  119. }
  120. }
  121. if (OrderDon.Type.ALI_PAY != orderDon.getType()) {
  122. orderDon.setType(OrderDon.Type.ALI_PAY);
  123. }
  124. orderDon.setShopId(appId);
  125. if (ZfbProductCode.PC_WEB.getProductCode().equals(productCode)) {
  126. orderDon.setIsWebPay(true);
  127. }
  128. if (ZfbProductCode.MOBILE_WEB.getProductCode().equals(productCode)) {
  129. orderDon.setIsWebPay(false);
  130. }
  131. orderDonMapper.updateById(orderDon);
  132. String notifyPath = BaseZfbConfig.notifyUrl;
  133. Boolean isUserBenefits = re.getIsUserBenefits();
  134. String subject;
  135. if (isUserBenefits) {
  136. subject = orderDon.getGoodsId() == 15 ? "套餐权益" : "续费减免";
  137. } else {
  138. GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
  139. subject = goodsDon.getTitle().contains("ChatGPT") ? "AI订阅" : goodsDon.getTitle();
  140. }
  141. //回调地址
  142. String host = envCommonService.getNotifyHost();
  143. String notifyUrl = String.format("%s%s", host, notifyPath);
  144. //手机h5 跳转
  145. OrderDonPost orderDonPost = orderDonPostMapper.selectOne(Wrappers.lambdaQuery(OrderDonPost.class)
  146. .eq(OrderDonPost::getOrderId, orderId).last("limit 1"));
  147. //百度回传 跳转
  148. Boolean is_bdPost = false;
  149. if (orderDonPost != null && OrderDonPost.Type.BaiDu == orderDonPost.getType()) {
  150. is_bdPost = true;
  151. }
  152. if (StrUtil.isNotEmpty(returnUrl)) {
  153. log.info("支付宝支付成功返回地址:{}", returnUrl);
  154. }
  155. //是否在微信内支付 微信内支付宝支付后 支付宝回调页面不跳转
  156. Boolean isWx = Optional.ofNullable(re.getIsWx()).orElse(false);
  157. if (ZfbProductCode.MOBILE_WEB.getProductCode().equals(productCode) && !isWx) {
  158. if (is_bdPost) {
  159. //页面 拼接订单号,前端从url获取订单id.
  160. returnUrl = String.format("%s%s", envCommonService.getDomain(), BaseZfbConfig.SUCCESS_URL) + orderDon.getId();
  161. } else {
  162. if (StrUtil.isEmpty(returnUrl)) {
  163. //默认跳转页
  164. returnUrl = String.format("%s%s", envCommonService.getDomain(), BaseZfbConfig.DEFAULT_URL);
  165. }
  166. }
  167. }
  168. if (StrUtil.isNotEmpty(returnUrl)) {
  169. log.info("支付宝支付成功最终返回地址:{}", returnUrl);
  170. }
  171. AliPayParams aliPayParams = builderPayParams(orderDon.getId(),
  172. orderDon.getOrderNo(),
  173. orderDon.getShopId(),
  174. orderDon.getMoney(),
  175. orderDon.getCreatedTime(),
  176. subject,
  177. productCode,
  178. payMode,
  179. notifyUrl,
  180. returnUrl);
  181. return aliPayParams;
  182. }
  183. private ZfbShopOrderDayLimit getZfbShopOrdersDayLimit() {
  184. List<ZfbShopOrderDayLimit> orderDayLimits = zfbShopOrderDayLimitMapper.selectList(Wrappers.lambdaQuery(ZfbShopOrderDayLimit.class)
  185. .gt(ZfbShopOrderDayLimit::getRemainOrders, 0));
  186. for (ZfbShopOrderDayLimit orderDayLimit : orderDayLimits) {
  187. Integer update = zfbShopOrderDayLimitMapper.decrRemainOrdersById(orderDayLimit.getId());
  188. if (update == 1) {
  189. return orderDayLimit;
  190. }
  191. }
  192. return null;
  193. }
  194. public AliPayParams builderPayParams(Long orderId, String orderNo, String shopId, BigDecimal money, Date orderCreatedTime, String subject, String productCode, String payMode, String notifyUrl, String returnUrl) throws Exception {
  195. OrderPayBuilderDto orderPayBuilderDto = new OrderPayBuilderDto();
  196. orderPayBuilderDto.setOrderId(orderId);
  197. orderPayBuilderDto.setMoney(money);
  198. orderPayBuilderDto.setOrderNo(orderNo);
  199. orderPayBuilderDto.setSubject(subject);
  200. orderPayBuilderDto.setOrderCreatedTime(orderCreatedTime);
  201. orderPayBuilderDto.setProductCode(productCode);
  202. orderPayBuilderDto.setPayMode(payMode);
  203. orderPayBuilderDto.setReturnUrl(returnUrl);
  204. orderPayBuilderDto.setNotifyUrl(notifyUrl);
  205. orderPayBuilderDto.setShopId(shopId);
  206. AliPayParams aliPayParams = commonAliPay(orderPayBuilderDto);
  207. return aliPayParams;
  208. }
  209. public AliPayParams commonAliPay(OrderPayBuilderDto orderPayBuilderDto) throws Exception {
  210. AlipayClient alipayClient = AliPayClientFactory.getAlipayClient(Optional.ofNullable(orderPayBuilderDto.getShopId()).orElse(ShopConfig.ZFB_DEFAULT_APP_ID));
  211. String returnUrl = orderPayBuilderDto.getReturnUrl();
  212. String notifyUrl = orderPayBuilderDto.getNotifyUrl();
  213. // 创建API对应的request
  214. AlipayRequest alipayRequest = getAliAayRequest(orderPayBuilderDto);
  215. if (alipayRequest == null) {
  216. throw BusinessRuntimeException.getInstance("支付宝不支持该支付方式:{0}", orderPayBuilderDto.getProductCode());
  217. }
  218. if (StrUtil.isNotBlank(returnUrl)) {
  219. alipayRequest.setReturnUrl(returnUrl);
  220. }
  221. alipayRequest.setNotifyUrl(notifyUrl);
  222. String form = null;
  223. try {
  224. //调用SDK生成表单
  225. //pagePay 统一下单接口
  226. form = alipayClient.pageExecute(alipayRequest).getBody();
  227. } catch (AlipayApiException e) {
  228. log.error("支付宝生成表单错误:{}", StringUtil.getErrorText(e));
  229. }
  230. log.info("支付宝返回参数:{}", form);
  231. return new AliPayParams(form);
  232. }
  233. /**
  234. * 支付宝获取不同的request
  235. */
  236. private AlipayRequest getAliAayRequest(OrderPayBuilderDto payBuilderDto) throws Exception {
  237. Long orderId = payBuilderDto.getOrderId();
  238. BigDecimal money = payBuilderDto.getMoney();
  239. String orderNo = payBuilderDto.getOrderNo();
  240. //productCode 销售产品码,与支付宝签约的产品码名称
  241. String productCode = payBuilderDto.getProductCode();
  242. String subject = payBuilderDto.getSubject();
  243. Date orderCreatedTime = payBuilderDto.getOrderCreatedTime();
  244. //网页支付跳转模式
  245. String qrPayMode = payBuilderDto.getPayMode();
  246. OrderAttach attach = new OrderAttach();
  247. attach.setO(orderId);
  248. String body = Codec.DoBase64.custom()
  249. .setData(Jsons.toJson(attach)).encodeAsText();
  250. String moneyStr = money.divide(new BigDecimal(100), 2, RoundingMode.HALF_EVEN).toString();
  251. if (ZfbProductCode.MOBILE_WEB.getProductCode().equals(productCode)) {
  252. //手机网站支付
  253. AlipayTradeWapPayRequest alipayTradeWapPayRequest = new AlipayTradeWapPayRequest();
  254. //手机网站支付支付参数
  255. AlipayTradeWapPayModel alipayTradeWapPayModel = new AlipayTradeWapPayModel();
  256. alipayTradeWapPayModel.setBody(body);
  257. alipayTradeWapPayModel.setOutTradeNo(orderNo);
  258. alipayTradeWapPayModel.setTotalAmount(moneyStr);
  259. alipayTradeWapPayModel.setSubject(subject);
  260. alipayTradeWapPayModel.setProductCode(productCode);
  261. //5分钟订单失效时间
  262. alipayTradeWapPayModel.setTimeExpire(DateUtil.offsetMinute(orderCreatedTime, 5).toString());
  263. alipayTradeWapPayRequest.setBizModel(alipayTradeWapPayModel);
  264. return alipayTradeWapPayRequest;
  265. } else if (ZfbProductCode.PC_WEB.getProductCode().equals(productCode)) {
  266. //电脑网站支付
  267. AlipayTradePagePayRequest alipayTradePagePayRequest = new AlipayTradePagePayRequest();
  268. //电脑网站支付参数
  269. AlipayTradePagePayModel alipayTradePagePayModel = new AlipayTradePagePayModel();
  270. alipayTradePagePayModel.setBody(body);
  271. alipayTradePagePayModel.setOutTradeNo(orderNo);
  272. alipayTradePagePayModel.setTotalAmount(moneyStr);
  273. alipayTradePagePayModel.setSubject(subject);
  274. alipayTradePagePayModel.setProductCode(productCode);
  275. //5分钟订单失效时间
  276. alipayTradePagePayModel.setTimeExpire(DateUtil.offsetMinute(orderCreatedTime, 5).toString());
  277. if (StrUtil.isEmpty(qrPayMode)) {
  278. qrPayMode = BaseZfbConfig.qrPayMode_orderCode;
  279. }
  280. alipayTradePagePayModel.setQrPayMode(qrPayMode);
  281. alipayTradePagePayRequest.setBizModel(alipayTradePagePayModel);
  282. return alipayTradePagePayRequest;
  283. }
  284. return null;
  285. }
  286. @Override
  287. public AliPayParams unifiedPayUpgrade(AlipayOrderDonReq re, String productCode, String payMode) throws Exception {
  288. Long orderId = re.getOrderId();
  289. String returnUrl = re.getReturnUrl();
  290. UpgradeOrderDon orderDon = upgradeOrderDonMapper.selectById(orderId);
  291. //获取支付宝默认商户
  292. String appId = sysConfigService.getDefaultShopConfigByType("zfb");
  293. if (UpgradeOrderDon.Type.ALI_PAY != orderDon.getType()) {
  294. orderDon.setType(UpgradeOrderDon.Type.ALI_PAY);
  295. }
  296. orderDon.setShopId(appId);
  297. if (ZfbProductCode.PC_WEB.getProductCode().equals(productCode)) {
  298. orderDon.setIsWebPay(true);
  299. }
  300. if (ZfbProductCode.MOBILE_WEB.getProductCode().equals(productCode)) {
  301. orderDon.setIsWebPay(false);
  302. }
  303. upgradeOrderDonMapper.updateById(orderDon);
  304. UpgradePackage upgradePackage = upgradePackageMapper.selectById(orderDon.getPackageId());
  305. String subject = upgradePackage.getName();
  306. //回调地址
  307. String host = envCommonService.getNotifyHost();
  308. String notifyUrl = String.format("%s%s", host, BaseZfbConfig.upgradeNotifyUrl);
  309. //是否在微信内支付 微信内支付宝支付后 支付宝回调页面不跳转
  310. Boolean isWx = Optional.ofNullable(re.getIsWx()).orElse(false);
  311. if (ZfbProductCode.MOBILE_WEB.getProductCode().equals(productCode) && !isWx) {
  312. //默认跳转页
  313. returnUrl = String.format("%s%s", envCommonService.getDomain(), BaseZfbConfig.DEFAULT_URL);
  314. }
  315. return builderPayParams(orderDon.getId(),
  316. orderDon.getOrderNo(),
  317. orderDon.getShopId(),
  318. orderDon.getMoney(),
  319. orderDon.getCreatedTime(),
  320. subject,
  321. productCode,
  322. payMode,
  323. notifyUrl,
  324. returnUrl);
  325. }
  326. @Override
  327. public AliPayParams aliPayUnifiedWholesale(AlipayOrderDonReq re, String productCode, String payMode) throws Exception {
  328. Long orderId = re.getOrderId();
  329. String returnUrl = re.getReturnUrl();
  330. GoodsWholesaleOrderDon orderDon = goodsWholesaleOrderDonMapper.selectById(orderId);
  331. //获取支付宝默认商户
  332. String appId = sysConfigService.getDefaultShopConfigByType("zfb");
  333. if (GoodsWholesaleOrderDon.Type.ALI_PAY != orderDon.getType()) {
  334. orderDon.setType(GoodsWholesaleOrderDon.Type.ALI_PAY);
  335. }
  336. orderDon.setShopId(appId);
  337. if (ZfbProductCode.PC_WEB.getProductCode().equals(productCode)) {
  338. orderDon.setIsWebPay(true);
  339. }
  340. if (ZfbProductCode.MOBILE_WEB.getProductCode().equals(productCode)) {
  341. orderDon.setIsWebPay(false);
  342. }
  343. goodsWholesaleOrderDonMapper.updateById(orderDon);
  344. GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
  345. String subject = goodsDon.getTitle();
  346. //回调地址
  347. String host = envCommonService.getNotifyHost();
  348. String notifyUrl = String.format("%s%s", host, BaseZfbConfig.wholesaleNotifyUrl);
  349. //是否在微信内支付 微信内支付宝支付后 支付宝回调页面不跳转
  350. Boolean isWx = Optional.ofNullable(re.getIsWx()).orElse(false);
  351. if (StrUtil.isEmpty(returnUrl) && ZfbProductCode.MOBILE_WEB.getProductCode().equals(productCode) && !isWx) {
  352. //默认跳转页
  353. returnUrl = String.format("%s%s", envCommonService.getDomain(), BaseZfbConfig.DEFAULT_URL);
  354. }
  355. return builderPayParams(orderDon.getId(),
  356. orderDon.getOrderNo(),
  357. orderDon.getShopId(),
  358. orderDon.getMoney(),
  359. orderDon.getUpdateTime(),
  360. subject,
  361. productCode,
  362. payMode,
  363. notifyUrl,
  364. returnUrl);
  365. }
  366. @Override
  367. public AliPayParams aliPayUnifiedWholesaleDeposit(AlipayOrderDonReq re, String productCode, String payMode) throws Exception {
  368. Long orderId = re.getOrderId();
  369. String returnUrl = re.getReturnUrl();
  370. GoodsWholesaleUserDeposit orderDon = depositMapper.selectById(orderId);
  371. //获取支付宝默认商户
  372. String appId = sysConfigService.getDefaultShopConfigByType("zfb");
  373. if (GoodsWholesaleUserDeposit.Type.ALI_PAY != orderDon.getType()) {
  374. orderDon.setType(GoodsWholesaleUserDeposit.Type.ALI_PAY);
  375. }
  376. orderDon.setShopId(appId);
  377. if (ZfbProductCode.PC_WEB.getProductCode().equals(productCode)) {
  378. orderDon.setIsWebPay(true);
  379. }
  380. if (ZfbProductCode.MOBILE_WEB.getProductCode().equals(productCode)) {
  381. orderDon.setIsWebPay(false);
  382. }
  383. depositMapper.updateById(orderDon);
  384. String subject = "押金";
  385. //回调地址
  386. String host = envCommonService.getNotifyHost();
  387. String notifyUrl = String.format("%s%s", host, BaseZfbConfig.wholesaleDepositNotifyUrl);
  388. //是否在微信内支付 微信内支付宝支付后 支付宝回调页面不跳转
  389. Boolean isWx = Optional.ofNullable(re.getIsWx()).orElse(false);
  390. if (StrUtil.isEmpty(returnUrl) && ZfbProductCode.MOBILE_WEB.getProductCode().equals(productCode) && !isWx) {
  391. //默认跳转页
  392. returnUrl = String.format("%s%s", envCommonService.getDomain(), BaseZfbConfig.DEFAULT_URL);
  393. }
  394. //退款后重新支付
  395. if (orderDon.getStatus() == GoodsWholesaleUserDeposit.Status.refund) {
  396. orderDon.setOrderNo(SEQUENCE.nextId().toString());
  397. }
  398. return builderPayParams(orderDon.getId(),
  399. orderDon.getOrderNo(),
  400. orderDon.getShopId(),
  401. orderDon.getMoney(),
  402. orderDon.getUpdateTime(),
  403. subject,
  404. productCode,
  405. payMode,
  406. notifyUrl,
  407. returnUrl);
  408. }
  409. @Override
  410. public AliPayParams openShopAliPay(AlipayOrderDonReq re, String productCode, String payMode) throws Exception {
  411. Long orderId = re.getOrderId();
  412. String returnUrl = re.getReturnUrl();
  413. UserMirrorShopFeeOrderDon orderDon = feeOrderDonMapper.selectById(orderId);
  414. //获取支付宝默认商户
  415. String appId = sysConfigService.getDefaultShopConfigByType("zfb");
  416. if (UserMirrorShopFeeOrderDon.Type.ALI_PAY != orderDon.getType()) {
  417. orderDon.setType(UserMirrorShopFeeOrderDon.Type.ALI_PAY);
  418. }
  419. orderDon.setShopId(appId);
  420. feeOrderDonMapper.updateById(orderDon);
  421. String subject = "押金";
  422. //回调地址
  423. String host = envCommonService.getNotifyHost();
  424. String notifyUrl = String.format("%s%s", host, BaseZfbConfig.userMirrorOpenShopNotifyUrl);
  425. //退款后重新支付
  426. if (orderDon.getStatus() == UserMirrorShopFeeOrderDon.Status.refund) {
  427. orderDon.setOrderNo(SEQUENCE.nextId().toString());
  428. }
  429. return builderPayParams(orderDon.getId(),
  430. orderDon.getOrderNo(),
  431. orderDon.getShopId(),
  432. orderDon.getMoney(),
  433. orderDon.getUpdateTime(),
  434. subject,
  435. productCode,
  436. payMode,
  437. notifyUrl,
  438. returnUrl);
  439. }
  440. }