Commit 16faaf18 authored by shiyu's avatar shiyu

分销商订单显示倒计时、新增用户头像

parent f4663441
......@@ -7,12 +7,9 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.io.ClassPathResource;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.PrivateKey;
......@@ -22,7 +19,7 @@ public class WxPayAutoCertificateConfig {
private static final Logger logger = LoggerFactory.getLogger(WxPayAutoCertificateConfig.class);
@Autowired
WxPayParamConfig wxPayParamConfig;
WxPayProperties wxPayProperties;
/**
......@@ -32,14 +29,15 @@ public class WxPayAutoCertificateConfig {
@Bean
public RSAAutoCertificateConfig rsaAutoCertificateConfig() {
RSAAutoCertificateConfig config = new RSAAutoCertificateConfig.Builder()
.merchantId(wxPayParamConfig.getMerchantId())
.merchantId(wxPayProperties.getMerchantId())
.privateKey(getPrivateKey())
.merchantSerialNumber(wxPayParamConfig.getMerchantSerialNumber())
.apiV3Key(wxPayParamConfig.getApiV3Key())
.merchantSerialNumber(wxPayProperties.getMerchantSerialNumber())
.apiV3Key(wxPayProperties.getApiV3Key())
.build();
return config;
}
public PrivateKey getPrivateKey() {
try {
PrivateKey privateKey = PemUtil.loadPrivateKey(new ClassPathResource("apiclient_key.pem").getInputStream());
......
......@@ -5,7 +5,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "dts.wx-pay")
public class WxPayParamConfig {
public class WxPayProperties {
/**
* APPID
......@@ -42,6 +42,33 @@ public class WxPayParamConfig {
*/
private String privateKeyPath;
/**
* p12证书的位置
*/
private String p12KeyPath;
/**
* JSAPI--公众号支付
*/
private String tradeType;
public String getP12KeyPath() {
return p12KeyPath;
}
public void setP12KeyPath(String p12KeyPath) {
this.p12KeyPath = p12KeyPath;
}
public String getTradeType() {
return tradeType;
}
public void setTradeType(String tradeType) {
this.tradeType = tradeType;
}
public String getAppId() {
return appId;
}
......
......@@ -2,6 +2,9 @@ package com.wwdz.ch.core.api.wxpay;
import com.alibaba.fastjson.JSONObject;
import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.core.exception.HttpException;
......@@ -10,11 +13,19 @@ import com.wechat.pay.java.core.exception.ServiceException;
import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
import com.wechat.pay.java.service.payments.jsapi.model.*;
import com.wechat.pay.java.service.payments.model.Transaction;
import com.wechat.pay.java.service.refund.RefundService;
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.Refund;
import com.wechat.pay.java.service.refund.model.Status;
import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.core.util.UUID;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.xxdxxs.utils.JsonUtils;
import com.xxdxxs.utils.StringUtils;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -32,11 +43,13 @@ public class WxPayServiceApi {
private static final Logger logger = LoggerFactory.getLogger(WxPayServiceApi.class);
@Autowired
WxPayParamConfig wxPayParamConfig;
WxPayProperties wxPayProperties;
@Autowired
RSAAutoCertificateConfig rsaAutoCertificateConfig;
/* @Autowired
WxPayService wxPayService;*/
/**
* 创建预支付订单
......@@ -51,13 +64,13 @@ public class WxPayServiceApi {
.build();
try {
PrepayRequest request = new PrepayRequest();
request.setAppid(wxPayParamConfig.getAppId());
request.setMchid(wxPayParamConfig.getMerchantId());
request.setAppid(wxPayProperties.getAppId());
request.setMchid(wxPayProperties.getMerchantId());
//商品描述
request.setDescription(dto.getItemName());
//商户订单号
request.setOutTradeNo(dto.getDistributionOrderId());
request.setNotifyUrl(wxPayParamConfig.getPayNotifyUrl());
request.setNotifyUrl(wxPayProperties.getPayNotifyUrl());
Amount amount = new Amount();
//单位为分,参数中的amount需要乘以过100
amount.setTotal(new BigDecimal(dto.getAmount()).intValue());
......@@ -92,7 +105,7 @@ public class WxPayServiceApi {
*/
public Result queryOrderByTransactionId(DistributionOrderRequestDto dto) {
QueryOrderByIdRequest queryRequest = new QueryOrderByIdRequest();
queryRequest.setMchid(wxPayParamConfig.getMerchantId());
queryRequest.setMchid(wxPayProperties.getMerchantId());
queryRequest.setTransactionId(dto.getPaymentId());
try {
JsapiServiceExtension service =
......@@ -118,7 +131,7 @@ public class WxPayServiceApi {
*/
public Result<Transaction> queryOrderBytOutTradeNo(DistributionOrderRequestDto dto) {
QueryOrderByOutTradeNoRequest queryRequest = new QueryOrderByOutTradeNoRequest();
queryRequest.setMchid(wxPayParamConfig.getMerchantId());
queryRequest.setMchid(wxPayProperties.getMerchantId());
queryRequest.setOutTradeNo(dto.getDistributionOrderId());
try {
JsapiServiceExtension service =
......@@ -158,16 +171,16 @@ public class WxPayServiceApi {
long timestamp = System.currentTimeMillis() / 1000;
String nonceStr = generateNonceStr();
//加载签名
String packageSign = sign(buildMessage(wxPayParamConfig.getAppId(), timestamp, nonceStr, prepayId).getBytes(), wxPayParamConfig.getPrivateKeyPath());
String packageSign = sign(buildMessage(wxPayProperties.getAppId(), timestamp, nonceStr, prepayId).getBytes(), wxPayProperties.getPrivateKeyPath());
JSONObject jsonObject = new JSONObject();
jsonObject.put("appId", wxPayParamConfig.getAppId());
jsonObject.put("appId", wxPayProperties.getAppId());
jsonObject.put("prepayid", prepayId);
jsonObject.put("timeStamp", String.valueOf(timestamp));
jsonObject.put("nonceStr", nonceStr);
jsonObject.put("package", "prepay_id=" + prepayId);
jsonObject.put("signType", "RSA");
jsonObject.put("paySign", packageSign);
jsonObject.put("partnerId", wxPayParamConfig.getMerchantId());
jsonObject.put("partnerId", wxPayProperties.getMerchantId());
return Result.success(jsonObject);
}
} catch (Exception e) {
......@@ -215,50 +228,43 @@ public class WxPayServiceApi {
}
/* public Result rebackPay(String orderNo,Integer amount){
//微信支付-申请退款请求参数
WxPayRefundRequest wxPayRefundRequest = new WxPayRefundRequest();
WxPayRefundV3Request.Amount am = new WxPayRefundV3Request.Amount();
am.setTotal(amount);//原订单金额
//退款币种
am.setCurrency("CNY");
//退款金额 单位为分
am.setRefund(amount);
//金额信息
request.setAmount(am);
//transaction_id:微信支付订单号
request.setTransactionId(orderNo);
//商户订单号
request.setOutRefundNo("return_"+orderNo);
request.setNotifyUrl(this.wxPayService.getConfig().getPayScoreNotifyUrl()); //设置回调地址
WxPayRefundV3Result result;
/**
* 微信支付申请退款
* @param dto
* @return
*/
public Result refund(DistributionOrderRequestDto dto){
try {
//调用微信V3退款API
result = wxPayService.refundV3(request);
String status = result.getStatus();
switch (status) {
case "SUCCESS":
res.success("退款成功");
break;
case "CLOSED":
res.success("退款关闭");
break;
case "PROCESSING":
res.success("退款处理中");
break;
case "ABNORMAL":
res.success("退款异常");
break;
default:
res.error("受理失败");
break;
// 构建退款service
RefundService service = new RefundService.Builder().config(rsaAutoCertificateConfig).build();
//构建退款请求
CreateRequest request = new CreateRequest();
//构建订单金额信息
AmountReq amountReq = new AmountReq();
//退款金额
amountReq.setRefund(PriceUtil.convertPriceFromStr(dto.getRefundPrice()));
//原订单金额
amountReq.setTotal(PriceUtil.convertPriceFromStr(dto.getAmount()));
//货币类型(默认人民币)
amountReq.setCurrency("CNY");
//商户系统单号
request.setOutTradeNo(dto.getDistributionOrderId());
request.setAmount(amountReq);
//商户退款单号
request.setOutRefundNo(UUID.randomUUID().toString(true));
//退款通知回调地址
request.setNotifyUrl(null);
Refund refundResponse = service.create(request);
logger.info("微信申请退款接口返回:{}", JsonUtils.from(refundResponse));
if (refundResponse.getStatus().equals(Status.SUCCESS)){
//说明退款成功,开始接下来的业务操作
//你的业务代码
}
res.setResult(result);
} catch (Exception e) {
e.printStackTrace();
res.error("申请退款失败,"+e.getMessage());
return Result.success();
}catch (Exception e){
logger.error("微信退款接口错误error : {}", e);
}
return res;
return Result.failed();
}
*/
}
......@@ -26,6 +26,12 @@ public class PriceUtil {
return bigDecimal.longValue();
}
public static Integer convertPriceFromStrToInt(String price){
BigDecimal bigDecimal = new BigDecimal(price);
bigDecimal = bigDecimal.multiply(new BigDecimal(100));
return bigDecimal.intValue();
}
public static String convertDoubleToString(Double price){
BigDecimal bigDecimal = new BigDecimal(String.valueOf( price / 100));
DecimalFormat df = new DecimalFormat("#0.00");
......
......@@ -39,6 +39,8 @@ dts:
apiV3Key: 7e9504fd8a5c458ab7466b8aaae462a9
payNotifyUrl: https://cjxc-applet-dev.wanwudezhi.com/wxPayCallback/getPayNotify
privateKeyPath: apiclient_key.pem
p12KeyPath: apiclient_cert.p12
tradeType: JSAPI
#腾讯IM配置
......
......@@ -31,6 +31,8 @@ dts:
apiV3Key: 7e9504fd8a5c458ab7466b8aaae462a9
payNotifyUrl: https://cjxc-applet.wanwudezhi.com/wxPayCallback/getPayNotify
privateKeyPath: apiclient_key.pem
p12KeyPath: apiclient_cert.p12
tradeType: JSAPI
#腾讯IM配置
im:
......
......@@ -122,4 +122,9 @@ public class DistributionOrderRequestDto extends BaseRequestDto implements Entit
* 预支付单号
*/
private String prepayId;
/**
* 要退款的金额
*/
private String refundPrice;
}
......@@ -54,6 +54,11 @@ public class DistributionOrderVo implements Entity {
*/
private String buyerName;
/**
* 买家名称
*/
private String buyerAvatar;
/**
* 店铺id
*/
......
......@@ -220,8 +220,14 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
distributionOrderVo.setAmount(PriceUtil.convertPriceFenToYuan(distributionOrder.getAmount()));
distributionOrderVo.setItemPrice(PriceUtil.convertPriceFenToYuan(itemPrice));
distributionOrderVo.setBuyerName(cacheUtil.getAppletUserNameById(distributionOrder.getBuyerId()));
distributionOrderVo.setBuyerAvatar(cacheUtil.getAppletUserList(distributionOrder.getBuyerId()) == null?"":cacheUtil.getAppletUsers(distributionOrder.getBuyerId()).getAvatar());
distributionOrderVo.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrder.getState()));
distributionOrderVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos()));
//支付截止时间,下单后2小时内
Date date = distributionOrder.getCreateTime();
Instant instant = date.toInstant().plus(Duration.ofHours(2));
Date time = Date.from(instant);
distributionOrderVo.setPayEndTime(time);
distributionOrderVoList.add(distributionOrderVo);
});
return Result.success(PageSearchResult.of(pageInfo, distributionOrderVoList));
......@@ -257,6 +263,11 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
distributionOrderDetailVo.setChannelCost(PriceUtil.convertDoubleToString(channelCost));
//利润
Double profit = distributionOrder.getAmount().doubleValue() - distributionTotalPrice.doubleValue() - channelCost;
//支付截止时间,下单后2小时内
Date date = distributionOrder.getCreateTime();
Instant instant = date.toInstant().plus(Duration.ofHours(2));
Date time = Date.from(instant);
distributionOrderDetailVo.setPayEndTime(time);
distributionOrderDetailVo.setProfit(PriceUtil.convertDoubleToString(profit));
return Result.success(distributionOrderDetailVo);
} catch (Exception e) {
......
......@@ -32,5 +32,17 @@ public class WxPayServiceTest {
}
@Test
public void refund() {
String orderId = "DA2402051545434693338";
DistributionOrderRequestDto dto = new DistributionOrderRequestDto();
dto.setDistributionOrderId(orderId);
dto.setAmount("0.1");
dto.setRefundPrice("0.1");
Result result = wxPayServiceApi.refund(dto);
logger.info("申请微信支付退款:{}", result);
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment