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