package com.pz.system.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult; import com.github.binarywang.wxpay.bean.notify.WxScanPayNotifyResult; import com.github.binarywang.wxpay.bean.request.*; import com.github.binarywang.wxpay.bean.result.*; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.WxPayService; import com.pz.common.core.domain.PageQuery; import com.pz.common.core.page.TableDataInfo; import com.pz.system.domain.City; import com.pz.system.domain.bo.CityBo; import com.pz.system.domain.vo.CityVo; import com.pz.system.mapper.CityMapper; import com.pz.system.service.ICityService; import com.pz.system.service.IPayService; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PostMapping; import java.io.File; import java.util.Collection; import java.util.List; /** * 城市Service业务层处理 * * @author ruoyi * @date 2023-09-07 */ @RequiredArgsConstructor @Service public class PayServiceImpl implements IPayService { @Autowired private WxPayService wxService; /** * <pre> * 查询订单(详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2) * 该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。 * 需要调用查询接口的情况: * ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知; * ◆ 调用支付接口后,返回系统错误或未知交易状态情况; * ◆ 调用被扫支付API,返回USERPAYING的状态; * ◆ 调用关单或撤销接口API之前,需确认支付状态; * 接口地址:https://api.mch.weixin.qq.com/pay/orderquery * </pre> * * @param transactionId 微信订单号 * @param outTradeNo 商户系统内部的订单号,当没提供transactionId时需要传这个。 */ @Override public WxPayOrderQueryResult queryOrder(String transactionId, String outTradeNo) throws WxPayException { return this.wxService.queryOrder(transactionId, outTradeNo); } /** * 调用统一下单接口,并组装生成支付所需参数对象. * * @param request 统一下单请求参数 * @param <T> 请使用{@link com.github.binarywang.wxpay.bean.order}包下的类 * @return 返回 {@link com.github.binarywang.wxpay.bean.order}包下的类对象 */ @Override public <T> T createOrder(WxPayUnifiedOrderRequest request) throws WxPayException { return this.wxService.createOrder(request); } /** * <pre> * 微信支付-申请退款 * 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4 * 接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund * </pre> * * @param request 请求对象 * @return 退款操作结果 */ @Override public WxPayRefundResult refund(WxPayRefundRequest request) throws WxPayException { return this.wxService.refund(request); } /** * <pre> * 微信支付-查询退款 * 应用场景: * 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账, * 银行卡支付的退款3个工作日后重新查询退款状态。 * 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5 * 接口链接:https://api.mch.weixin.qq.com/pay/refundquery * </pre> * 以下四个参数四选一 * * @param transactionId 微信订单号 * @param outTradeNo 商户订单号 * @param outRefundNo 商户退款单号 * @param refundId 微信退款单号 * @return 退款信息 */ @Override public WxPayRefundQueryResult refundQuery(String transactionId, String outTradeNo,String outRefundNo,String refundId) throws WxPayException { return this.wxService.refundQuery(transactionId, outTradeNo, outRefundNo, refundId); } /** * 支付回调通知处理 * @param xmlData * @return * @throws WxPayException */ @Override public String parseOrderNotifyResult(String xmlData) throws WxPayException { // 参数解析 final WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData); // TODO 根据自己业务场景需要构造返回对象 return WxPayNotifyResponse.success("成功"); } /** * 退款回调通知处理 * @param xmlData * @return * @throws WxPayException */ @Override public String parseRefundNotifyResult(String xmlData) throws WxPayException { // 参数解析 final WxPayRefundNotifyResult result = this.wxService.parseRefundNotifyResult(xmlData); // TODO 根据自己业务场景需要构造返回对象 return WxPayNotifyResponse.success("成功"); } }