WxRefundContoller.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package com.supplier.controller;
  2. import com.github.wxpay.sdk.WXPay;
  3. import com.github.wxpay.sdk.WXPayConfig;
  4. import com.supplier.model.WxPay;
  5. import com.supplier.model.WxRefund;
  6. import com.supplier.service.WxPayService;
  7. import com.supplier.service.impl.WxPayConfigImpl;
  8. import com.supplier.util.AmountUtil;
  9. import com.supplier.util.ParsingToken;
  10. import com.supplier.util.PayToolUtil;
  11. import com.supplier.util.WXPayUtil;
  12. import com.supplier.vx.pay.WxPayUtils;
  13. import org.apache.ibatis.annotations.Param;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.web.bind.annotation.*;
  16. import javax.servlet.http.HttpServletRequest;
  17. import java.util.HashMap;
  18. import java.util.Map;
  19. import java.util.SortedMap;
  20. import java.util.TreeMap;
  21. /**
  22. * 微信退款
  23. */
  24. @RestController
  25. @RequestMapping("wxRefund")
  26. public class WxRefundContoller extends WxPayUtils {
  27. @Autowired
  28. private WxPayService wxPayService;
  29. //appid
  30. private static String APPID = "wxc2d9b6a59eccffe5";
  31. //商户号
  32. private static String MCHID = "1629374258";
  33. //秘钥
  34. private static String KEY = "ueYnFyZimfIkejHrags9grqvHyekdXGa";
  35. /**
  36. * 微信退款
  37. * @param money 金额
  38. *
  39. * @param wxPay 报价单编号
  40. * @return 返回结果
  41. * @throws Exception 异常
  42. */
  43. @RequestMapping("refund")
  44. @ResponseBody
  45. public static Map<String, Object> refund(String money, WxPay wxPay) throws Exception {
  46. //提示信息
  47. Map<String, Object> mapReturn = new HashMap<>();
  48. //配置请求微信退款的参数
  49. SortedMap<String, String> map = new TreeMap<String, String>();
  50. //拼接参数
  51. WXPayUtil wxPayUtil = new WXPayUtil(); //微信工具类
  52. PayToolUtil payToolUtil = new PayToolUtil();//数据转换工具类
  53. String outTradeNo = wxPayUtil.getOrderNo();
  54. String nonce_str = wxPayUtil.generateNonceStr();
  55. map.put("appid", APPID);
  56. map.put("mch_id", MCHID);
  57. map.put("nonce_str", nonce_str);
  58. map.put("transaction_id", wxPay.getPrepayId());
  59. map.put("out_refund_no", outTradeNo);
  60. map.put("out_trade_no", wxPay.getOutTradeNo());
  61. map.put("total_fee", wxPayUtil.getMoney(wxPay.getTotalFee()));//这里必须是支付时候的下单金额,特别是分批次退款的时候注意这里,不然微信提示:订单金额或退款金额与之前请求不一致,请核实后再试
  62. map.put("refund_fee", wxPayUtil.getMoney(money));//这里是需要退款的金额
  63. // 签名
  64. String sign = payToolUtil.createSign("UTF-8", map, KEY);
  65. map.put("sign", sign);
  66. String url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
  67. WXPayConfig config = new WxPayConfigImpl();
  68. WXPay pay = new WXPay(config);
  69. String resXml = pay.requestWithCert(url, map, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
  70. //xml返回结果转换
  71. Map<String, String> mapVal = wxPayUtil.xmlToMap(resXml);
  72. System.out.println(mapVal);
  73. if ("SUCCESS".equalsIgnoreCase(mapVal.get("result_code"))) {
  74. mapReturn.put("msg", "200");
  75. mapReturn.put("data", "退款成功");
  76. } else {
  77. mapReturn.put("msg", "500");
  78. mapReturn.put("data", "退款失败");
  79. }
  80. return mapReturn;
  81. }
  82. /**
  83. * 查询待审核退款单
  84. * @param wxRefund 参数
  85. * @param request 参数
  86. * @return 返回结果
  87. */
  88. @GetMapping("getUserRefund")
  89. public Map<String, Object> getUserRefund(WxRefund wxRefund, HttpServletRequest request){
  90. //获取token
  91. Map<String, Object> userMap = ParsingToken.tokenParsing(request);
  92. wxRefund.setCode((String) userMap.get("code"));
  93. return wxPayService.getUserRefund(wxRefund);
  94. }
  95. /**
  96. * 查询已审核的退款单
  97. * @param wxRefund 参数
  98. * @param request 参数
  99. * @return 返回结果
  100. */
  101. @GetMapping("getAuditRefund")
  102. public Map<String, Object> getAuditRefund(WxRefund wxRefund, HttpServletRequest request){
  103. //获取token
  104. Map<String, Object> userMap = ParsingToken.tokenParsing(request);
  105. wxRefund.setCode((String) userMap.get("code"));
  106. return wxPayService.getAuditRefund(wxRefund);
  107. }
  108. /**
  109. * 退款审批
  110. * @param wxRefund 参数
  111. * @return 返回结果
  112. */
  113. @PutMapping("refusedRefund")
  114. public Map<String, Object> refusedRefund(WxRefund wxRefund){
  115. return wxPayService.refusedRefund(wxRefund);
  116. }
  117. }