| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package com.dk.mdm.service.wxapi.basic;
- import com.dk.common.response.ResponseResultUtil;
- import com.dk.common.response.ResponseResultVO;
- import com.dk.common.util.*;
- import com.dk.mdm.infrastructure.config.WechatPayConfigInfo;
- import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
- import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
- import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
- import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult;
- import com.github.binarywang.wxpay.config.WxPayConfig;
- import com.github.binarywang.wxpay.exception.WxPayException;
- import com.github.binarywang.wxpay.service.WxPayService;
- import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * 微信支付服务
- *
- * @author 姜永辉
- * @since 20223-07-01 09:41:05
- */
- @Service("wechatPayService")
- @Slf4j
- public class WechatPayService {
- @Autowired
- private WechatPayConfigInfo wechatPayConfigInfo;
- /**
- * 商户 下单选取旗舰版或专业版的订单
- *
- * @param param
- * @return
- * @throws WxPayException
- */
- public ResponseResultVO unifiedOrder(Map<String, Object> param) throws WxPayException {
- String paymentSn = param.get("paymentSn").toString();
- String openId = param.get("openId").toString();
- try {
- // 获取单据的金额
- String payFee = "0.01";
- WxPayService wxPayService = this.getWxPayService();
- WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
- orderRequest.setBody("商品测试");
- orderRequest.setOutTradeNo(paymentSn);
- orderRequest.setTotalFee(BaseWxPayRequest.yuanToFen(payFee.toString()));//元转成分
- orderRequest.setOpenid(openId);
- orderRequest.setSpbillCreateIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
- orderRequest.setNotifyUrl(wechatPayConfigInfo.getWechatNotifyUrl() + "/" + wechatPayConfigInfo.getAppId());
- orderRequest.setTradeType("JSAPI");
- // 生成预支付订单
- WxPayUnifiedOrderResult wxPayUnifiedOrderResult = wxPayService.unifiedOrder(orderRequest);
- String prepay_id = wxPayUnifiedOrderResult.getPrepayId();
- String timeStamp = new Date().getTime() + "";
- String nonceStr = UUID.fastUUID().toString(true);
- String pack = "prepay_id=" + prepay_id;
- String signType = "MD5";
- String paySign = "";
- String sigmTemp = "appId=" + wxPayUnifiedOrderResult.getAppid() + "&nonceStr=" + nonceStr + "&package="
- + pack + "&signType=" + signType + "&timeStamp=" + timeStamp;
- sigmTemp = sigmTemp + "&key=" + wechatPayConfigInfo.getMchKey();
- paySign = Md5Utils.hash(sigmTemp);
- Map<String, Object> params = new HashMap<String, Object>();
- params.put("appId", wxPayUnifiedOrderResult.getAppid());
- params.put("timeStamp", timeStamp);
- params.put("nonceStr", nonceStr);
- params.put("pack", pack);
- params.put("signType", signType);
- params.put("paySign", paySign);
- return ResponseResultUtil.success(params);
- } catch (Exception e) {
- log.error("微信支付失败!支付单号:{},原因:{}", paymentSn, e.getMessage());
- return ResponseResultUtil.error("支付失败,请稍后重试!");
- }
- }
- /**
- * @desc : 处理支付成功逻辑
- * @author : 姜永辉
- * @date : 2024/03/06 11:29
- */
- public ResponseResultVO notifyWechatPay(WxPayOrderNotifyResult info) {
- // 判断支付金额是否一致
- // ShopOrderPaymentDto sop = new ShopOrderPaymentDto();
- // sop.setPaymentsn(info.getOutTradeNo());
- // sop.setPaystatus(0L);
- // ShopOrderPayment shopOrderPaymentReturn = shopOrderPaymentMapper.selectEntity(sop);
- // log.info("从订单流水表没有查到数据----------" + info.getOutTradeNo());
- // if (shopOrderPaymentReturn == null) {
- // log.error("从订单流水表没有查到数据----------" + info.getOutTradeNo());
- // return ResponseResultUtil.error("从订单流水表没有查到数据----------" + info.getOutTradeNo());
- // }
- // // // 230918 在生成 微信码时候插入 待支付的 数据
- // BigDecimal payFee = new BigDecimal(info.getTotalFee()).divide(new BigDecimal(100), 2, RoundingMode.HALF_EVEN);
- // log.info("微信扫码和插入待支付订单的钱不符-------" + shopOrderPaymentReturn.getAmount()
- // + "--" + payFee);
- // if (shopOrderPaymentReturn.getAmount().compareTo(payFee) != 0) {
- // log.error("微信扫码和插入待支付订单的钱不符-------" + shopOrderPaymentReturn.getAmount()
- // + "--" + payFee);
- // return CommonResult.fail("微信扫码和插入待支付订单的钱不符-------" + shopOrderPaymentReturn.getAmount()
- // + "--" + payFee);
- //
- // }
- //判断是否已经做支付处理
- // log.info("判断是否已经做支付处理----------" + shopOrderPaymentReturn.getPaystatus().toString());
- return ResponseResultUtil.success();
- }
- /**
- * @desc : 获取商户配置信息
- * @author : 姜永辉
- * @date : 2023-08-02 17:30
- */
- public WxPayService getWxPayService() {
- WxPayConfig payConfig = new WxPayConfig();
- payConfig.setAppId(StringUtils.trimToNull(wechatPayConfigInfo.getAppId()));
- payConfig.setMchId(StringUtils.trimToNull(wechatPayConfigInfo.getMchId()));
- payConfig.setMchKey(StringUtils.trimToNull(wechatPayConfigInfo.getMchKey()));
- // payConfig.setSubAppId(null);
- // payConfig.setSubMchId(null);
- payConfig.setKeyPath(StringUtils.trimToNull(wechatPayConfigInfo.getKeyPath()));
- // 可以指定是否使用沙箱环境
- payConfig.setUseSandboxEnv(false);
- WxPayService wxPayService = new WxPayServiceImpl();
- wxPayService.setConfig(payConfig);
- return wxPayService;
- }
- }
|