

当自己开发的应用给别人使用时,你是否遇到了以下问题:
如果你有以上问题,那么恭喜你,这篇文章给你提供了一站式解决方案。
本文介绍的工具都在我分享的应用市场里面
邀请链接:https://www.winrobot360.com/share/accede?inviteKey=81d25234-7f39-4e34-be58-05118992a736




该工具可以获取当前账号所开发的应用uuid和Mac地址,供下面的影机配置使用。



5.将 config.txt 添加到你开发的应用中的资源文件中;




2.插入第一条指令:插入代码段(Python),在第27行左右,将key的值改为你自己的密钥,注意保留两侧的英文双引号,代码如下:
import os
import re
import json
import uuid
from xbot import print, app
from cryptography.fernet import Fernet
def decrypt_data(key):
if isinstance(key, str):
key = key.encode('utf-8')
cipher = Fernet(key)
current_dir = os.path.dirname(os.path.abspath(__file__))
config_path = os.path.join(current_dir, 'resources', 'config.txt')
if os.path.isfile(config_path):
try:
with open(config_path, 'rb') as f:
data = f.read()
decrypt_text = cipher.decrypt(data).decode('utf-8')
decrypt_json = json.loads(decrypt_text)
return True, decrypt_json
except:
return False, '配置文件解密失败'
else:
return False, '配置文件缺失'
key = "改成你的密钥"
decrypt_result = decrypt_data(key)
if decrypt_result[0]:
app_config = decrypt_result[1]
# print(app_config)
if app_config['app']:
current_file_path = os.path.abspath(__file__)
current_app_id = re.search(r'.*?\\apps\\(.*?)\\xbot_robot', current_file_path).group(1)
if current_app_id not in app_config['app']:
app.dialog.show_message_box('提示', '该应用无权运行,请联系应用开发者', button='ok', timeout=-1)
exit(0)
if app_config['mac']:
mac = ':'.join(("%012X" % uuid.getnode())[i:i+2] for i in range(0, 12, 2))
if mac not in app_config['mac']:
app.dialog.show_message_box('提示', '该电脑无权运行,请联系应用开发者', button='ok', timeout=-1)
exit(0)
else:
app.dialog.show_message_box('提示', decrypt_result[1], button='ok', timeout=-1)
exit(0)

上面的方法虽然可以限制应用的使用范围和使用时间,但是每次更新使用范围都需要重新生成 config.txt 后进行分发,更新使用时间则需要重新使用影甲进行防护。
现在介绍一个更加灵活的用户管理方案:使用wps多维表格搭配AirScript脚本作为后端的用户管理系统。

该用户管理系统功能包含:
该用户管理系统简单易用:
"""
基于wps多维表格的用户管理系统
此package提供的用户注册登录、设置有效期、积分管理、绑定机器等功能, 需要与wps多维表格的AirScript配套使用。
作者: 大聪明RPA
QQ: 2414108420
接口:
- login(token, key, is_debug=False): 用户注册登录
* 参数: token (字符串): wps脚本令牌,不要泄露!!!
* 参数: key (字符串): 类似token的签名用的随机字符串,不要泄露!!!
* 参数: is_debug (布尔值): 默认False, 为True时会打印wps返回的结果
* 返回: (字典)
* 返回失败示例: {"success": False, "msg": "用户未激活"}
* 返回成功示例: {'success': True, 'mobile': '18800002222', 'expire_date': '2025-10-23 14:59', 'is_expire': True, 'usage_left': 10, 'is_same_mac': True, 'sign': 'j4n6aMKnZQe5YzvPtZoucJxXU8/XS3SN4YtJWVewK90=', 'password': '123654'}
* 返回参数: success (布尔值): True=成功, False=失败
* 返回参数: mobile (字符串): 手机号
* 返回参数: password (字符串): 密码
* 返回参数: usage_left (整数): 剩余积分
* 返回参数: expire_date (字符串): 有效期
* 返回参数: is_expire (布尔值): True=已过期, False=未过期
* 返回参数: is_same_mac (布尔值): True=注册账号时的机器与当前机器一致, False=注册账号时的机器不是当前机器
* 返回参数: sign (字符串): 校验用的签名,防止请求被篡改
- check(token, key, mobile, password, unchecked=1, is_debug=False): 积分扣除
* 参数: token (字符串): wps脚本令牌,不要泄露!!!
* 参数: key (字符串): 类似token的签名用的随机字符串,不要泄露!!!
* 参数: mobile (字符串): 手机号
* 参数: password (字符串): 密码
* 参数: unchecked (整数): 需要扣除的积分
* 参数: is_debug (布尔值): 默认False, 为True时会打印wps返回的结果
* 返回: (字典)
* 返回失败示例: {"success": False, "msg": "密码不正确"}
* 返回成功示例: {'success': True, 'mobile': '18800002222', 'expire_date': '2025-10-23 14:59', 'is_expire': True, 'usage_left': 10, 'is_same_mac': True, 'sign': 'j4n6aMKnZQe5YzvPtZoucJxXU8/XS3SN4YtJWVewK90=', 'password': '123654'}
* 返回参数: success (布尔值): True=成功, False=失败
* 返回参数: mobile (字符串): 手机号
* 返回参数: password (字符串): 密码
* 返回参数: usage_left (整数): 剩余积分
* 返回参数: expire_date (字符串): 有效期
* 返回参数: is_expire (布尔值): True=已过期, False=未过期
* 返回参数: is_same_mac (布尔值): True=注册账号时的机器与当前机器一致, False=注册账号时的机器不是当前机器
* 返回参数: sign (字符串): 校验用的签名,防止请求被篡改
* 备注:如果扣除积分失败,待扣除积分会记录在本地,下次登录时再扣除
编码版使用示例:
>>> from . import user
>>> print(user.__doc__)
>>> login_result = user.login('your_wps_token', 'your_sign_key')
>>> check_result = user.check('your_wps_token', 'your_sign_key', login_result['mobile'], login_result['password'], unchecked=2, )
可视化指令版使用示例参见影刀社区文章: https://www.yingdao.com/community/detaildiscuss?id=875299182009294848
版本历史:
- v1.0.0 (2025-10-11): 初始版本,包含用户注册登录和积分扣除功能
- v1.1.0 (2025-10-23): 返回参数中增加is_expire(是否过期)和is_same_mac(当前机器是否是注册机器)
"""