Commit 7cdf31fe by Aeolus

Merge branch 'aeolus'

parents 60911711 75818ace
......@@ -24,6 +24,7 @@ class Config:
JWT_SECRET = SECRET_KEY
TENCENT_REDIS_URL = os.getenv("TENCENT_REDIS_URL")
MAX_CONTENT_LENGTH = 16 * 1024 * 1024
# SQLALCHEMY_ECHO = True
@staticmethod
def init_app(app):
......
......@@ -200,6 +200,7 @@ class Machine(Base):
updated_at = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
command_time = Column(INTEGER(1), nullable=False, server_default=text("'1'"))
discounts_id = Column(INTEGER(11), nullable=False, server_default=text("'0'"), comment="折扣活动")
business_id = Column(INTEGER(11), nullable=False, server_default=text("'0'"), comment="商户号")
class MachineProduction(Base):
......@@ -338,6 +339,7 @@ class Rent(Base):
expire_handle = Column(TINYINT(3), nullable=False, server_default=text("'0'"), comment='是否做过期处理')
prepay_id = Column(VARCHAR(191), comment='微信支付prepay_id')
over_time = Column(TIMESTAMP, comment='订单完结时间')
business_id = Column(INTEGER(11), nullable=False, server_default=text("'0'"), comment="商户号")
created_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP"))
updated_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
......@@ -347,26 +349,50 @@ class RentDetail(Base):
id = Column(INTEGER(10), primary_key=True, unique=True)
rent_no = Column(String(40, 'utf8mb4_unicode_ci'), nullable=False, comment='订单编号')
user_id = Column(INTEGER(10), nullable=False, index=True, comment='用户id')
user_id = Column(INTEGER(10), nullable=False, comment='用户id')
machine_no = Column(String(20, 'utf8mb4_unicode_ci'), nullable=False, comment='机柜id')
hatch_no = Column(TINYINT(3), nullable=False, comment='机柜仓口号')
production_id = Column(INTEGER(10), nullable=False, comment='商品id')
total = Column(INTEGER(10), server_default=text("'0'"), comment='实收金额')
rent_count = Column(TINYINT(3), nullable=False, server_default=text("'0'"))
refund_total = Column(INTEGER(10), server_default=text("'0'"))
refund_count = Column(INTEGER(10), server_default=text("'0'"))
is_take = Column(TINYINT(3), nullable=False, server_default=text("'0'"), comment='是否取货')
name = Column(String(100, 'utf8mb4_unicode_ci'), nullable=False, comment='商品名称')
business_id = Column(INTEGER(11), nullable=False, server_default=text("'0'"))
status = Column(TINYINT(3), nullable=False, server_default=text("'1'"), comment='1正常 2删除')
production_id = Column(INTEGER(10), nullable=False, comment='商品id')
production_name = Column(String(100, 'utf8mb4_unicode_ci'), nullable=False, comment='商品名称')
title = Column(String(200, 'utf8mb4_unicode_ci'), nullable=False, comment='商品标题')
brand_id = Column(INTEGER(10), nullable=False, comment='品牌ID')
brand_name = Column(String(100, 'utf8mb4_unicode_ci'), nullable=False, comment='商品名称')
production_type_id = Column(INTEGER(10), nullable=False, comment='分类ID')
production_type_name = Column(String(200, 'utf8mb4_unicode_ci'), nullable=False, comment='商品标题')
price = Column(INTEGER(10), nullable=False, comment='价格')
rent_count = Column(INTEGER(10), nullable=False, comment='数量')
original_price = Column(INTEGER(10), nullable=False, comment='商品原价')
img = Column(String(200, 'utf8mb4_unicode_ci'))
tags = Column(String(255, 'utf8mb4_unicode_ci'), comment='商品标签')
content = Column(Text(collation='utf8mb4_unicode_ci'), comment='商品内容')
summary = Column(Text(collation='utf8mb4_unicode_ci'), comment='商品描述')
status = Column(TINYINT(3), nullable=False, server_default=text("'1'"), comment='1正常 -1删除')
created_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP"))
updated_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
weight = Column(INTEGER(10), server_default=text("'0'"), comment='重量')
weight_unit = Column(String(10, 'utf8mb4_unicode_ci'), server_default=text("'g'"), comment='重量单位')
expiration_date = Column(INTEGER(10), server_default=text("'0'"), comment='保质期')
expiration_date_unit = Column(String(10, 'utf8mb4_unicode_ci'), server_default=text("'月'"), comment='保质期单位')
is_expiration_date = Column(TINYINT(1), server_default=text("'0'"), comment='是否有保质期')
weight_error = Column(INTEGER(10), server_default=text("'0'"), comment='重量误差')
class RentRefund(Base):
__tablename__ = 'rent_refund'
id = Column(INTEGER(10), primary_key=True)
user_id = Column(INTEGER(10), nullable=False, index=True, comment='用户id')
refund_no = Column(String(191, 'utf8mb4_unicode_ci'), nullable=False)
rent_no = Column(String(191, 'utf8mb4_unicode_ci'), nullable=False)
rent_detail_id = Column(INTEGER(10), nullable=False)
total = Column(INTEGER(10), nullable=False)
comment = Column(Text(collation='utf8mb4_unicode_ci'))
cause = Column(String(191, 'utf8mb4_unicode_ci'))
class SalePlan(Base):
......
......@@ -83,7 +83,6 @@ def create_rent():
Hatch.left_count >= 1).order_by(func.random()).first()
if not open_hatch:
print("....")
return jsonify(HATCH_NOT_EXIST_ERROR)
break
......@@ -94,6 +93,7 @@ def create_rent():
rent.user_id = g.user.id
rent.place_id = machine.place_id
rent.total = total_fee
rent.real_total = total_fee
rent.add_time = datetime.datetime.now()
rent.is_pay = 1
rent.pay_time = datetime.datetime.now()
......@@ -106,13 +106,14 @@ def create_rent():
rent_detail.machine_no = rent.machine_no
rent_detail.hatch_no = open_hatch.hatch_no
rent_detail.production_id = open_hatch.production_id
rent_detail.name = open_hatch.production_name
rent_detail.production_name = open_hatch.production_name
rent_detail.title = open_hatch.title
rent_detail.brand_id = open_hatch.brand_id
rent_detail.brand_name = open_hatch.brand_name
rent_detail.production_type_id = open_hatch.production_type_id
rent_detail.production_type_name = open_hatch.production_type_name
rent_detail.price = 0
rent_detail.total = 0
rent_detail.rent_count = 1
rent_detail.img = open_hatch.img
rent_detail.tags = open_hatch.tags
......@@ -212,7 +213,6 @@ def wx_pay_callback():
logger.info(xml_data)
logger.info(callback_data)
attach = re.sub('\'', '\"', callback_data["attach"])
print(attach)
rent_data = json.loads(attach)
platform = rent_data["platform"]
machine_no = rent_data["machine_no"]
......@@ -262,13 +262,14 @@ def wx_pay_callback():
rent_detail.machine_no = rent.machine_no
rent_detail.hatch_no = i.hatch_no
rent_detail.production_id = i.production_id
rent_detail.name = i.production_name
rent_detail.production_name = i.production_name
rent_detail.title = i.title
rent_detail.brand_id = i.brand_id
rent_detail.brand_name = i.brand_name
rent_detail.production_type_id = i.production_type_id
rent_detail.production_type_name = i.production_type_name
rent_detail.price = i.price * open_hatchs[str(i.hatch_no)]
rent_detail.price = i.price
rent_detail.total = i.price * open_hatchs[str(i.hatch_no)]
rent_detail.rent_count = open_hatchs[str(i.hatch_no)]
rent_detail.img = i.img
rent_detail.tags = i.tags
......
......@@ -18,6 +18,7 @@ from myapps.pc_management.api.file_protal import file_route
from myapps.pc_management.api.production_portal import production_route
from myapps.pc_management.api.hatch_portal import hatch_route
from myapps.pc_management.api.business_portal import business_route
from myapps.pc_management.api.rent_portal import rent_route
def register_sukang_blueprint(app: Flask):
......@@ -29,3 +30,4 @@ def register_sukang_blueprint(app: Flask):
app.register_blueprint(production_route, url_prefix=prefix + "/production")
app.register_blueprint(hatch_route, url_prefix=prefix + "/hatch")
app.register_blueprint(business_route, url_prefix=prefix + "/business")
app.register_blueprint(rent_route, url_prefix=prefix + "/rent")
......@@ -183,6 +183,13 @@ def get_account_detail():
"comment": admin_info.comment
}
business_list = db.session.query(Business).join(AdminBusiness, Business.id == AdminBusiness.business_id,
).filter(Business.status == 1,
AdminBusiness.user_id == admin_info.id,
AdminBusiness.status == 1).all()
user_info["business_list"] = []
for i in business_list:
user_info["business_list"].append({"business_id": i.id, "business_name": i.business_name})
return BaseResponse(data=user_info)
......@@ -207,21 +214,25 @@ def edit_user():
if old_phone == g.user.phone:
admin_info = g.user
if level:
admin_info.level = int(level)
else:
admin_info = AdminAccount.query.filter(AdminAccount.phone == old_phone,
AdminAccount.level > g.user.level,
AdminAccount.parent_id == g.user.id
).first()
if not admin_info:
return BaseResponse(**ACCOUNT_NOT_EXISTS_ERROR)
admin_info.user_name = user_name
admin_info.phone = new_phone
admin_info.status = status
admin_info.comment = comment
result = AdminService.get_admin_account_list(phone=old_phone)
if result["total_count"] != 1:
return BaseResponse(**ACCOUNT_NOT_EXISTS_ERROR)
admin = json2obj(result["list"][0])
admin_info = AdminAccount.query.filter_by(id=admin.id).first()
if not admin_info:
return BaseResponse(**ACCOUNT_NOT_EXISTS_ERROR)
if level and level > g.user.level:
admin_info.level = level
if status:
admin_info.status = status
if comment:
admin_info.comment = comment
if user_name:
admin_info.user_name = user_name
if new_phone:
admin_info.phone = new_phone
if password:
admin_info.password = password
......@@ -230,7 +241,7 @@ def edit_user():
business_ids = json_data.get("business_ids", [])
if business_ids:
AdminService.add_or_edit_admin_business(account, business_ids)
AdminService.add_or_edit_admin_business(admin_info, business_ids)
return BaseResponse()
......@@ -241,8 +252,11 @@ def delete_user():
if not phone:
return BaseResponse(**PHONE_NOT_NULL_ERROR)
admin_info = AdminAccount.query.filter(AdminAccount.phone == phone,
AdminAccount.level > g.user.level).first()
result = AdminService.get_admin_account_list(phone=phone)
if result["total_count"] != 1:
return BaseResponse(**ACCOUNT_NOT_EXISTS_ERROR)
admin = json2obj(result["list"][0])
admin_info = AdminAccount.query.filter_by(id=admin.id).first()
if not admin_info:
return BaseResponse(**ACCOUNT_NOT_EXISTS_ERROR)
......
......@@ -36,10 +36,15 @@ def run_business_list():
admin = g.user
select_sql = "select business.business_name,business.status, business.id "
count_sql = "select count(business.id) as total_count"
from_sql = """ from business where business.id in (select business_id from admin_business where
admin_business.user_id = {} and admin_business.status = 1) """.format(admin.id)
from_sql = """ from business """
where_sql = " "
if g.user.level == 1:
where_sql = " where 0=0 "
else:
where_sql = """ where business.id in (
select business_id from admin_business where
admin_business.user_id = {} and admin_business.status = 1
)""".format(admin.id)
if keyword:
where_sql += """ and CONCAT(business.business_name) LIKE '%{keyword}%' """.format(keyword=keyword)
......@@ -57,7 +62,7 @@ def run_business_list():
return_data = []
for info in result:
return_data.append({"business_name": info.place_name, "business_id": info.id, "status": info.status})
return_data.append({"business_name": info.business_name, "business_id": info.id, "status": info.status})
return BaseResponse({"list": return_data, "page": page, "pageSize": page_size, "total_count": total_count})
......@@ -118,6 +123,6 @@ def get_business_detail():
business_model = Business.query.filter_by(id=business_id).first()
if business_model:
return BaseResponse(data={"business_name": business_model.business_name,
"status": business_model.status, })
"status": business_model.status, "business_id": business_id})
else:
return jsonify(NO_BUSINESS_ERROR)
......@@ -33,7 +33,6 @@ def run_upload_img():
if filetype and filetype in ALLOWED_EXTENSIONS: # 后缀格式必须是bmp结尾
uid = uuid.uuid4() # 生成随机名称
save_file_name = str(uid) + "." + filetype # 拼接名称
print(os.path.join(img_file_path, filename))
file.save(os.path.join(img_file_path, save_file_name)) # 保存文件
return BaseResponse(data={"filename": save_file_name})
......
......@@ -66,7 +66,6 @@ def run_hatch_list():
return BaseResponse(data={"list": [], "page": page, "pageSize": page_size, "total_count": 0})
else:
total_count = count_result.total_count
print(select_sql + from_sql + where_sql + order_sql + limit_sql)
result = db.session.execute(select_sql + from_sql + where_sql + order_sql + limit_sql).fetchall()
return_data = []
......
......@@ -14,9 +14,11 @@ from flask import Blueprint, g, request, jsonify
from config.commen_config import DISCOUNTS_TYPES
from models.base_model import db
from models.models import AdminMachine, Machine, AdminAccount
from utils.error_code import MACHINE_NOT_EXIST_ERROR, ACCOUNT_NOT_EXISTS_ERROR
from models.models import AdminMachine, Machine, AdminAccount, AdminBusiness
from service.admin_service import AdminService
from utils.error_code import MACHINE_NOT_EXIST_ERROR, ACCOUNT_NOT_EXISTS_ERROR, ADMIN_BUSINESS_NOT_EXIST
from utils.my_response import BaseResponse
from utils.mytools import json2obj
logger = logging.getLogger(__name__)
......@@ -30,17 +32,19 @@ def run_machine_list():
:return:
"""
json_data = request.get_json()
page = json_data.get("page", None)
page_size = json_data.get("pageSize", None)
page = json_data.get("page", 1)
page_size = json_data.get("pageSize", 10)
keyword = json_data.get("keyword", None)
admin = g.user
select_sql = """select machine.id, machine.machine_no, machine.device_id, machine.qrcode_no,machine.status,
machine.mac, machine.power, machine.hatch_number, machine.type,machine.place_id,
place.place_name, machine.discounts_id
place.place_name, machine.discounts_id, machine.business_id,business.business_name
"""
count_sql = "select count(machine.id) as total_count"
from_sql = """ from machine left join place on machine.place_id = place.id
from_sql = """ from machine
left join place on machine.place_id = place.id
left join business on machine.business_id = business.id
where machine.machine_no in ( select machine_no from admin_machine where
admin_machine.user_id = {user_id} and admin_machine.status = 1)
""".format(user_id=admin.id)
......@@ -60,7 +64,6 @@ def run_machine_list():
return BaseResponse(data={"list": [], "page": page, "pageSize": page_size, "total_count": 0})
else:
total_count = count_result.total_count
print(select_sql + from_sql + where_sql + order_sql + limit_sql)
result = db.session.execute(select_sql + from_sql + where_sql + order_sql + limit_sql).fetchall()
return_data = []
......@@ -71,6 +74,7 @@ def run_machine_list():
"status": info.status, "place_id": info.place_id,
"discounts_id": info.discounts_id,
"discounts_name": DISCOUNTS_TYPES.get(int(info.discounts_id), "无此优惠"),
"business_id": info.business_id, "business_name": info.business_name
})
return BaseResponse({"list": return_data, "page": page, "pageSize": page_size, "total_count": total_count})
......@@ -145,7 +149,8 @@ def run_edit_machine():
machine_model.device_id = device_id
if qrcode_no:
machine_model.qrcode_no = qrcode_no
if mac: machine_model.mac = mac
if mac:
machine_model.mac = mac
if power:
machine_model.power = power
if place_id:
......@@ -178,11 +183,13 @@ def get_machine_detail():
admin = g.user
select_sql = """select machine.id, machine.machine_no, machine.device_id, machine.qrcode_no,machine.status,
machine.mac, machine.power, machine.hatch_number, machine.type,machine.place_id,
place.place_name, machine.discounts_id
place.place_name, machine.discounts_id,machine.business_id,business.business_name
"""
from_sql = """ from machine left join place on machine.place_id = place.id
where machine.machine_no in ( select machine_no from admin_machine where
admin_machine.user_id = {user_id} and admin_machine.status = 1)
from_sql = """ from machine
left join place on machine.place_id = place.id
left join business on machine.business_id = business.id
where machine.machine_no in ( select machine_no from admin_machine where
admin_machine.user_id = {user_id} and admin_machine.status = 1)
""".format(user_id=admin.id)
where_sql = " and machine.machine_no = {}".format(machine_no)
......@@ -197,7 +204,7 @@ def get_machine_detail():
"type": info.type, "status": info.status, "place_id": info.place_id,
"discounts_id": info.discounts_id,
"discounts_name": DISCOUNTS_TYPES.get(int(info.discounts_id), "无此优惠"),
"business_id": info.business_id, "business_name": info.business_name
})
......@@ -210,26 +217,34 @@ def run_distribute_machine():
json_data = request.get_json()
machine_nos = json_data["machine_nos"]
user_id = json_data["user_id"]
business_id = json_data["business_id"]
user = AdminAccount.query.filter_by(id=user_id, parent_id=g.user.id, status=1).first()
if not user:
result = AdminService.get_admin_account_list(user_id=user_id)
if result["total_count"] != 1:
return jsonify(ACCOUNT_NOT_EXISTS_ERROR)
admin_machines = AdminMachine.query.filter_by(user_id=g.user.id, status=1).all()
if not admin_machines:
return jsonify(MACHINE_NOT_EXIST_ERROR)
admin_machine_nos = [x.machine_no for x in admin_machines]
right_machine_nos = list(set(machine_nos).intersection(set(admin_machine_nos)))
if not right_machine_nos:
return jsonify(MACHINE_NOT_EXIST_ERROR)
insert_sql = " insert into admin_machine (user_id, user_no, machine_no) values "
for i in right_machine_nos:
insert_sql += "('{}','{}','{}'),".format(user.id, user.user_no, i)
insert_sql = insert_sql[:-1]
insert_sql += " ON DUPLICATE KEY UPDATE status = 1"
print(insert_sql)
db.session.execute(insert_sql)
db.session.commit()
return BaseResponse(data={"add_machine_nos": right_machine_nos})
admin_info = json2obj(result["list"][0])
admin_business = AdminBusiness.query.filter_by(user_id=g.user.id, business_id=business_id, status=1).first()
if not admin_business:
return jsonify(ADMIN_BUSINESS_NOT_EXIST)
return_machine_no = []
for i in machine_nos:
admin_machines = AdminMachine.query.filter_by(user_id=g.user.id, machine_no=i, status=1).first()
if not admin_machines:
continue
machine = Machine.query.filter_by(machine_no=i).first()
if not machine:
continue
insert_sql = " insert into admin_machine (user_id, user_no, machine_no) values "
insert_sql += "('{}','{}','{}'),".format(admin_info.id, admin_info.user_no, i)
insert_sql = insert_sql[:-1]
insert_sql += " ON DUPLICATE KEY UPDATE status = 1"
db.session.execute(insert_sql)
if admin_info.level == 4:
machine.business_id = business_id
db.session.commit()
return_machine_no.append(i)
return BaseResponse(data={"add_machine_nos": return_machine_no})
......@@ -62,7 +62,7 @@ class AdminService(object):
db.session.commit()
@staticmethod
def get_admin_account_list(phone=None, keyword=None, page=None, page_size=None):
def get_admin_account_list(user_id=None, phone=None, keyword=None, page=None, page_size=None):
"""
:return:
......@@ -87,8 +87,10 @@ class AdminService(object):
and admin_account.level > {level}
""".format(user_id=g.user.id, level=g.user.level)
if user_id:
where_sql += " and admin_account.id = '{id}'".format(id=user_id)
if phone:
where_sql += " and phone = {phone}".format(phone=phone)
where_sql += " and phone = '{phone}'".format(phone=phone)
if keyword:
where_sql += """
......
import base64import jsonfrom Crypto.Cipher import AES class WXBizDataCrypt: def __init__(self, appId, sessionKey): self.appId = appId self.sessionKey = sessionKey def decrypt(self, encryptedData, iv): sessionKey = base64.decodebytes(bytes(self.sessionKey, encoding='utf8')) encryptedData = base64.decodebytes(bytes(encryptedData, encoding='utf8')) iv = base64.decodebytes(bytes(iv, encoding='utf8')) cipher = AES.new(sessionKey, AES.MODE_CBC, iv) des_str = cipher.decrypt(encryptedData) print("==================================") print(des_str) des_str = self._unpad(des_str) print(des_str) des_str = str(des_str,encoding='utf-8') decrypted = json.loads(des_str) if decrypted['watermark']['appid'] != self.appId: raise Exception('Invalid Buffer') return decrypted def _unpad(self, s): return s[:-ord(s[len(s) - 1:])] if __name__ == '__main__': appId = 'wx3185fb4a3633beb0' sessionKey='S7CMDfC6jXJKSaWKanG8oQ==' encryptedData='E7LZhvK7mOcaYsv9xcAfsBN9eSbzFh9FyMtFJ0zsFB0M62zRJ0cosZWksUujUR5WYUmNoIfIJnTIF8gRskxxbFU3fm5X7z4ChZecMSaFM65aEK1suRUD1U0ubB7mOwBBlY4ftdPT5kRwWgXKVkM4VAkYGN8A4fjWE93yGtjzxXs9dypQkCLSNWs6Kw5USEzjhtDZnptVy+lHF5fTXRuzoCstW2Cto4YI3G9hmnS64QuWjRteSqIgh8GN1zEPN0dROJjaWBjqraBCt/BfMsk4HBeL4PA75K8WdqVgKGfQ7/rnmPFOsNXWfajx9jl7XcrfoPaaPL1DmIJ1BlQne2GuLFtzZ3O4/8cdVQ9Lb0N/3kFAzjgzNFNLSYj2VNctmWyLdWi8hH90yslvrODIhMzIsuux2GIAfp0rQd/iVIVvtd7PXBOCe5iZ7aaqD0b0mLF4CmsuBpl8Eh20ZHkYw2SqO0x9uFrS/gy1vwtkmsTpcDw=' iv = 'DQcmcXyQkU+VKqb2mKmasQ==' pc = WXBizDataCrypt(appId, sessionKey) pc.decrypt(encryptedData, iv)#
\ No newline at end of file
import base64import jsonfrom Crypto.Cipher import AES class WXBizDataCrypt: def __init__(self, appId, sessionKey): self.appId = appId self.sessionKey = sessionKey def decrypt(self, encryptedData, iv): sessionKey = base64.decodebytes(bytes(self.sessionKey, encoding='utf8')) encryptedData = base64.decodebytes(bytes(encryptedData, encoding='utf8')) iv = base64.decodebytes(bytes(iv, encoding='utf8')) cipher = AES.new(sessionKey, AES.MODE_CBC, iv) des_str = cipher.decrypt(encryptedData) des_str = self._unpad(des_str) des_str = str(des_str, encoding='utf-8') decrypted = json.loads(des_str) if decrypted['watermark']['appid'] != self.appId: raise Exception('Invalid Buffer') return decrypted def _unpad(self, s): return s[:-ord(s[len(s) - 1:])] if __name__ == '__main__': appId = 'wx3185fb4a3633beb0' sessionKey = 'S7CMDfC6jXJKSaWKanG8oQ==' encryptedData = 'E7LZhvK7mOcaYsv9xcAfsBN9eSbzFh9FyMtFJ0zsFB0M62zRJ0cosZWksUujUR5WYUmNoIfIJnTIF8gRskxxbFU3fm5X7z4ChZecMSaFM65aEK1suRUD1U0ubB7mOwBBlY4ftdPT5kRwWgXKVkM4VAkYGN8A4fjWE93yGtjzxXs9dypQkCLSNWs6Kw5USEzjhtDZnptVy+lHF5fTXRuzoCstW2Cto4YI3G9hmnS64QuWjRteSqIgh8GN1zEPN0dROJjaWBjqraBCt/BfMsk4HBeL4PA75K8WdqVgKGfQ7/rnmPFOsNXWfajx9jl7XcrfoPaaPL1DmIJ1BlQne2GuLFtzZ3O4/8cdVQ9Lb0N/3kFAzjgzNFNLSYj2VNctmWyLdWi8hH90yslvrODIhMzIsuux2GIAfp0rQd/iVIVvtd7PXBOCe5iZ7aaqD0b0mLF4CmsuBpl8Eh20ZHkYw2SqO0x9uFrS/gy1vwtkmsTpcDw=' iv = 'DQcmcXyQkU+VKqb2mKmasQ==' pc = WXBizDataCrypt(appId, sessionKey) pc.decrypt(encryptedData, iv)#
\ No newline at end of file
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment