Browse Source

完善苹果内购认证交易

locky 1 year ago
parent
commit
4c6bc926f2
1 changed files with 125 additions and 8 deletions
  1. 125 8
      Controller/InAppPurchaseController.py

+ 125 - 8
Controller/InAppPurchaseController.py

@@ -7,7 +7,11 @@ import itunesiap
 from django.db.models import Q
 from django.views import View
 
-from Model.models import Order_Model, Store_Meal, Device_Info, UID_Bucket
+from Controller.CheckUserData import DataValid
+from Model.models import Order_Model, Store_Meal, Device_Info, UID_Bucket, Unused_Uid_Meal, AiService, Device_User, \
+    SysMsgModel
+from Object.AWS.S3Email import S3Email
+from Object.AliSmsObject import AliSmsObject
 from Object.RedisObject import RedisObject
 from Service.CommonService import CommonService
 
@@ -32,8 +36,8 @@ class InAppPurchaseView(View):
         if operation == 'verifyTransaction':  # 获取商品列表
             return self.verify_transaction(user_id, request_dict, response)
 
-    @staticmethod
-    def verify_transaction(user_id, request_dict, response):
+    @classmethod
+    def verify_transaction(cls, user_id, request_dict, response):
         """
         认证交易
         @param user_id: 用户id
@@ -75,10 +79,6 @@ class InAppPurchaseView(View):
             pay_type = 4
             now_time = int(time.time())
 
-            # 查询设备是否已开过云存
-            uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).\
-                values('id', 'bucket_id', 'bucket__region', 'endTime', 'use_status')
-
             store_qs = Store_Meal.objects.filter(
                 product_id=product_id, lang__lang=lang, is_show=0).\
                 values(
@@ -88,9 +88,12 @@ class InAppPurchaseView(View):
                 return response.json(173)
 
             rank_id = store_qs[0]['id']
+            bucket_id = store_qs[0]['bucket_id']
             currency = store_qs[0]['currency']
             price = store_qs[0]['price']
             is_ai = store_qs[0]['is_ai']
+            expire = store_qs[0]['expire']
+            end_time = CommonService.calcMonthLater(expire)
             content = store_qs[0]['lang__content']
             commodity_code = store_qs[0]['commodity_code']
             commodity_type = store_qs[0]['commodity_type']
@@ -102,14 +105,128 @@ class InAppPurchaseView(View):
             else:
                 store_meal_name = '未知套餐'
 
+            # 查询设备是否已开过云存
+            use_flag = True
+            uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).\
+                values('id', 'bucket_id', 'bucket__region', 'endTime', 'use_status')
+            if uid_bucket_qs.exists():
+                uid_bucket = uid_bucket_qs.first()
+                uid_bucket_id = uid_bucket['id']
+                # 叠加相同套餐的过期时间
+                if uid_bucket['use_status'] == 1 and uid_bucket['endTime'] > now_time:
+                    Unused_Uid_Meal.objects.create(
+                        uid=uid, channel=channel, addTime=now_time, order_id=order_id, expire=expire, is_ai=is_ai,
+                        bucket_id=bucket_id)
+                    UID_Bucket.objects.filter(id=uid_bucket_id).update(has_unused=1)
+                    use_flag = False
+                # 更新套餐的过期时间
+                else:
+                    UID_Bucket.objects.filter(id=uid_bucket_id).update(
+                        channel=channel, bucket_id=bucket_id, endTime=end_time, updateTime=now_time, use_status=1,
+                        orderId=order_id)
+            else:
+                uid_bucket = UID_Bucket.objects.create(
+                    uid=uid, channel=channel, bucket_id=bucket_id, endTime=end_time, use_status=1, orderId=order_id,
+                    addTime=now_time, updateTime=now_time)
+                uid_bucket_id = uid_bucket.id
+
+            # 开通AI服务
+            if is_ai and use_flag:
+                ai_service = AiService.objects.filter(uid=uid, channel=channel)
+                # 有正在使用的套餐,叠加套餐时间,否则创建
+                if ai_service.exists():
+                    ai_service.update(updTime=now_time, use_status=1, orders_id=order_id, endTime=end_time)
+                else:
+                    AiService.objects.create(
+                        uid=uid, channel=channel, detect_status=1, use_status=1, orders_id=order_id,
+                        addTime=now_time, updTime=now_time, endTime=end_time)
+
             Order_Model.objects.create(
                 orderID=order_id, UID=uid, channel=channel, userID_id=user_id, desc=content, payType=pay_type,
                 payTime=now_time, price=price, currency=currency, addTime=now_time, updTime=now_time,
                 order_type=order_type, commodity_code=commodity_code, commodity_type=commodity_type, rank_id=rank_id,
-                ai_rank_id=1, status=1, store_meal_name=store_meal_name)
+                ai_rank_id=1, status=1, create_vod=1, store_meal_name=store_meal_name, uid_bucket_id=uid_bucket_id)
+
+            # 发送云存开通信息
+            date_time = time.strftime("%Y-%m-%d", time.localtime())
+            # 如果存在序列号,消息提示用序列号
+            device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
+            serial_number = device_info_qs[0]['serial_number']
+            device_type = device_info_qs[0]['Type']
+            if serial_number:
+                device_name = CommonService.get_full_serial_number(uid, serial_number, device_type)
+            else:
+                device_name = uid
+            sys_msg_text_list = [
+                '温馨提示:尊敬的客户,您的{}设备在{}已成功购买云存套餐'.format(device_name, date_time),
+                'Dear customer,you already subscribed the cloud storage package successfully for device {} on '.
+                format(device_name, time.strftime('%b %dth,%Y', time.localtime()))]
+            cls.do_vod_msg_notice(uid, user_id, lang, sys_msg_text_list)
+
             redis_obj.del_data(redis_key)
             return response.json(0)
         except Exception as e:
             redis_obj.del_data(redis_key)
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
+    @classmethod
+    def do_vod_msg_notice(cls, uid, user_id, lang, sys_msg_text_list):
+        """
+        发送云存开通信息
+        @param uid: uid
+        @param user_id: 用户id
+        @param lang: 语言
+        @param sys_msg_text_list: 消息列表
+        @return: response
+        """
+        if lang == 'cn':
+            sys_msg_text = sys_msg_text_list[0]
+        else:
+            sys_msg_text = sys_msg_text_list[1]
+        now_time = int(time.time())
+        create_data = {
+            'userID_id': user_id,
+            'msg': sys_msg_text,
+            'addTime': now_time,
+            'updTime': now_time,
+            'uid': uid,
+            'eventType': 0
+        }
+        SysMsgModel.objects.create(**create_data)
+
+        # 不接收邮件用户
+        if user_id == '167015836969813800138000':
+            return
+
+        user_qs = Device_User.objects.filter(userID=user_id)
+        if user_qs.exists():
+            user = user_qs.first()
+            username = user.username
+            data_valid = DataValid()
+            if data_valid.email_validate(username):
+                S3Email().faEmail(sys_msg_text, username)
+            elif data_valid.mobile_validate(username):
+                # 如果存在序列号,消息提示用序列号
+                device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
+                if device_info_qs.exists():
+                    serial_number = device_info_qs[0]['serial_number']
+                    device_type = device_info_qs[0]['Type']
+                    if serial_number:
+                        device_name = CommonService.get_full_serial_number(uid, serial_number, device_type)
+                    else:
+                        device_name = uid
+                    params = '{"devname":"%s","submittime":"%s"}' % (
+                        device_name, time.strftime("%Y-%m-%d", time.localtime()))
+                    cls.send_message(username, params, 'SMS_219738485')
+
+    @staticmethod
+    def send_message(phone, params, temp_msg):
+        """
+        发送手机消息
+        @param phone: 用户名
+        @param params: 消息参数
+        @param temp_msg: sms码
+        """
+        sign_ms = '周视'
+        ali_sms = AliSmsObject()
+        ali_sms.send_code_sms_cloud(phone=phone, params=params, sign_name=sign_ms, temp_msg=temp_msg)