WeixinPayService.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package com.example.xiaoshiweixinback.service.weixinpay;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.example.xiaoshiweixinback.business.config.XDns;
  4. import com.example.xiaoshiweixinback.business.utils.BatchNoUtil;
  5. import com.example.xiaoshiweixinback.business.utils.CacheUtil;
  6. import com.example.xiaoshiweixinback.business.utils.FormatUtil;
  7. import com.example.xiaoshiweixinback.business.utils.LoginUtils;
  8. import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
  9. import com.example.xiaoshiweixinback.entity.weixinPay.GetAuthorizationVO;
  10. import com.example.xiaoshiweixinback.entity.weixinPay.GetPayTicketVO;
  11. import com.example.xiaoshiweixinback.entity.weixinPay.JsApiDTO;
  12. import com.example.xiaoshiweixinback.entity.weixinPay.WeiXinPayDTO;
  13. import com.example.xiaoshiweixinback.service.OrderService;
  14. import com.google.gson.Gson;
  15. import okhttp3.*;
  16. import org.springframework.beans.BeanUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import java.io.IOException;
  20. import java.util.Objects;
  21. import java.util.UUID;
  22. import java.util.concurrent.TimeUnit;
  23. @Service
  24. public class WeixinPayService {
  25. /**
  26. * 商户号
  27. */
  28. @Autowired
  29. private AuthorizationService authorizationService;
  30. @Autowired
  31. private CacheUtil cacheUtil;
  32. @Autowired
  33. private OrderService orderService;
  34. public static String merchantId = "1673179188";
  35. /**
  36. * appId
  37. */
  38. public static String appId = "wxaefb842bd0b93ff0";
  39. public static String signType = "RSA";
  40. /**
  41. * 下订单接口
  42. *
  43. * @return
  44. * @throws Exception
  45. */
  46. public GetPayTicketVO getPayTickets(WeiXinPayDTO weiXinPayDTO) throws Exception {
  47. GetPayTicketVO getPayTicketVO = new GetPayTicketVO();
  48. String url = "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi";
  49. JsApiDTO jsApiDTO = new JsApiDTO();
  50. jsApiDTO.setAppid(appId);
  51. jsApiDTO.setDescription("会员");
  52. jsApiDTO.setMchid(merchantId);
  53. String tradeNo = BatchNoUtil.getOrderNo();
  54. jsApiDTO.setOut_trade_no(tradeNo);
  55. JsApiDTO.Amount amount = new JsApiDTO.Amount();
  56. amount.setCurrency("CNY");
  57. amount.setTotal(1);
  58. jsApiDTO.setAmount(amount);
  59. JsApiDTO.Payer payer = new JsApiDTO.Payer();
  60. jsApiDTO.setNotify_url("https://xsip.cn/xiaoshi-weixinback/weixinpay/success");
  61. PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
  62. payer.setOpenid(personnelVO.getOpenId());
  63. jsApiDTO.setPayer(payer);
  64. OkHttpClient okHttpClient = new OkHttpClient();
  65. String param = new Gson().toJson(jsApiDTO);
  66. GetAuthorizationVO authorizationVO = authorizationService.getAuthorization("POST", "/v3/pay/transactions/jsapi", param);
  67. BeanUtils.copyProperties(authorizationVO, getPayTicketVO);
  68. getPayTicketVO.setAppId(appId);
  69. getPayTicketVO.setSignType(signType);
  70. String authorization = authorizationVO.getAuthorization();
  71. RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
  72. Request request = new Request.Builder()
  73. .addHeader("Authorization", authorization)
  74. .addHeader("Accept", "*/*")
  75. .url(url)
  76. .post(requestBody)
  77. .build();
  78. // 发送请求获取响应
  79. try {
  80. Response response = okHttpClient.newCall(request).execute();
  81. // 判断请求是否成功
  82. if (response.isSuccessful()) {
  83. // 打印服务端返回结果
  84. String a = Objects.requireNonNull(response.body()).string();
  85. JSONObject jsonObject = JSONObject.parseObject(a);
  86. getPayTicketVO.setPrepayId(jsonObject.get("prepay_id").toString());
  87. orderService.addOrder(weiXinPayDTO,getPayTicketVO,jsApiDTO,personnelVO);
  88. GetAuthorizationVO authorizationVO1= authorizationService.getFrontAuthorization(getPayTicketVO.getPrepayId());
  89. getPayTicketVO.setTimestamp(authorizationVO1.getTimestamp());
  90. getPayTicketVO.setNonceStr(authorizationVO1.getNonceStr());
  91. getPayTicketVO.setSignature(authorizationVO1.getSignature());
  92. return getPayTicketVO;
  93. }
  94. } catch (IOException e) {
  95. e.printStackTrace();
  96. }
  97. return null;
  98. }
  99. }