瀏覽代碼

shpify eu注册登录

linhaohong 10 月之前
父節點
當前提交
f527374b63
共有 3 個文件被更改,包括 93 次插入4 次删除
  1. 5 0
      Ansjer/config.py
  2. 84 2
      Controller/ShopifyController.py
  3. 4 2
      Object/ResponseObject.py

+ 5 - 0
Ansjer/config.py

@@ -574,3 +574,8 @@ APP_MAPPING = {
     'MacUser': 'MacUser'   # mac
     'MacUser': 'MacUser'   # mac
 
 
 }
 }
+
+SHOPIFY_CONFIG = {
+    "eu_token": "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",
+    "eu_multipass_secret": "f4863c9979d7ddd16e23817c0dfe7863"
+}

+ 84 - 2
Controller/ShopifyController.py

@@ -1,23 +1,33 @@
 from datetime import datetime
 from datetime import datetime
 
 
 import pytz
 import pytz
+import requests
 from django.db.models import Q
 from django.db.models import Q
 from django.views import View
 from django.views import View
 from Crypto.Cipher import AES
 from Crypto.Cipher import AES
 from Crypto.Util.Padding import pad
 from Crypto.Util.Padding import pad
-from django.contrib.auth.hashers import check_password
+from django.contrib.auth.hashers import check_password, make_password
+
+from Controller.CheckUserData import DataValid
 from Model.models import Device_User
 from Model.models import Device_User
+from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 import base64
 import base64
 import hmac
 import hmac
 import hashlib
 import hashlib
 import os
 import os
 import json
 import json
+from Ansjer.config import SHOPIFY_CONFIG
+
+from Service.CommonService import CommonService
 
 
 
 
 class ShopifyMultipass:
 class ShopifyMultipass:
     @staticmethod
     @staticmethod
     def generate_multipass_token(secret, customer_data):
     def generate_multipass_token(secret, customer_data):
+        """
+        使用指定的密钥对加密并签名JSON数据,返回Base64编码的Multipass令牌
+        """
         # 第一步:将客户数据转换为JSON格式
         # 第一步:将客户数据转换为JSON格式
         json_data = json.dumps(customer_data)
         json_data = json.dumps(customer_data)
 
 
@@ -40,6 +50,25 @@ class ShopifyMultipass:
 
 
         return multipass_token
         return multipass_token
 
 
+    @staticmethod
+    def search_customer_by_email(store_name, access_token, email):
+        # 设置请求URL
+        url = f"https://{store_name}.myshopify.com/admin/api/2024-10/customers/search.json"
+        params = {
+            "query": f"email:{email}"
+        }
+
+        # 设置请求头
+        headers = {
+            "X-Shopify-Access-Token": access_token,
+        }
+
+        # 发送GET请求
+        response = requests.get(url, headers=headers, params=params)
+
+        # 返回响应的JSON数据
+        return response.json()
+
 
 
 class ShopifyView(View):
 class ShopifyView(View):
     def get(self, request, *args, **kwargs):
     def get(self, request, *args, **kwargs):
@@ -59,6 +88,8 @@ class ShopifyView(View):
         response = ResponseObject(language)
         response = ResponseObject(language)
         if operation == 'shopifyLogin':  # APP查詢定制客户信息
         if operation == 'shopifyLogin':  # APP查詢定制客户信息
             return self.shopify_login(request_dict, response)
             return self.shopify_login(request_dict, response)
+        elif operation == 'shopifyRegister':  # APP注册定制客户信息
+            return self.shopify_register(request_dict, response)
         else:
         else:
             return response.json(414)
             return response.json(414)
 
 
@@ -71,6 +102,8 @@ class ShopifyView(View):
             return response.json(444)
             return response.json(444)
 
 
         user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
         user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
+        if not user_qs.exists():
+            return response.json(104)
         users = user_qs.values('role__rid', 'role__roleName', 'userID', 'NickName', 'username', 'userEmail',
         users = user_qs.values('role__rid', 'role__roleName', 'userID', 'NickName', 'username', 'userEmail',
                                'phone', 'password', 'userIconPath')[0]
                                'phone', 'password', 'userIconPath')[0]
 
 
@@ -90,10 +123,59 @@ class ShopifyView(View):
             "email": email,
             "email": email,
             "created_at": timestamp,
             "created_at": timestamp,
         }
         }
-        multipass_secret = "f4863c9979d7ddd16e23817c0dfe7863"  # multipass密钥
+        multipass_secret = SHOPIFY_CONFIG["eu_multipass_secret"]  # multipass密钥
         token = ShopifyMultipass.generate_multipass_token(multipass_secret, customer_data)
         token = ShopifyMultipass.generate_multipass_token(multipass_secret, customer_data)
 
 
         # 构造重定向URL
         # 构造重定向URL
         redirect_url = f"https://eu.zositech.com/account/login/multipass/{token}"
         redirect_url = f"https://eu.zositech.com/account/login/multipass/{token}"
 
 
         return response.json(0, redirect_url)
         return response.json(0, redirect_url)
+
+    @staticmethod
+    def shopify_register(request_dict, response):
+        email = request_dict.get("email", None)
+        password = request_dict.get("password", None)
+        authcode = request_dict.get("authCode", None)
+
+        if not all([email, password]):
+            return response.json(444)
+
+        if authcode is None:
+            # 查询是否在shopify有账号
+            access_token = SHOPIFY_CONFIG["eu_token"]
+            customer_data = ShopifyMultipass.search_customer_by_email("0ef557-2", access_token, email)
+            if not customer_data['customers']:
+                return response.json(10077)
+
+        # 邮箱验证
+        else:
+            reds = RedisObject()
+            identifyingCode = reds.get_data(key=email + '_identifyingCode')
+            # 判断验证码是否过期
+            if identifyingCode is False:
+                return response.json(120)
+            # 验证码是否正确
+            if authcode != identifyingCode:
+                return response.json(121)
+
+        # 注册
+        if Device_User.objects.filter(Q(username=email) | Q(userEmail=email)).exists():
+            return response.json(103)
+
+        # 创建用户
+        password = make_password(password)
+        new_userID = CommonService.getUserID(μs=False, setOTAID=True)
+        user_data = {
+            "username": email,
+            "NickName": email,
+            "userEmail": email,
+            "password": password,
+            "userID": new_userID,
+            "is_active": True,
+            "user_isValid": True,
+        }
+        Device_User.objects.create(**user_data)
+
+        return response.json(0)
+
+

+ 4 - 2
Object/ResponseObject.py

@@ -156,7 +156,8 @@ class ResponseObject(object):
             10073: 'The verification code has been sent, please pay attention to check',
             10073: 'The verification code has been sent, please pay attention to check',
             10074: 'Task queue processing, please try again later',
             10074: 'Task queue processing, please try again later',
             10075: 'Email subscription failed',
             10075: 'Email subscription failed',
-            10076: 'Failed to add, please contact customer service'
+            10076: 'Failed to add, please contact customer service',
+            10077: 'Shopify account not exists!'
         }
         }
         data_cn = {
         data_cn = {
             0: '成功',
             0: '成功',
@@ -299,7 +300,8 @@ class ResponseObject(object):
             10073: '验证码已发送,请注意查收',
             10073: '验证码已发送,请注意查收',
             10074: '任务队列处理中,请稍后再试',
             10074: '任务队列处理中,请稍后再试',
             10075: '邮件订阅失败',
             10075: '邮件订阅失败',
-            10076: '添加失败,请联系客服'
+            10076: '添加失败,请联系客服',
+            10077: 'shopify账号不存在'
         }
         }
 
 
         msg = data_cn if self.lang == 'cn' or self.lang == 'zh-Hans' or self.lang == 'zh-Hant' else data_en
         msg = data_cn if self.lang == 'cn' or self.lang == 'zh-Hans' or self.lang == 'zh-Hant' else data_en