Эх сурвалжийг харах

设备版本新增自动升级标识,新增邮件订阅接口

zhangdongming 1 жил өмнө
parent
commit
7e17e9ce6a

+ 2 - 2
Controller/OTAEquipment.py

@@ -489,10 +489,10 @@ def getNewVerInterface(request):
     if tko.code != 0:
         return response.json(tko.code)
     if lang == 'zh-Hans' or lang == 'cn':
-        equipmentValid = Equipment_Version.objects.filter(code=code, status=1, lang='zh-Hans').order_by(
+        equipmentValid = Equipment_Version.objects.filter(code=code, auto_update=False, status=1, lang='zh-Hans').order_by(
             '-data_joined')
     else:
-        equipmentValid = Equipment_Version.objects.filter(code=code, status=1, lang='en').order_by(
+        equipmentValid = Equipment_Version.objects.filter(code=code, auto_update=False, status=1, lang='en').order_by(
             '-data_joined')
     logger = logging.getLogger('info')
     if equipmentValid.exists():

+ 72 - 0
Controller/UserDevice/UserSubscriptionController.py

@@ -0,0 +1,72 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : UserSubscriptionController.py
+@Time    : 2024/5/21 16:31
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+from django.http import QueryDict
+from django.views import View
+
+from Model.models import Device_User
+from Object.ResponseObject import ResponseObject
+from Object.YotpoCoreObject import YotpoCoreObject
+from Ansjer.config import LOGGER
+
+
+class UserSubscriptionControllerView(View):
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, request, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, request, operation)
+
+    def delete(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        delete = QueryDict(request.body)
+        if not delete:
+            delete = request.GET
+        return self.validation(delete, request, operation)
+
+    def put(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        put = QueryDict(request.body)
+        return self.validation(put, request, operation)
+
+    def validation(self, request_dict, request, operation):
+        response = ResponseObject('cn')
+        if operation == 'subscription':
+            return self.subscription(request_dict, response)
+
+    @staticmethod
+    def subscription(request_dict, response):
+        user_id = request_dict.get('userId', '')
+        if not user_id:
+            return response.json(444)
+        user_qs = Device_User.objects.filter(userID=user_id).values('username', 'userEmail')
+        if not user_qs.exists():
+            return response.json(703)
+
+        yotpo = YotpoCoreObject()
+
+        email = '1920098158@qq.com'
+        customer = {
+            "email": email, "first_name": "test", "last_name": "22",
+            'address': {
+                "country_code": 'GB',
+            }
+        }
+
+        result = yotpo.creat_and_update_customers(customer)
+
+        list_id = 8589406
+        subscribers_result = yotpo.create_subscribers(customer, list_id)
+        print()
+        LOGGER.info(f'创建客户:{result},订阅:{subscribers_result}')

+ 17 - 0
Model/models.py

@@ -1778,6 +1778,7 @@ class Equipment_Version(models.Model):
     max_ver = models.CharField(default='', max_length=16, verbose_name='最大版本号')
     is_popup = models.SmallIntegerField(default=0, verbose_name=u'是否弹窗')
     data_json = models.JSONField(null=True, verbose_name='版本号附加数据,关联国家或者指定UID,{uid_list:[],country_list:[]}')
+    auto_update = models.BooleanField(blank=True, default=False, verbose_name=u'是否自动升级')
 
     def __str__(self):
         return self.eid
@@ -4907,3 +4908,19 @@ class CNRegion(models.Model):
     class Meta:
         db_table = 'tb_cn_region'
         verbose_name = '国内省市区区域表'
+
+
+class UserEmailSubscriptions(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='主键')
+    user_id = models.CharField(default='', max_length=32, verbose_name='用户id')
+    email = models.CharField(default='', max_length=32, verbose_name='邮箱')
+    phone = models.CharField(default='', max_length=32, verbose_name='手机号')
+    status = models.SmallIntegerField(default=0, verbose_name='订阅状态,0未订阅,1订阅')
+    list_id = models.CharField(default='', max_length=32, verbose_name='订阅列表id')
+    sub_result = models.JSONField(null=True, verbose_name='订阅结果')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
+
+    class Meta:
+        db_table = 'user_email_subscriptions'
+        verbose_name = '用户邮件订阅记录表'

+ 236 - 0
Object/YotpoCoreObject.py

@@ -0,0 +1,236 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : YotpoCoreObject.py
+@Time    : 2024/5/17 9:36
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+# -*- encoding: utf-8 -*-
+"""
+@File    : EDM.py
+@Time    : 2024/5/16 11:16
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+import datetime
+import json
+
+import requests
+
+STORE_ID = "LIKwYlx6uonKqN91fXiGFb4FHqVLpvMUdGNU5Zf9"
+YOTPO_URL = f"https://api.yotpo.com/core/v3/stores/{STORE_ID}/"
+secret = 'isb8EOQs8bkjrksLHN73o3HIkrhoW539IXhULfdh'
+
+
+class YotpoCoreObject:
+
+    def get_token(self):
+        url = YOTPO_URL + "access_tokens"
+
+        payload = {'secret': secret}
+        headers = {
+            "accept": "application/json",
+            "Content-Type": "application/json"
+        }
+
+        response = requests.post(url, json=payload, headers=headers)
+        assert response.status_code == 200
+
+        token = json.loads(response.text).get("access_token")
+        print("token:", token)
+        return token
+
+    def creat_and_update_customers(self, customers):
+        """
+        创建和更新用户
+        """
+        url = YOTPO_URL + "customers"
+        yotpo_token = self.get_token()
+        headers = {
+            "accept": "application/json",
+            "X-Yotpo-Token": yotpo_token,
+            "Content-Type": "application/json"
+        }
+
+        payload = {
+            "customer": customers
+        }
+
+        response = requests.patch(url, json=payload, headers=headers)
+        assert response.status_code == 200
+        return response.text
+
+    def get_customers_list(self, email):
+        """
+        查用户信息
+        """
+        url = YOTPO_URL + f"customers?email={email}"
+        yotpo_token = self.get_token()
+        headers = {
+            "accept": "application/json",
+            "X-Yotpo-Token": yotpo_token,
+            "Content-Type": "application/json"
+        }
+        response = requests.get(url, headers=headers)
+        assert response.status_code == 200
+        return response.text
+
+    def create_subscribers(self, customer_params, list_id):
+        """
+        创建订阅
+        """
+        url = f"https://api.yotpo.com/messaging/v3/stores/{STORE_ID}/subscribers"
+        payload = {
+            "customer": customer_params,
+            "channels": {
+                "email": {
+                    "marketing": {
+                        "consent": "subscribed",
+                        "list_id": list_id,
+                        "source": "post_purchase_popup"
+                    },
+                    "suppression": {
+                        "suppress_email": True,
+                        "suppression_reason": "soft_bounce",
+                        "timestamp": datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")
+                    }
+                },
+            },
+            "suppress_welcome_messages": True
+        }
+        headers = {
+            "accept": "application/json",
+            "content-type": "application/json",
+            "X-Yotpo-Token": self.get_token()
+        }
+        response = requests.post(url, json=payload, headers=headers)
+        assert response.status_code == 200
+        return response.text
+
+    def close_subscribers(self, email, list_id):
+        """
+        关闭订阅
+        """
+        url = f"https://api.yotpo.com/messaging/v3/stores/{STORE_ID}/subscribers"
+
+        payload = {
+            "customer": {
+                "email": email,
+            },
+            # "channels": {
+            #     "email": {"marketing": {"consent": None}},
+            #     "suppress_welcome_messages": True
+            # },
+            "channels": {
+                "email": {"marketing": {
+                    "consent": "unsubscribed",
+                    "list_id": list_id,
+                    "source": "post_purchase_popup"
+                }}
+            },
+            "list_id": list_id
+        }
+        headers = {
+            "accept": "application/json",
+            "content-type": "application/json",
+            "X-Yotpo-Token": self.get_token()
+        }
+
+        response = requests.post(url, json=payload, headers=headers)
+
+        print(response.text)
+
+    def get_all_list_ids(self):
+        """
+        获取所有list_id
+        """
+        authentication_token = self.get_token()
+
+        url = f"https://api.yotpo.com/core/v3/stores/{STORE_ID}/lists"
+        headers = {
+            "accept": "application/json",
+            "content-type": "application/json",
+            "X-Yotpo-Token": authentication_token
+        }
+        response = requests.get(url, headers=headers)
+        response_data = response.json()
+
+        if response.status_code == 200:
+            print(response_data)
+        else:
+            print(f"Error: {response_data['message']}")
+            return []
+
+    def check_api(self):
+
+        """
+        注册成功后 进行yotpo api创建用户,并订阅邮件通知
+        @return:
+        """
+        email = '1920098158@qq.com'
+        customer = {
+            "email": email, "first_name": "test", "last_name": "22",
+            'address': {
+                "country_code": 'GB',
+            }
+        }
+
+        result = self.creat_and_update_customers(customer)
+        print(result)
+
+        list_id = 8589406
+        subscribers_result = self.create_subscribers(customer, list_id)
+        print(subscribers_result)
+
+        # customer_result = self.get_customers_list(email)
+        # customer = json.loads(customer_result)
+        # if customer['customers']:
+        #     external_id = customer['customers'][0]['external_id']
+        #
+        #     country_code = 'LU'
+        #     customer = {
+        #         "external_id": external_id,
+        #         "address": {
+        #             "country_code": country_code,
+        #         }
+        #     }
+        #     self.creat_and_update_customers(customer)
+        print('success')
+
+
+if __name__ == "__main__":
+    pass
+    # YotpoCoreObject().check_api()
+    # 获取 token ok
+    # token = get_token()
+    # print(token)
+
+    # # # 创建用户 ok
+    # response = creat_and_update_customers()
+    # print(response)
+    #
+    # 检索用户 ok
+    # response = get_customers_list()
+    # print(response.text)
+
+    # 检索订阅 ok
+    # response = get_webhooks_subscriptions()
+    # print(response.text)
+
+    # 检索接口
+    # response = get_webhooks("webhooks/targets")
+    # print(response)
+
+    # 创建筛选器
+    # create_webhook_filters()
+    #
+    # 创建订阅
+    # create_subscribers()
+
+    # 关闭订阅
+    # YotpoCoreObject().close_subscribers('1920098158@qq.com', 8589406)
+
+    # 获取list
+    # get_all_list_ids()