shawenguan 1 jaar geleden
bovenliggende
commit
fa409c2fca
2 gewijzigde bestanden met toevoegingen van 41 en 45 verwijderingen
  1. 34 45
      addons/elife/OfpayHelper.py
  2. 7 0
      addons/utils/Utils.py

+ 34 - 45
addons/elife/OfpayHelper.py

@@ -67,7 +67,6 @@ class OfpayHelper:
         "prizeId": "sku14117",
         "prizeName": "数据采集成功",
         "prizeAlias": "",
-        # 假设 'randomCode' 是字符串,你需要给这个变量赋予适当的值
         "prizeDesc": None,
         "prizeDescUrl": "https://mstatic.ofpay.com/marketing/upload/ca2ed3a05b2846b7909debf2df8e3495.png",
         "prizeBannerUrl": "https://mstatic.ofpay.com/marketing/upload/c4d1a0b94b50462eb0f040306a9badf4.png",
@@ -98,52 +97,21 @@ class OfpayHelper:
         "payStatus": "2",
         "discountPrice": "",
         "activityPrice": "",
-        # JSON 字符串需要解析为 Python 字典
-        "customerInfo": {
-            "device_id": "D29ED082-549A-4882-98FC-8BB881D1552B",
-            "loginType": "interactiveIGoChoose",
-            "gameAccount": "13430389115",
-            "city_code": "440100",
-            "cisno": "ZbHv0CEM2cGjx0DB9DXVJg==",
-            "isNewUser": "0",
-            "marketId": "M923156289016692736",
-            "city_name": "广州市",
-            "phone": "13430389115",
-            "fromEntry": "APP",
-            "currentTimeMillis": "1708910189982",
-            "userUuid": "Pfd6kjTSmjCfQ8boswe1PpAmfgZW0acz",
-            "cust_id": "Pfd6kjTSmjCfQ8boswe1PpAmfgZW0acz",
-            "invitationCode": "BGCKWC"
-        },
+        "customerInfo": "{\"device_id\":\"D29ED082-549A-4882-98FC-8BB881D1552B\",\"loginType\":\"interactiveIGoChoose\",\"gameAccount\":\"13430389115\",\"city_code\":\"440100\",\"cisno\":\"ZbHv0CEM2cGjx0DB9DXVJg==\",\"isNewUser\":\"0\",\"marketId\":\"M923156289016692736\",\"city_name\":\"广州市\",\"phone\":\"13430389115\",\"fromEntry\":\"APP\",\"currentTimeMillis\":\"1709515975349\",\"userUuid\":\"Pfd6kjTSmjCfQ8boswe1PpAmfgZW0acz\",\"cust_id\":\"Pfd6kjTSmjCfQ8boswe1PpAmfgZW0acz\",\"invitationCode\":\"BGCKWC\"}",
         "callbackOrder": "",
         "activityRechargeEffectStartTime": "",
         "activityRechargeEffectEndTime": "",
         "accountType": "",
         "payFlag": "1",
         "activityPayFlag": True,
-        # JSON 字符串需要解析为 Python 字典
-        "thirdInfo": {
-            "faceValue": "30.00",
-            "customGatewayId": "ZDY_ICBC_ZJWN",
-            "showSign": "1",
-            "xcxShowSign": "2",
-            "order": "28",
-            "toBPrice": "30.00",
-            "showPhone": "1",
-            "pointActivity": "HD0460132E7oLMG1mH",
-            "stockShowSign": "2"
-        },
+        "thirdInfo": "{\"faceValue\":\"20.00\",\"customGatewayId\":\"ZDY_ICBC_NJFH\",\"showSign\":\"1\",\"xcxShowSign\":\"2\",\"order\":\"24\",\"toBPrice\":\"19.20\",\"appId\":\"gh_58e6ebeaa1ea\",\"showFlag\":\"eCoffee-Tims\",\"showPhone\":\"1\",\"pointActivity\":\"HD046012y3VGiMMHzP\",\"stockShowSign\":\"2\"}",
         "vendorVoucher": "",
         "productUseMsg": "",
         "proof": "",
         "amount": 1,
         "parentActivityNo": "",
         "parentDetailId": "",
-        # JSON 字符串需要解析为 Python 字典
-        "subOrderExt": {
-            "orderStatus": "",
-            "payStatus": ""
-        },
+        "subOrderExt": "{\"orderStatus\":\"\",\"payStatus\":\"\"}",
         "logisticsNo": "",
         "company": "",
         "promoteId": "",
@@ -155,7 +123,11 @@ class OfpayHelper:
 
 
     def __init__(self):
-        self.domain = 'market-web.ofpay.com';
+        self.domain_name = 'market-web.ofpay.com';
+        self.host_ip = None;
+        ip_address = Utils.get_ip_address(self.domain_name);
+        if ip_address:
+            self.host_ip = ip_address;
         self.db_conn = None;
         self.connect_mysql();
 
@@ -184,18 +156,29 @@ class OfpayHelper:
                 break;
         self.db_conn = db_conn;
 
+    def check_host_pass(self, host):
+        if self.host_ip:
+            if host != self.host_ip and host != self.domain_name:
+                return False;
+        else:
+            if host != self.domain_name:
+                return False;
+        return True;
+
+
     def request(self, flow: http.HTTPFlow):
-        if flow.request.host != self.domain:
+        if not self.check_host_pass(flow.request.host):
             return;
         url = flow.request.url;
         path = flow.request.path;
         request = flow.request;
 
     def response(self, flow: http.HTTPFlow):
-        if flow.request.host != self.domain:
+        if not self.check_host_pass(flow.request.host):
             return;
         url = flow.request.url;
         path = flow.request.path;
+        print("###[OfpayHelper]path=%s"%path);
         if path.startswith('/h5/union/api/interactiveIGoChoose/orderList'):
             self.handle_orderlist(flow);
 
@@ -208,8 +191,15 @@ class OfpayHelper:
             return;
         account = None;
         try:
-            payload = jwt.decode(cookies['unionToken_interactiveIGoChoose'], verify=False);
-            info_str = payload.get('customerInfo');
+            jwt_str = cookies['unionToken_interactiveIGoChoose'];
+            # payload = jwt.decode(jwt_str, '', algorithms=['HS256'], verify=False, options={'verify_signature':False});
+            # info_str = payload.get('customerInfo');
+            # 不依赖库,简单方法解析
+            jwt_data = Utils.parse_jwt(jwt_str);
+            info_str = None;
+            if jwt_data:
+                payload = jwt_data['payload'];
+                info_str = payload['customerInfo'];
             if info_str:
                 customer_info = json.loads(info_str);
                 account = customer_info['phone'];
@@ -240,15 +230,14 @@ class OfpayHelper:
         if rsp_params['code'] == 'success':
             rsp_data = rsp_params['data'];
             rsp_data['list'].insert(0, simple_data);
-
-        response.set_text(json.dump(rsp_params));
+        response.set_text(json.dumps(rsp_params));
 
         update_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S');
         sql_query = f'''
-            CALL UpdateElifeAccountData(%s, %s, %s, %s, %s, %s, %s, %, NOW());
+            CALL UpdateElifeAccountData(%s, %s, %s, %s, %s, %s, %s, %s, %s);
         ''';
-        sql_params = (account, uuid, authorization, str(cookies), user_agent, market_id, event_visitor_id, capture_code , update_time);
+        sql_params = (account, uuid, authorization, repr(cookies), user_agent, market_id, event_visitor_id, capture_code , update_time);
         cursor = self.db_conn.cursor();
-
         cursor.execute(sql_query, sql_params);
+        self.db_conn.commit();
         cursor.close();

+ 7 - 0
addons/utils/Utils.py

@@ -1,6 +1,7 @@
 import json
 import base64
 import random
+import socket
 
 
 def base64url_decode(base64_str):
@@ -28,3 +29,9 @@ def generate_random_code(n):
     range_start = 10**(n-1)
     range_end = (10**n)-1
     return str(random.randint(range_start, range_end))
+
+def get_ip_address(domain):
+    try:
+        return socket.gethostbyname(domain)
+    except socket.gaierror as e:
+        print(f"无法解析域名 {domain}: {e}")