From cdc3690a0354e01b44852f4c9da3b7204128d2eb Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 13 八月 2021 18:46:36 +0800 Subject: [PATCH] 增加苹果内购回调日志,兼容苹果内购 --- src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java | 88 +++++++++++++++++++++++++++++++------------ 1 files changed, 63 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java b/src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java index c0596de..ffef87b 100644 --- a/src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java +++ b/src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java @@ -3,10 +3,9 @@ import com.alipay.api.AlipayApiException; import com.alipay.api.response.AlipayTradeQueryResponse; import com.yeshi.buwan.dao.vip.OrderRecordDao; -import com.yeshi.buwan.domain.vip.OrderRecord; -import com.yeshi.buwan.domain.vip.OrderType; -import com.yeshi.buwan.domain.vip.UserVIPInfo; -import com.yeshi.buwan.domain.vip.VIPPriceType; +import com.yeshi.buwan.dao.vip.VIPPriceDao; +import com.yeshi.buwan.domain.vip.*; +import com.yeshi.buwan.dto.order.OrderPaySuccessForm; import com.yeshi.buwan.dto.order.PayWayInfoDTO; import com.yeshi.buwan.exception.PPTVException; import com.yeshi.buwan.exception.goldcorn.GoldCornException; @@ -30,6 +29,8 @@ import org.springframework.transaction.annotation.Transactional; import org.yeshi.utils.alipay.AlipayH5PayUtil; import org.yeshi.utils.entity.wx.WXPayOrderInfoV3; +import org.yeshi.utils.ios.pay.IOSPayVerifyUtil; +import org.yeshi.utils.ios.pay.vo.IOSAPPBuyVerifyResult; import org.yeshi.utils.wx.WXPayV3Util; import javax.annotation.Resource; @@ -59,6 +60,9 @@ @Resource private GoldCornManager goldCornManager; + + @Resource + private VIPPriceDao vipPriceDao; @Transactional(rollbackFor = Exception.class) @Override @@ -116,7 +120,7 @@ } catch (Exception e) { throw new GoldCornException(1, "褰辫璞嗘墸闄ゅ嚭閿�"); } - paySuccess(record.getId(), OrderRecord.PAY_WAY_GOLDCORN, null, new Date()); + paySuccess(new OrderPaySuccessForm(record.getId(), OrderRecord.PAY_WAY_GOLDCORN, null, new Date())); orderLogger.info("璁㈠崟褰辫璞嗘敮浠樻垚鍔燂細id-{}", record.getId()); case OrderRecord @@ -142,7 +146,7 @@ } catch (Exception e) { throw new GoldCornException(1, "褰辫璞嗘墸闄ゅ嚭閿�"); } - paySuccess(record.getId(), OrderRecord.PAY_WAY_GOLDCORN, null, new Date()); + paySuccess(new OrderPaySuccessForm(record.getId(), OrderRecord.PAY_WAY_GOLDCORN, null, new Date())); orderLogger.info("璁㈠崟褰辫璞嗘敮浠樻垚鍔燂細id-{} 绫诲瀷-{}", record.getId(), record.getOrderType().name()); case OrderRecord .PAY_WAY_WX: { @@ -173,7 +177,7 @@ } catch (Exception e) { throw new GoldCornException(1, "褰辫璞嗘墸闄ゅ嚭閿�"); } - paySuccess(record.getId(), OrderRecord.PAY_WAY_GOLDCORN, null, new Date()); + paySuccess(new OrderPaySuccessForm(record.getId(), OrderRecord.PAY_WAY_GOLDCORN, null, new Date())); return new PayWayInfoDTO(0, VipUtil.getPaySuccessUrl(record.getId())); } case OrderRecord.PAY_WAY_IAPP: @@ -201,6 +205,11 @@ return OrderRecord.STATE_PAY; else return OrderRecord.STATE_NOT_PAY; + case OrderRecord.PAY_WAY_IAPP: + if (record.getMoneyPay()) + return OrderRecord.STATE_PAY; + else + return OrderRecord.STATE_NOT_PAY; } return OrderRecord.STATE_NOT_PAY; } @@ -208,14 +217,14 @@ @Transactional(rollbackFor = Exception.class) @Override - public OrderRecord paySuccess(String id, int payWay, BigDecimal payMoney, Date payTime) throws + public OrderRecord paySuccess(OrderPaySuccessForm successForm) throws VIPException, PPTVException, VideoBuyRecordException, OrderException { - orderLogger.info("璁㈠崟鏀粯鎴愬姛鐩殑鎵ц锛歩d-{}锛屾敮浠樻柟寮�-{},鏀粯閲戦-{}锛屾敮浠樻椂闂�-{}", id, payWay, payMoney, payTime.getTime()); + orderLogger.info("璁㈠崟鏀粯鎴愬姛鐩殑鎵ц锛歩d-{}锛屾敮浠樻柟寮�-{},鏀粯閲戦-{}锛屾敮浠樻椂闂�-{}", successForm.getId(), successForm.getPayWay(), successForm.getPayMoney(), successForm.getPayTime()); Session session = vipOrderRecordDao.getSession(); //淇敼璁板綍 - Query query = session.createSQLQuery("select * from wk_vip_order_record r where r.id=? for update").addEntity(OrderRecord.class).setCacheable(false).setParameter(0, id); + Query query = session.createSQLQuery("select * from wk_vip_order_record r where r.id=? for update").addEntity(OrderRecord.class).setCacheable(false).setParameter(0, successForm.getId()); List<OrderRecord> list = query.list(); if (list == null || list.size() == 0) throw new OrderException(10, "璁㈠崟涓嶅瓨鍦�"); @@ -225,24 +234,26 @@ throw new OrderException(1, "璁㈠崟鏈浜庡緟鏀粯鐘舵��"); - if (payWay != OrderRecord.PAY_WAY_GOLDCORN) { - record.setPayMoney(payMoney); + if (successForm.getPayWay() != OrderRecord.PAY_WAY_GOLDCORN) { + record.setPayMoney(successForm.getPayMoney()); record.setMoneyPay(true); + record.setAppleTransactionId(successForm.getAppleTransactionId()); + record.setAppleOriginalTransactionId(successForm.getAppleOriginalTransactionId()); } else { record.setGoldCornPay(true); } - record.setPayTime(payTime); + record.setPayTime(successForm.getPayTime()); record.setUpdateTime(new Date()); record.setState(getPayState(record)); //宸茬粡鏀粯鎴愬姛 if (record.getState() == OrderRecord.STATE_PAY) { - session.createSQLQuery("insert into wk_vip_order_pay_success(id,create_time) value(?,now())").setParameter(0, id).executeUpdate(); + session.createSQLQuery("insert into wk_vip_order_pay_success(id,create_time) value(?,now())").setParameter(0, successForm.getId()).executeUpdate(); } if (record.getOrderType() == OrderType.vip) { - Date[] expireDate = addExpireTime(session, record.getUid(), payTime, record.getType()); + Date[] expireDate = addExpireTime(session, record.getUid(), successForm.getPayTime(), record.getType()); record.setVipStartTime(expireDate[0]); record.setVipEndTime(expireDate[1]); if (expireDate == null) { @@ -252,27 +263,27 @@ if (record.getState() == OrderRecord.STATE_PAY) { - orderLogger.info("璁㈠崟鍏ㄩ儴鏀粯鎴愬姛锛歩d-{}", id); + orderLogger.info("璁㈠崟鍏ㄩ儴鏀粯鎴愬姛锛歩d-{}", successForm.getId()); //璐拱VIP pptvVipManager.buyVIP(record); - orderLogger.info("璐拱VIP鎴愬姛锛歩d-{}", id); + orderLogger.info("璐拱VIP鎴愬姛锛歩d-{}", successForm.getId()); } else { - orderLogger.info("璁㈠崟閮ㄥ垎鏀粯鎴愬姛锛歩d-{}", id); + orderLogger.info("璁㈠崟閮ㄥ垎鏀粯鎴愬姛锛歩d-{}", successForm.getId()); } } else if (record.getOrderType() == OrderType.video) { - record.setVipStartTime(payTime); + record.setVipStartTime(successForm.getPayTime()); //7澶╀箣鍐呮湁鏁� - record.setVipEndTime(new Date(payTime.getTime() + 1000 * 60 * 60L * 24 * 7)); + record.setVipEndTime(new Date(successForm.getPayTime().getTime() + 1000 * 60 * 60L * 24 * 7)); session.update(record); //鍗曠墖璐拱鎴愬姛锛�7澶╂湁鏁堟湡锛� if (record.getState() == OrderRecord.STATE_PAY) { - orderLogger.info("璁㈠崟鍏ㄩ儴鏀粯鎴愬姛锛歩d-{}", id); + orderLogger.info("璁㈠崟鍏ㄩ儴鏀粯鎴愬姛锛歩d-{}", successForm.getId()); //璐拱鍗曠墖 pptvVipManager.buyVideo(record); - orderLogger.info("璐拱鍗曠墖鎴愬姛锛歩d-{}", id); + orderLogger.info("璐拱鍗曠墖鎴愬姛锛歩d-{}", successForm.getId()); } else { - orderLogger.info("璁㈠崟閮ㄥ垎鏀粯鎴愬姛锛歩d-{}", id); + orderLogger.info("璁㈠崟閮ㄥ垎鏀粯鎴愬姛锛歩d-{}", successForm.getId()); } } @@ -347,7 +358,7 @@ //鏀粯鎴愬姛 if (res.isSuccess() && "TRADE_SUCCESS".equalsIgnoreCase(res.getTradeStatus())) { try { - return paySuccess(id, OrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getTotalAmount()), new Date()); + return paySuccess(new OrderPaySuccessForm(id, OrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getTotalAmount()), new Date())); } catch (Exception e) { e.printStackTrace(); } @@ -364,7 +375,7 @@ try { WXPayOrderInfoV3 info = WXPayV3Util.getPayOrderInfo(VIPOrderUtil.getOutOrderNo(record.getOrderType(), id), VipUtil.getWXAPP()); if (info != null && info.getTrade_state().equalsIgnoreCase("SUCCESS")) { - paySuccess(id, record.getPayWay(), new BigDecimal(info.getAmount().getPayer_total()).divide(new BigDecimal(100), 2, RoundingMode.FLOOR), new Date()); + paySuccess(new OrderPaySuccessForm(id, record.getPayWay(), new BigDecimal(info.getAmount().getPayer_total()).divide(new BigDecimal(100), 2, RoundingMode.FLOOR), new Date())); return record; } } catch (Exception e) { @@ -377,6 +388,33 @@ } + @Transactional(rollbackFor = Exception.class) + @Override + public OrderRecord checkApplePay(String orderNo, String receipt) throws Exception { + OrderRecord orderRecord = vipOrderRecordDao.find(OrderRecord.class, orderNo); + if (orderRecord == null) { + throw new OrderException(1, "璁㈠崟鍙蜂笉瀛樺湪"); + } + + if (!StringUtil.isNullOrEmpty(orderRecord.getAppleTransactionId())) { + throw new OrderException(2, "璁㈠崟宸叉敮浠�"); + } + + IOSAPPBuyVerifyResult result = IOSPayVerifyUtil.buyAppVerify(receipt, "28ca52e358b94c4eba3de41dfa7dd023", false); + List<IOSAPPBuyVerifyResult.OrderInfo> orderInfoList = result.getLatestReceiptInfo(); + IOSAPPBuyVerifyResult.OrderInfo orderInfo = orderInfoList.get(0); + String productId = orderInfo.getProduct_id(); + VIPPrice vipPrice = vipPriceDao.selectByIOSProductId(productId); + if (vipPrice == null) + throw new Exception("鍟嗗搧ID涓嶅瓨鍦�"); + if (orderRecord.getType() != vipPrice.getType()) + throw new Exception("浠锋牸绫诲瀷涓嶅尮閰�"); +//String id, int payWay, BigDecimal payMoney, Date payTime, String appleTransactionId, String appleOriginalTransactionId + OrderPaySuccessForm successForm = new OrderPaySuccessForm(orderRecord.getId(), OrderRecord.PAY_WAY_IAPP, new BigDecimal(0), new Date(orderInfo.getPurchaseDateMs()), orderInfo.getTransactionId(), orderInfo.getOriginalTransactionId()); + paySuccess(successForm); + return null; + } + @Override public List<OrderRecord> listOrderRecord(String uid, OrderType orderType, Integer state, int page, int pageSize) { -- Gitblit v1.8.0