zhangdongming 2 rokov pred
rodič
commit
325dd54604

+ 11 - 5
Ansjer/config.py

@@ -79,13 +79,12 @@ OSS_STS_ACCESS_SECRET = '71uIjpsqVOmF7DAITRyRuc259jHOjO'
 OSS_ROLE_ARN = 'acs:ram::1901342792446414:role/stsoss'
 
 # aws api key
-AWS_ACCESS_KEY_ID = ['AKIA2MMWBR4DSFG67DTG', 'AKIA2E67UIMD45Y3HL53']  #0国内, 1国外
+AWS_ACCESS_KEY_ID = ['AKIA2MMWBR4DSFG67DTG', 'AKIA2E67UIMD45Y3HL53']  # 0国内, 1国外
 AWS_SECRET_ACCESS_KEY = ['aI9gxcAKPmiGgPy9axrtFKzjYGbvpuytEX4xWweL', 'ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw']
 AWS_ARN = ['arn:aws-cn:s3', 'arn:aws:s3']
 
-
 # 尚云服务器CRCKey
-CRCKey = {'AUS': 'CRCKey', 'ACN': 'CRCKey'}   # {平台名:CRCKey值}
+CRCKey = {'AUS': 'CRCKey', 'ACN': 'CRCKey'}  # {平台名:CRCKey值}
 
 # 各个服务器域名
 SERVER_DOMAIN_US = 'http://www.dvema.com/'
@@ -414,7 +413,7 @@ APNS_CONFIG = {
     'com.ansjer.accloud': {
         'pem_path': 'AnsjerPush/file/apns_pem/accloud-dev.pem',
     },
-    'com.ansjer.customizedc':{
+    'com.ansjer.customizedc': {
         'pem_path': 'AnsjerPush/file/apns_pem/customizedc.pem',
     },
     'com.ansjer.customizede': {
@@ -472,4 +471,11 @@ unicomUserName = 'zh-zhasjdz'
 # 登录密码,如无请联系客户经理
 unicomPassword = 'XoROL1vCl5@_'
 # 回调签名验证加密密匙,请向开发人员索取
-unicomPushKey = 'NVVDQMBSOJTXA'
+unicomPushKey = 'NVVDQMBSOJTXA'
+
+# 五兴域名
+WX_TECH_URL = 'http://www.wxkjwlw.com'
+# 五兴接口APP KEY
+WX_TECH_APP_KEY = 'PHNSIzLG9Ciyla3aiOuBuN17U0qk5mM4'
+# 五兴接口密钥
+TWX_TECH_SECRET = '9477ace7e28f4d3fabae63a786d53d81'

+ 2 - 0
Ansjer/server_urls/unicom_url.py

@@ -10,10 +10,12 @@ from django.urls import re_path
 
 from Controller.UnicomCombo import UnicomComboController, UnicomComboPayNotifyController, UnicomComboTaskController
 from AdminController import UnicomManageController
+from Controller.UnicomCombo.WXTechController import WXTechController
 
 urlpatterns = [
     re_path(r'^api/(?P<operation>.*)$', UnicomComboController.UnicomComboView.as_view()),
     re_path(r'^wap/pay/(?P<operation>.*)$', UnicomComboPayNotifyController.UnicomComboPayNotifyView.as_view()),
     re_path(r'^combo/cron/(?P<operation>.*)$', UnicomComboTaskController.UnicomComboTaskView.as_view()),
     re_path(r'^manage/(?P<operation>.*)$',UnicomManageController.UnicomManageControllerView.as_view()),
+    re_path(r'^open/wxtech/(?P<operation>.*)$', WXTechController.SmartSocketView.as_view()),
 ]

+ 70 - 0
Controller/UnicomCombo/WXTechController.py

@@ -0,0 +1,70 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : WXTechController.py
+@Time    : 2023/5/6 16:40
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+from django.http import QueryDict
+from django.views import View
+
+from Ansjer.config import LOGGER
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+from Object.WXTechObject import WXTechObject
+
+
+class WXTechController(View):
+    class SmartSocketView(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):
+            token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
+            lang = request_dict.get('lang', token.lang)
+            response = ResponseObject(lang)
+            if token.code != 0:
+                return response.json(token.code)
+            if operation == 'getCardsInfo':
+                return self.get_cards_info(request_dict, response)
+
+        @classmethod
+        def get_cards_info(cls, request_dict, response):
+            """
+            五兴单卡获取信息
+            """
+            try:
+                iccid = request_dict.get('iccid', None)
+                operator = int(request_dict.get('operator', 3))
+                LOGGER.info('*****WXTechController.get_cards_info:iccid:{},operator:{}'.format(iccid, operator))
+                if not iccid:
+                    return response.json(444)
+                data = {'iccid': iccid, 'operator': operator}
+                wx_tech = WXTechObject()
+                return response.json(0, wx_tech.get_cards_info(**data))
+            except Exception as e:
+                LOGGER.info('*****WXTechController.get_cards_info:errLine:{}, errMsg:{}'
+                            .format(e.__traceback__.tb_lineno, repr(e)))
+                return response.json(500, repr(e))

+ 67 - 0
Object/WXTechObject.py

@@ -0,0 +1,67 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : WXTechObject.py
+@Time    : 2023/5/6 15:28
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+import hashlib
+import json
+import random
+import time
+
+import requests
+
+from Ansjer.config import WX_TECH_URL, WX_TECH_APP_KEY, TWX_TECH_SECRET
+from Object.UnicomObject import UnicomObjeect
+
+
+class WXTechObject:
+    def __init__(self):
+        self.headers = {'content-type': 'application/json;charset=utf-8'}
+
+    @staticmethod
+    def getSign(secret, **data):
+        dict_2 = dict(sorted(data.items(), key=lambda item: item[0], reverse=False))
+        data_list = []
+        for item in dict_2.items():
+            if item[0] and item[1]:
+                data_list.append("{}={}".format(item[0], item[1]))
+        sign_param = '&'.join(data_list)
+        push_key = '&secret={}'.format(secret)
+        param = sign_param + push_key
+        return hashlib.sha1(param.encode("utf-8")).hexdigest().upper()
+
+    @staticmethod
+    def get_system_params():
+        """
+        请求接口必传系统参数
+        """
+        return {
+            'appkey': WX_TECH_APP_KEY,
+            'nonce': int(''.join(str(random.choice(range(10))) for _ in range(5))),
+            'timestamp': int(time.time()),
+        }
+
+    def get_cards_info(self, **params):
+        """
+        根据卡号,获取单卡信息及流量使用信息
+        @param params: iccid、operator
+        @return: 卡信息
+        """
+        url = WX_TECH_URL + '/api/v2/card/getCardsInfo'
+        # 系统参数
+        data = WXTechObject().get_system_params()
+        params = dict(data, **params)
+        # 合并参数后进行升序加密得到sign
+        sign = WXTechObject.getSign(TWX_TECH_SECRET, **params)
+        params['sign'] = sign
+        response = requests.post(url, data=json.dumps(params), headers=self.headers)
+        return UnicomObjeect().get_text_dict(response)
+
+
+if __name__ == '__main__':
+    pass
+    # data = {'iccid': '8986112128003439900', 'operator': 3}
+    # print(WXTechObject().get_cards_info(**data))