记得上下班打卡 | git大法好,push需谨慎

Commit 838256b0 authored by jiangxiulong's avatar jiangxiulong

苹果支付完善

parent bc934e47
package com.liquidnet.service.goblin.dto.vo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class GoblinApplePayInnerResultVo implements Serializable, Cloneable {
private String code;
private Integer status;
private String orderCode;
private String orderId;
private String payType;
private String showUrl;
private String returnUrl;
private BigDecimal price;
private String productId;
private Object payData;
private static final GoblinApplePayInnerResultVo obj = new GoblinApplePayInnerResultVo();
public static GoblinApplePayInnerResultVo getNew() {
try {
return (GoblinApplePayInnerResultVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinApplePayInnerResultVo();
}
}
}
......@@ -38,13 +38,15 @@ public class OrderApplePayController {
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "orderId", value = "订单ID", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "type", value = "订单类型 NFT", example = "NFT"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "receiptData", value = "receipt-data", example = "M0WWAoL3nK5I1xF3OX2n9aHlQptG4NbuHbkYmD7cBsLT"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "transactionId", value = "transactionId", example = "2000000027803904"),
})
public ResponseDto pay(
@RequestParam("orderId") @NotBlank(message = "订单ID不能为空") String orderId,
@RequestParam("type") @NotBlank(message = "订单类型不能为空") @Pattern(regexp = "\\b(NFT)\\b", message = "订单类型无效") String type,
@RequestParam("receiptData") @NotBlank(message = "receiptData不能为空") String receiptData
@RequestParam("receiptData") @NotBlank(message = "receiptData不能为空") String receiptData,
@RequestParam("transactionId") @NotBlank(message = "transactionId不能为空") String transactionId
) {
boolean isPay = applePayService.pay(orderId, type, receiptData);
boolean isPay = applePayService.pay(orderId, type, receiptData, transactionId);
if (isPay) {
return ResponseDto.success("支付成功");
} else {
......
......@@ -162,6 +162,9 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
String orderId = IDGenerator.nextSnowId();
String orderCode = IDGenerator.storeCode(orderId);
BigDecimal totalPrice = skuVo.getPrice();
if (payParam.getPayType().equals("applepay")) {
totalPrice = skuVo.getPriceV();
}
/*if (!StringUtils.isEmpty(platVoucherCode)) {// 平台券
GoblinUseResultVo useResultVo = nftOrderUtils.useCoupon(platVoucherCode, "购买NFT商品[" + orderCode + "]", totalPrice, spuId, uid);
String typeVoucher = useResultVo.getCouType();
......@@ -191,7 +194,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
}
// 下单唤起支付
GoblinNftPayResultVo nftPayResultVo = payOrder(nftOrder, uid, payParam);
GoblinNftPayResultVo nftPayResultVo = payOrder(nftOrder, uid, payParam, skuVo.getProductId());
if (null == nftPayResultVo) {
nftOrderUtils.backSkuCountAndStock(uid, stockSkuId, skuId, number);
return ResponseDto.failure("下单失败啦~");
......@@ -360,7 +363,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
}
}
private GoblinNftPayResultVo payOrder(GoblinNftOrder nftOrder, String uid, GoblinNftOrderPayParam payParam) {
private GoblinNftPayResultVo payOrder(GoblinNftOrder nftOrder, String uid, GoblinNftOrderPayParam payParam, String productId) {
try {
// 是否免费
boolean isFree = false;
......@@ -374,7 +377,10 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
payCode = "";
NftPayResultVo.setCode(payCode);
NftPayResultVo.setOrderCode(nftOrder.getOrderCode());
NftPayResultVo.setPayData("");
HashMap<String, Object> payDataMap = CollectionUtil.mapStringObject();
payDataMap.put("productId", productId);
payDataMap.put("quantity", nftOrder.getNum());
NftPayResultVo.setPayData(payDataMap);
NftPayResultVo.setPayType(nftOrder.getPayType());
NftPayResultVo.setPrice(nftOrder.getPriceActual());
NftPayResultVo.setShowUrl(showUrl);
......@@ -630,7 +636,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_NFT_ORDER.getKey(),
SqlMapping.gets(sqls, sqlDataOrder));
if (syncOrderParam.getPaymentType().equals("APPLE_PAY")) {// 苹果支付不做处理
if (orderVo.getPayType().equals("applepay")) {// 苹果支付不做处理
return "success";
} else {// 退款
nftOrderUtils.refundOrderSku(orderId, syncOrderParam.getPaymentId(), syncOrderParam.getPaymentType());
......
......@@ -3,9 +3,9 @@ package com.liquidnet.service.order.service.impl;
import com.fasterxml.jackson.core.type.TypeReference;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinApplePayInnerResultVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinNftOrderVo;
import com.liquidnet.service.goblin.dto.vo.GoblinPayInnerResultVo;
import com.liquidnet.service.goblin.param.GoblinNftOrderPayCallbackParam;
import com.liquidnet.service.order.utils.GoblinNftOrderUtils;
import com.liquidnet.service.order.utils.GoblinRedisUtils;
......@@ -30,10 +30,11 @@ public class OrderApplePayServiceImpl {
@Autowired
private GoblinNftOrderServiceImpl goblinNftOrderService;
@Value("${liquidnet.service.order.url-pay.pay}")
@Value("${liquidnet.service.order.url-pay.applePay}")
private String payUrl;
public boolean pay(String orderId, String type, String receiptData) {
public boolean pay(String orderId, String type, String receiptData, String transactionId) {
try {
log.info("苹果支付成功通知参数 [orderId:{},type:{},receiptData:{}]", orderId, type, receiptData);
GoblinNftOrderVo nftOrder = nftOrderUtils.getNftOrder(orderId);
if (null == nftOrder) {
......@@ -58,25 +59,26 @@ public class OrderApplePayServiceImpl {
httpData.add("showUrl", "");
httpData.add("returnUrl", "");
httpData.add("receiptData", receiptData);
httpData.add("transactionId", transactionId);
LinkedMultiValueMap<String, String> header = CollectionUtil.linkedMultiValueMapStringString();
header.add("Accept", "application/json;charset=UTF-8");
String returnData = HttpUtil.post(payUrl, httpData, header);
log.info("苹果支付调用DRAGON结果 = " + returnData);
ResponseDto<GoblinPayInnerResultVo> dto = JsonUtils.fromJson(returnData, new TypeReference<ResponseDto<GoblinPayInnerResultVo>>() {
ResponseDto<GoblinApplePayInnerResultVo> dto = JsonUtils.fromJson(returnData, new TypeReference<ResponseDto<GoblinApplePayInnerResultVo>>() {
});
GoblinPayInnerResultVo dtoData = dto.getData();
if (null == dtoData || dtoData.getStatus() == 0) {
GoblinApplePayInnerResultVo dtoData = dto.getData();
if (null == dtoData || StringUtil.isEmpty(dtoData.getProductId())) {
return false;
} else {
// 支付成功
GoblinNftOrderPayCallbackParam NftOrderPayCallbackParam = GoblinNftOrderPayCallbackParam.getNew();
NftOrderPayCallbackParam.setCode(nftOrder.getPayCode());
NftOrderPayCallbackParam.setCode(dtoData.getCode());
NftOrderPayCallbackParam.setOrderCode(nftOrder.getOrderCode());
NftOrderPayCallbackParam.setPaymentAt(DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMddHHmmss));
NftOrderPayCallbackParam.setPrice(nftOrder.getPriceActual());
NftOrderPayCallbackParam.setPaymentId("APPLE_PAYMENT_ID");// 这里应该是接口返回
NftOrderPayCallbackParam.setPaymentType("APPLE_PAY");// 这里应该是接口返回
NftOrderPayCallbackParam.setPaymentType(nftOrder.getDeviceFrom().concat(nftOrder.getPayType()).toUpperCase());// 这里应该是接口返回
NftOrderPayCallbackParam.setStatus(1);
if (type.equals("NFT")) {
String isSync = goblinNftOrderService.syncOrder(NftOrderPayCallbackParam);
......@@ -86,5 +88,9 @@ public class OrderApplePayServiceImpl {
}
return true;
}
} catch (Exception e) {
log.error("OrderApplePayServiceImplE e:{}", e);
return false;
}
}
}
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