| | |
| | | package com.doumee.config.wx; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | | import com.doumee.core.constants.Constants; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.HttpsUtil; |
| | | import com.doumee.dao.business.WithdrawalOrdersMapper; |
| | | import com.doumee.dao.business.model.Orders; |
| | | import com.doumee.dao.business.model.WithdrawalOrders; |
| | | import com.doumee.dao.system.model.SystemDictData; |
| | | import com.wechat.pay.java.service.refund.model.AmountReq; |
| | | import com.wechat.pay.java.service.refund.model.CreateRequest; |
| | | import com.wechat.pay.java.service.refund.model.QueryByOutRefundNoRequest; |
| | | import com.doumee.core.utils.ID; |
| | | import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; |
| | | import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; |
| | | import com.github.binarywang.wxpay.exception.WxPayException; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.io.FileUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.io.ByteArrayInputStream; |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | |
| | | /** |
| | | * 微信小程序-公共方法 |
| | |
| | | @Slf4j |
| | | public class WxMiniUtilService { |
| | | |
| | | @Autowired |
| | | private WithdrawalOrdersMapper withdrawalOrdersMapper; |
| | | |
| | | @Autowired |
| | | private SystemDictDataBiz systemDictDataBiz; |
| | | |
| | | @Autowired |
| | | private WxPayProperties wxPayProperties; |
| | | |
| | | @Transactional(rollbackFor = {BusinessException.class,Exception.class}) |
| | | public boolean wxRefund(WithdrawalOrders withdrawalOrders,Orders orders) { |
| | | // 发送退款请求 |
| | | withdrawalOrders.setCreateTime(new Date()); |
| | | withdrawalOrdersMapper.insert(withdrawalOrders); |
| | | CreateRequest request = new CreateRequest(); |
| | | request.setOutTradeNo(orders.getOutTradeNo()); |
| | | request.setOutRefundNo(withdrawalOrders.getId().toString()); |
| | | request.setSubMchid(WxMiniConfig.wxProperties.getSubMchId()); |
| | | request.setNotifyUrl(WxMiniConfig.wxProperties.getRefundNotifyUrl()); |
| | | AmountReq amountReq = new AmountReq(); |
| | | amountReq.setTotal(1L);//withdrawalOrders.getAmount()); |
| | | amountReq.setRefund(1L);//withdrawalOrders.getAmount()); |
| | | amountReq.setCurrency("CNY"); |
| | | request.setAmount(amountReq); |
| | | /** |
| | | * 订单微信退款 |
| | | * orderNo:商户订单号 |
| | | * totalPrice:订单总金额 |
| | | * refundPrice;退款金额 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public String wxRefund(String orderNo, Long totalPrice, Long refundPrice) { |
| | | try { |
| | | log.error("=============="+JSONObject.toJSONString(request)); |
| | | com.wechat.pay.java.service.refund.model.Refund response = WxMiniConfig.refundService.create(request); |
| | | log.error("=============="+JSONObject.toJSONString(response)); |
| | | if ("SUCCESS".equals(response.getStatus().name()) |
| | | || "PROCESSING".equals(response.getStatus().name()) ) { |
| | | return true; |
| | | }else{ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,退款申请失败哦!"); |
| | | // 发送退款请求 |
| | | String refNum = ID.nextGUID(); |
| | | WxPayRefundRequest request = new WxPayRefundRequest(); |
| | | request.setOutTradeNo(orderNo); |
| | | request.setOutRefundNo(refNum); |
| | | request.setTotalFee(totalPrice.intValue()); |
| | | request.setRefundFee(refundPrice.intValue()); |
| | | WxPayRefundResult response = WxMiniConfig.wxPayService.refund(request); |
| | | if ("SUCCESS".equals(response.getReturnCode()) && "SUCCESS".equals(response.getResultCode())) { |
| | | return refNum; |
| | | } else { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),response.getErrCode() + response.getErrCodeDes()); |
| | | } |
| | | }catch (Exception e){ |
| | | } catch (WxPayException e) { |
| | | e.printStackTrace(); |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,退款申请失败!"); |
| | | } |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"退款发生异常请联系管理员"); |
| | | } |
| | | |
| | | |
| | | |
| | | } |