|
|
@@ -5,7 +5,14 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.alipay.api.AlipayApiException;
|
|
|
import com.alipay.api.AlipayClient;
|
|
|
import com.alipay.api.request.AlipayTradeWapPayRequest;
|
|
|
+import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
|
|
|
+import com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult;
|
|
|
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
|
|
|
+import com.github.binarywang.wxpay.constant.WxPayConstants;
|
|
|
+import com.github.binarywang.wxpay.exception.WxPayException;
|
|
|
+import com.github.binarywang.wxpay.service.WxPayService;
|
|
|
import com.izouma.nineth.config.AlipayProperties;
|
|
|
+import com.izouma.nineth.config.WxPayProperties;
|
|
|
import com.izouma.nineth.domain.*;
|
|
|
import com.izouma.nineth.dto.NFTAccount;
|
|
|
import com.izouma.nineth.dto.PageQuery;
|
|
|
@@ -17,10 +24,15 @@ import com.izouma.nineth.repo.OrderRepo;
|
|
|
import com.izouma.nineth.repo.UserAddressRepo;
|
|
|
import com.izouma.nineth.repo.UserRepo;
|
|
|
import com.izouma.nineth.utils.JpaUtils;
|
|
|
+import com.izouma.nineth.utils.JsonUtils;
|
|
|
+import com.izouma.nineth.utils.SecurityUtils;
|
|
|
import com.izouma.nineth.utils.SnowflakeIdWorker;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.codec.EncoderException;
|
|
|
+import org.apache.commons.codec.net.URLCodec;
|
|
|
import org.apache.commons.collections.MapUtils;
|
|
|
+import org.apache.http.client.utils.URLEncodedUtils;
|
|
|
import org.springframework.core.env.Environment;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -46,6 +58,8 @@ public class OrderService {
|
|
|
private Environment env;
|
|
|
private AlipayClient alipayClient;
|
|
|
private AlipayProperties alipayProperties;
|
|
|
+ private WxPayService wxPayService;
|
|
|
+ private WxPayProperties wxPayProperties;
|
|
|
private AssetService assetService;
|
|
|
|
|
|
public Page<Order> all(PageQuery pageQuery) {
|
|
|
@@ -81,6 +95,7 @@ public class OrderService {
|
|
|
.collectionId(collectionId)
|
|
|
.name(collection.getName())
|
|
|
.pic(collection.getPics())
|
|
|
+ .properties(collection.getProperties())
|
|
|
.minter(minter.getNickname())
|
|
|
.minterAvatar(minter.getAvatar())
|
|
|
.qty(qty)
|
|
|
@@ -137,13 +152,61 @@ public class OrderService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public Object payOrderWeixin(Long id) {
|
|
|
+ public String payOrderWeixinH5(Long id) throws WxPayException, EncoderException {
|
|
|
Order order = orderRepo.findByIdAndDelFalse(id).orElseThrow(new BusinessException("订单不存在"));
|
|
|
if (order.getStatus() != OrderStatus.NOT_PAID) {
|
|
|
throw new BusinessException("订单状态错误");
|
|
|
}
|
|
|
|
|
|
- return null;
|
|
|
+ WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
|
|
|
+ request.setBody(order.getName());
|
|
|
+ request.setOutTradeNo(String.valueOf(new SnowflakeIdWorker(1, 1).nextId()));
|
|
|
+ request.setTotalFee(order.getTotalPrice().multiply(BigDecimal.valueOf(100)).intValue());
|
|
|
+ if (Arrays.stream(env.getActiveProfiles()).noneMatch(s -> s.equals("prod"))) {
|
|
|
+ // 测试环境设为1分
|
|
|
+// request.setTotalFee(1);
|
|
|
+ }
|
|
|
+ request.setSpbillCreateIp("180.102.110.170");
|
|
|
+ request.setNotifyUrl(wxPayProperties.getNotifyUrl());
|
|
|
+ request.setTradeType(WxPayConstants.TradeType.MWEB);
|
|
|
+ request.setSignType("MD5");
|
|
|
+ JSONObject body = new JSONObject();
|
|
|
+ body.put("action", "payOrder");
|
|
|
+ body.put("userId", order.getUserId());
|
|
|
+ body.put("orderId", order.getId());
|
|
|
+ request.setAttach(body.toJSONString());
|
|
|
+
|
|
|
+ WxPayMwebOrderResult result = wxPayService.createOrder(request);
|
|
|
+
|
|
|
+ return result.getMwebUrl() + "&redirect_url=" + new URLCodec().encode(wxPayProperties.getReturnUrl());
|
|
|
+ }
|
|
|
+
|
|
|
+ public Object payOrderWeixin(Long id) throws WxPayException {
|
|
|
+ Order order = orderRepo.findByIdAndDelFalse(id).orElseThrow(new BusinessException("订单不存在"));
|
|
|
+ if (order.getStatus() != OrderStatus.NOT_PAID) {
|
|
|
+ throw new BusinessException("订单状态错误");
|
|
|
+ }
|
|
|
+
|
|
|
+ WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
|
|
|
+ request.setBody(order.getName());
|
|
|
+ request.setOutTradeNo(String.valueOf(new SnowflakeIdWorker(1, 1).nextId()));
|
|
|
+ request.setTotalFee(order.getTotalPrice().multiply(BigDecimal.valueOf(100)).intValue());
|
|
|
+ if (Arrays.stream(env.getActiveProfiles()).noneMatch(s -> s.equals("prod"))) {
|
|
|
+ // 测试环境设为1分
|
|
|
+// request.setTotalFee(1);
|
|
|
+ }
|
|
|
+ request.setSpbillCreateIp("180.102.110.170");
|
|
|
+ request.setNotifyUrl(wxPayProperties.getNotifyUrl());
|
|
|
+ request.setTradeType(WxPayConstants.TradeType.JSAPI);
|
|
|
+ request.setOpenid(SecurityUtils.getAuthenticatedUser().getOpenId());
|
|
|
+ request.setSignType("MD5");
|
|
|
+ JSONObject body = new JSONObject();
|
|
|
+ body.put("action", "payOrder");
|
|
|
+ body.put("userId", order.getUserId());
|
|
|
+ body.put("orderId", order.getId());
|
|
|
+ request.setAttach(body.toJSONString());
|
|
|
+
|
|
|
+ return wxPayService.<WxPayMpOrderResult>createOrder(request);
|
|
|
}
|
|
|
|
|
|
public void notifyAlipay(Long orderId, Map<String, String> params) {
|