Browse Source

支付模块 网页端和安卓端不共用同一条订单数据;微信安卓标志使用androidSign字段,不再使用androidSign2字段

songfuqiang 2 years ago
parent
commit
391a96a175

+ 5 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/MemberServiceImpl.java

@@ -331,6 +331,11 @@ public class MemberServiceImpl implements MemberService {
                 member.setSubscriberType(SubscriberTypeEnum.no.value());
                 membersMapper.updateByPrimaryKey(member);
             }
+        } else {
+            if(SubscriberTypeEnum.no.value().equals(member.getSubscriberType())) {
+                member.setSubscriberType(SubscriberTypeEnum.yes.value());
+                membersMapper.updateByPrimaryKey(member);
+            }
         }
         MemberInfoResp resp = new MemberInfoResp();
         resp.setMemberInfo(memberInfo);

+ 12 - 4
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/OrderServiceImpl.java

@@ -95,7 +95,15 @@ public class OrderServiceImpl implements OrderService {
     @Override
     public Orders findMemberUnPayedOrders(String memberId, Subscriptions subscription, String client){
         OrdersExample example = new OrdersExample();
-        example.createCriteria().andMemberIdEqualTo(memberId).andStatusEqualTo(OrdersStatusEnum.UNPAYED.value()).andPaymentEqualTo(subscription.getPayment()).andSubscriptionIdEqualTo(subscription.getId());
+        OrdersExample.Criteria criteria = example.createCriteria();
+        //如果是web端,则查询的pagePayUrl不为null;如果是安卓端,则查询的androidSign不为null。
+        if(ClientEnum.WEB.value().equals(client)) {
+            criteria.andPagePayUrlIsNotNull();
+        }else{
+            criteria.andAndroidSignIsNotNull();
+        }
+        criteria.andMemberIdEqualTo(memberId).andStatusEqualTo(OrdersStatusEnum.UNPAYED.value()).
+                andPaymentEqualTo(subscription.getPayment()).andSubscriptionIdEqualTo(subscription.getId());
         List<Orders> list  = ordersMapper.selectByExample(example);
         //订单如果不存在则插入,存在则返回
         if(CollectionUtils.isEmpty(list)) {
@@ -117,14 +125,14 @@ public class OrderServiceImpl implements OrderService {
             //更新价格
             Orders order = selectBySubId(subscription.getId());
             // 由于存在安卓端和web端,不能单纯的靠价格来判断是否更新,安卓端需要的是androidSign,web需要的是pagePayUrl
-//            if(order != null && !order.getPrice().equals(subscription.getPrice())) {
+            if(order != null && !order.getPrice().equals(subscription.getPrice())) {
                 order.setPrice(subscription.getPrice());
                 order.setCreatedAt(new Date());
                 order.setUpdatedAt(new Date());
                 //设置支付的url
                 setOrderPayUrlByPayment(subscription, order, client);
                 ordersMapper.updateByPrimaryKey(order);
-//            }
+            }
         }
         //如果微信url为空或者微信url超过两小时过期了,则重重新生成
         boolean wxCheckDateFlag = StringUtils.isEmpty(list.get(0).getQrcodeUrl()) || DateUtils.addHours(list.get(0).getUpdatedAt(),OrderConstant.WXPAY_EXPIRE_TIME,1).compareTo(new Date())<0;
@@ -159,7 +167,7 @@ public class OrderServiceImpl implements OrderService {
         if(PaymentEnum.WXPAY.value().equals(subscription.getPayment())){
             Map<String, String> resp = wxPayService.unifiedOrder(subject, order.getTradeNo(), order.getPrice(), client);
             order.setQrcodeUrl(resp.get(WXPayConstants.CODE_URL));
-            order.setAndroidSign2(JSON.toJSONString(resp));
+            order.setAndroidSign(JSON.toJSONString(resp));
         }
         if(PaymentEnum.ALIPAY.value().equals(subscription.getPayment())){
             // 调用阿里支付下单接口,web端返回支付url,android端返回androidSign

+ 2 - 2
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/SubscriptionServiceImpl.java

@@ -81,8 +81,8 @@ public class SubscriptionServiceImpl implements SubscriptionService {
         }else{
             WxAndroidSignVo wxAndroidSign = new WxAndroidSignVo();
 
-            String androidSign2 = order.getAndroidSign2();
-            Map map = JSON.parseObject(androidSign2, Map.class);
+            String androidSign = order.getAndroidSign();
+            Map map = JSON.parseObject(androidSign, Map.class);
             try {
                 // 调起支付接口签名返回给app端,和统一下单参数的签名不一样,因为参数不一样
                 Map<String, String> signMmap = new HashMap<>();