Browse Source

基础配置

release
张彭杰 1 year ago
parent
commit
1cda7eb44a
2 changed files with 0 additions and 175 deletions
  1. 43
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java
  2. 132
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java

43
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java

@ -71,47 +71,4 @@ public class NotifyApplicationService extends BaseApplicationService {
}
return notificationVo;
}
private WxPayOrderNotifyResult parseOrderNotifyResult(String xmlResult) throws WxPayException {
WxPayService wxPayService = new WxPayServiceImpl();
WxPayOrderNotifyResult result = null;
WxPayConfig wxPayConfig = new WxPayConfig();
wxPayConfig.setMchId(mchId);
wxPayConfig.setMchKey(v3Key);
wxPayService.setConfig(wxPayConfig);
// 解析并校验参数
try {
result = wxPayService.parseOrderNotifyResult(xmlResult);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 验证微信参数
*/
private void checkWxPayParams(WxPayOrderNotifyResult params, PaymentChannelOrder paymentChannelOrder) {
//校验结果是否成功
if (!RETURN_VALUE_SUCCESS.equalsIgnoreCase(params.getResultCode())
&& RETURN_VALUE_SUCCESS.equalsIgnoreCase(params.getReturnCode())) {
String err = "returnCode=" + params.getReturnCode() + ",resultCode=" + params.getResultCode() +
",errCode={}" + params.getErrCode() + ",errCodeDes={}" + params.getErrCodeDes();
log.error(err);
throw new BizException("支付结果为失败");
}
checkCommonParams(new BigDecimal(params.getTotalFee()), paymentChannelOrder);
}
/**
* 验证订单数据
*/
private void checkCommonParams(BigDecimal amount, PaymentChannelOrder paymentChannelOrder) {
if (!PaymentChannelOrderStatusEnum.UNPAID.equals(paymentChannelOrder.getStatus())) {
throw new BizException("支付订单状态不正确");
}
if (!(paymentChannelOrder.getAmount().multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_UP).compareTo(amount) == 0)) {
throw new BizException("支付金额错误");
}
}
}

132
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java

@ -2,21 +2,10 @@ package com.qniao.dam.application.service.paymentchannelorder.processor.wechat;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
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.constant.WxPayConstants;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import com.github.binarywang.wxpay.util.SignUtils;
import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyField;
import com.qniao.dam.application.service.paymentchannelorder.processor.IChannelPayService;
import com.qniao.dam.application.service.paymentchannelorder.processor.wechat.utils.WXPayV3Util;
import com.qniao.dam.application.service.paymentchannelorder.processor.wechat.vobj.ChannelPaymentField;
import com.qniao.dam.application.service.paymentchannelorder.processor.wechat.vobj.WeChatPaymentBasic;
import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder;
import com.qniao.dau.application.UecServerApplicationService;
import com.qniao.dau.application.request.GetWechatSessionDto;
@ -28,9 +17,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -109,122 +95,4 @@ public class WeChatPayProcessor extends IChannelPayService {
throw new BizException("发起微信预支付失败");
}
}
public WxPayConfig getWxPayConfig(String appId) {
WxPayConfig wxPayConfig = new WxPayConfig();
wxPayConfig.setMchId(mchId);
wxPayConfig.setMchKey(v3Key);
wxPayConfig.setAppId(appId);
wxPayConfig.setTradeType("JSAPI");
wxPayConfig.setNotifyUrl(notifyUrl);
return wxPayConfig;
}
/**
* 构建微信统一下单请求数据
*
* @param paymentChannelOrder
* @param wxPayConfig
* @return
*/
public WxPayUnifiedOrderRequest buildUnifiedOrderRequest(PaymentChannelOrder paymentChannelOrder, WxPayConfig
wxPayConfig, String openId) {
// 微信统一下单请求对象
WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
request.setBody(paymentChannelOrder.getComment());
request.setOutTradeNo(paymentChannelOrder.getId().toString());
request.setTotalFee(paymentChannelOrder.getAmount().multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_UP).intValue());
request.setSpbillCreateIp("127.0.0.1");
//todo 是否需要记在渠道支付单中
request.setTimeExpire(LocalDateTime.now().plusMinutes(30L).format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
request.setNotifyUrl(wxPayConfig.getNotifyUrl());
request.setTradeType(wxPayConfig.getTradeType());
if (request.getTradeType().equals("JSAPI")) {
request.setOpenid(openId);
}
return request;
}
private WeChatPaymentBasic getWeChatPaymentBasic(WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest, WxPayConfig
wxPayConfig) {
WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(wxPayConfig);
WxPayUnifiedOrderResult wxPayUnifiedOrderResult = null;
try {
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
String nonceStr = String.valueOf(System.currentTimeMillis());
log.info("发起微信支付参数 配置:{},参数: {}", wxPayUnifiedOrderRequest, wxPayConfig);
wxPayUnifiedOrderResult = wxPayService.unifiedOrder(wxPayUnifiedOrderRequest);
WeChatPaymentBasic weChatPaymentBasic = new WeChatPaymentBasic();
if (wxPayConfig.getTradeType().equals("JSAPI")) {
log.info("微信预支付返回结果:{}", wxPayUnifiedOrderResult);
weChatPaymentBasic.setAppId(wxPayUnifiedOrderResult.getAppid());
weChatPaymentBasic.setNonceStr(nonceStr);
weChatPaymentBasic.setTimeStamp(timestamp);
weChatPaymentBasic.setPackages("prepay_id=" + wxPayUnifiedOrderResult.getPrepayId());
weChatPaymentBasic.setSignType(WxPayConstants.SignType.MD5);
weChatPaymentBasic.setPaySign(sign(weChatPaymentBasic, wxPayConfig));
log.info("微信预支付调起参数:{}", weChatPaymentBasic);
} else if (wxPayConfig.getTradeType().equals("APP")) {
log.info("微信预支付返回结果:{}", wxPayUnifiedOrderResult);
String packageValue = "Sign=WXPay";
weChatPaymentBasic.setSign(appSign(wxPayUnifiedOrderResult.getPrepayId(),
wxPayConfig.getMchId(),
timestamp,
nonceStr,
wxPayConfig.getAppId(),
packageValue,
wxPayConfig));
weChatPaymentBasic.setPrepayid(wxPayUnifiedOrderResult.getPrepayId());
weChatPaymentBasic.setPartnerid(wxPayConfig.getMchId());
weChatPaymentBasic.setAppId(wxPayUnifiedOrderResult.getAppid());
weChatPaymentBasic.setPackages(packageValue);
weChatPaymentBasic.setTimeStamp(timestamp);
weChatPaymentBasic.setNonceStr(nonceStr);
log.info("微信预支付调起参数:{}", weChatPaymentBasic);
}
return weChatPaymentBasic;
} catch (WxPayException e) {
log.info(e.getMessage());
throw new BizException("发起微信预支付异常");
}
}
private String sign(WeChatPaymentBasic weChatPaymentBasicVo, WxPayConfig wxPayConfig) {
Map<String, String> payInfo = new HashMap<>();
payInfo.put("appId", weChatPaymentBasicVo.getAppId());
payInfo.put("timeStamp", weChatPaymentBasicVo.getTimeStamp());
payInfo.put("nonceStr", weChatPaymentBasicVo.getNonceStr());
payInfo.put("package", weChatPaymentBasicVo.getPackages());
payInfo.put("signType", WxPayConstants.SignType.MD5);
return SignUtils.createSign(payInfo, wxPayConfig.getSignType(), wxPayConfig.getMchKey(), null);
}
private String appSign(String prepayid, String partnerid, String timestamp, String noncestr, String
appid, String packageValue, WxPayConfig wxPayConfig) {
Map<String, String> configMap = new HashMap<>();
configMap.put("prepayid", prepayid);
configMap.put("partnerid", partnerid);
configMap.put("package", packageValue);
configMap.put("timestamp", timestamp);
configMap.put("noncestr", noncestr);
configMap.put("appid", appid);
return SignUtils.createSign(configMap, wxPayConfig.getSignType(), wxPayConfig.getMchKey(), null);
}
private Map<String, String> transformToMap(WeChatPaymentBasic weChatPaymentBasic) {
Map<String, String> map = new HashMap<>();
map.put(ChannelPaymentField.APPID, weChatPaymentBasic.getAppId());
map.put(ChannelPaymentField.TIMESTAMP, weChatPaymentBasic.getTimeStamp());
map.put(ChannelPaymentField.NONCE_STR, weChatPaymentBasic.getNonceStr());
map.put(ChannelPaymentField.PACKAGES, weChatPaymentBasic.getPackages());
map.put(ChannelPaymentField.SIGN_TYPE, weChatPaymentBasic.getSignType());
map.put(ChannelPaymentField.PAY_SIGN, weChatPaymentBasic.getPaySign());
map.put(ChannelPaymentField.PRE_PAY_ID, weChatPaymentBasic.getPrepayid());
map.put(ChannelPaymentField.PARTNER_ID, weChatPaymentBasic.getPartnerid());
map.put(ChannelPaymentField.SIGN, weChatPaymentBasic.getSign());
return map;
}
}
Loading…
Cancel
Save