PaymentServiceImpl.java 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. package com.poteviohealth.ym.ipos.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.poteviohealth.cgp.common.filter.TokenContext;
  4. import com.poteviohealth.cgp.common.integrated.order.OrderFeignClient;
  5. import com.poteviohealth.cgp.common.integrated.order.model.PayInfoAppOutDTO;
  6. import com.poteviohealth.cgp.common.integrated.order.model.PayReceive;
  7. import com.poteviohealth.cgp.common.integrated.order.model.RefundReceive;
  8. import com.poteviohealth.cgp.common.model.VaultsResponse;
  9. import com.poteviohealth.ym.ipos.model.payment.*;
  10. import com.poteviohealth.ym.ipos.model.payment.back.*;
  11. import com.poteviohealth.ym.ipos.model.payment.detail.*;
  12. import com.poteviohealth.ym.ipos.model.payment.dto.BindDto;
  13. import com.poteviohealth.ym.ipos.service.IPaymentRecordsService;
  14. import com.poteviohealth.ym.ipos.service.IPaymentService;
  15. import com.poteviohealth.ym.ipos.utils.YmUtil;
  16. import lombok.extern.log4j.Log4j2;
  17. import org.springframework.beans.factory.annotation.Value;
  18. import org.springframework.stereotype.Service;
  19. import javax.annotation.Resource;
  20. /**
  21. * 支付
  22. * @author Qin
  23. */
  24. @Service
  25. @Log4j2
  26. public class PaymentServiceImpl implements IPaymentService {
  27. @Value("${pay.field.ip}")
  28. private String ip;
  29. @Value("${pay.field.notifyUrl}")
  30. private String notifyUrl;
  31. @Value("${pay.field.code}")
  32. private String code;
  33. @Resource
  34. private IPaymentRecordsService paymentRecordsService;
  35. @Resource
  36. private OrderFeignClient orderFeignClient;
  37. @Override
  38. public VaultsResponse bindPos(BindDto dto) {
  39. BindPos pos = new BindPos();
  40. pos.setPos_id(dto.getPosId());
  41. StoreInfo storeInfo = new StoreInfo();
  42. storeInfo.setStore_id(dto.getStoreId());
  43. storeInfo.setStore_name(dto.getName());
  44. pos.setStore_info(storeInfo);
  45. PayParams payParams = new PayParams();
  46. Wxapp app = new Wxapp();
  47. app.setAppid(dto.getAppId());
  48. payParams.setWxapp(app);
  49. pos.setPay_params(payParams);
  50. BindPosBack back = null;
  51. try {
  52. back = (BindPosBack) YmUtil.resultBack(pos,new BindPosBack());
  53. } catch (IllegalAccessException e) {
  54. e.printStackTrace();
  55. return VaultsResponse.failed(e.getMessage());
  56. }
  57. if(YmUtil.SUCCESS.equals(back.getResult().getId())){
  58. return VaultsResponse.success(back.getPos_id());
  59. }
  60. return VaultsResponse.failed(back.getResult().getComment());
  61. }
  62. @Override
  63. public VaultsResponse<PayQueryBack> barcodeQuery(String transactionId) {
  64. PayQuery payQuery = new PayQuery();
  65. payQuery.setPos_id(TokenContext.curePosId());
  66. payQuery.setStore_id(TokenContext.cureStoreId());
  67. PayQueryDetail detail = new PayQueryDetail();
  68. detail.setOrg_pos_seq(transactionId);
  69. payQuery.setBarcode_query_request(detail);
  70. PayQueryBack back = null;
  71. try {
  72. back = (PayQueryBack) YmUtil.resultBack(payQuery,new PayQueryBack());
  73. } catch (IllegalAccessException e) {
  74. e.printStackTrace();
  75. return VaultsResponse.failed(e.getMessage());
  76. }
  77. if(YmUtil.SUCCESS.equals(back.getResult().getId())){
  78. return VaultsResponse.success();
  79. }
  80. return VaultsResponse.failed(back.getResult().getComment());
  81. }
  82. @Override
  83. public VaultsResponse barcodeReverse(RefundReceive refundReceive) {
  84. PayReverse payReverse = new PayReverse();
  85. payReverse.setPos_id(code);
  86. payReverse.setStore_id(refundReceive.getOperatorId().toString());
  87. payReverse.setPos_seq(refundReceive.getRefundId().toString());
  88. PayReverseDetail detail = new PayReverseDetail();
  89. detail.setTx_amt(refundReceive.getPrice().toString());
  90. detail.setOrg_pos_seq(refundReceive.getPayId().toString());
  91. payReverse.setBarcode_reverse_request(detail);
  92. PayReverseBack back = null;
  93. try {
  94. back = (PayReverseBack) YmUtil.resultBack(payReverse,new PayReverseBack());
  95. } catch (IllegalAccessException e) {
  96. e.printStackTrace();
  97. return VaultsResponse.failed(e.getMessage());
  98. }
  99. if(YmUtil.SUCCESS.equals(back.getResult().getId()) || YmUtil.FAIL.equals(back.getResult().getId())){
  100. return VaultsResponse.success(back.getResult().getId());
  101. }
  102. return VaultsResponse.failed(back.getResult().getComment());
  103. }
  104. @Override
  105. public VaultsResponse barcodeRefundQuery(String transactionId,String operatorId) {
  106. PayRefundQuery payRefundQuery = new PayRefundQuery();
  107. payRefundQuery.setPos_id(code);
  108. payRefundQuery.setStore_id(operatorId);
  109. PayQueryDetail detail = new PayQueryDetail();
  110. detail.setOrg_pos_seq(transactionId);
  111. payRefundQuery.setBarcode_refundquery_request(detail);
  112. PayRefundQueryBack back = null;
  113. try {
  114. back = (PayRefundQueryBack) YmUtil.resultBack(payRefundQuery,new PayRefundQueryBack());
  115. } catch (IllegalAccessException e) {
  116. e.printStackTrace();
  117. return VaultsResponse.failed(e.getMessage());
  118. }
  119. if(YmUtil.SUCCESS.equals(back.getResult().getId())){
  120. return VaultsResponse.success();
  121. }else if(YmUtil.FAIL.equals(back.getResult().getId())){
  122. return VaultsResponse.success("退款处理中...");
  123. }
  124. return VaultsResponse.failed(back.getResult().getComment());
  125. }
  126. @Override
  127. public VaultsResponse<PayInfoAppOutDTO> unifiedOrder(PaymentRecords records) {
  128. PayInfoAppOutDTO dto = new PayInfoAppOutDTO();
  129. PayOrder payOrder = new PayOrder();
  130. payOrder.setPos_seq(records.getPayId().toString());
  131. payOrder.setPos_id(code);
  132. payOrder.setStore_id(records.getOperatorId().toString());
  133. payOrder.setDevice_ip(ip);
  134. PayDetail detail = new PayDetail();
  135. detail.setBuyer_id(records.getOpenid());
  136. detail.setTx_amt(records.getTxAmt());
  137. detail.setNotify_url(notifyUrl);
  138. ExtendParams extendParams = new ExtendParams();
  139. extendParams.setPlan_split_date(records.getPlanSplitDate());
  140. detail.setExtend_params(extendParams);
  141. payOrder.setUnifiedorder_request(detail);
  142. PayBack back = null;
  143. try {
  144. back = (PayBack) YmUtil.resultBack(payOrder,new PayBack());
  145. } catch (IllegalAccessException e) {
  146. e.printStackTrace();
  147. return VaultsResponse.failed(e.getMessage());
  148. }
  149. if(YmUtil.FAIL.equals(back.getResult().getId())){
  150. dto.setAppId(records.getAppId());
  151. dto.setTimeStamp(back.getTime_stamp());
  152. dto.setNonceStr(back.getNonce_str());
  153. dto.setPackages("prepay_id="+back.getPay_id());
  154. dto.setSignType(back.getSign_type());
  155. dto.setPaySign(back.getPay_sign());
  156. dto.setPaySn(records.getPaySn());
  157. return VaultsResponse.success(dto);
  158. }
  159. return VaultsResponse.failed(back.getResult().getComment());
  160. }
  161. @Override
  162. public String payNotification(PayNotification payNotification) {
  163. QueryWrapper<PaymentRecords> queryMapper = new QueryWrapper<>();
  164. queryMapper.eq("pay_id",payNotification.getPos_seq());
  165. try {
  166. PaymentRecords pr = paymentRecordsService.getOne(queryMapper);
  167. if(pr.getStatus() == -1){
  168. pr.setStatus(Integer.parseInt(payNotification.getStatus()));
  169. pr.setEndTime(payNotification.getEnd_time());
  170. pr.setSource(payNotification.getSource());
  171. pr.setPosId(payNotification.getPos_id());
  172. pr.setStoreId(payNotification.getStore_id());
  173. pr.setPayType(payNotification.getPay_type());
  174. pr.setTransType(payNotification.getTrans_type());
  175. pr.setTradeNo(payNotification.getTrade_no());
  176. PayReceive payReceive = new PayReceive();
  177. payReceive.setPayId(pr.getPayId());
  178. payReceive.setPaySn(pr.getPaySn());
  179. payReceive.setOperatorId(pr.getOperatorId());
  180. payReceive.setTradeNo(payNotification.getPos_seq());
  181. VaultsResponse vaultsResponse = orderFeignClient.changeOrderPay(payReceive);
  182. if(vaultsResponse.validate()){
  183. paymentRecordsService.updateById(pr);
  184. }else {
  185. return "fail";
  186. }
  187. }else{
  188. log.info("重复推送支付成功消息---"+pr.getPaySn());
  189. }
  190. }catch (Exception e){
  191. e.printStackTrace();
  192. return "fail";
  193. }
  194. return "success";
  195. }
  196. }