├── README.md ├── script ├── account.txt ├── share.py ├── test.py └── tokens.py └── web ├── readme.md ├── 固定base_url ├── app.py └── index.html └── 自定base_url ├── app.py └── index.html /README.md: -------------------------------------------------------------------------------- 1 | # Pandora-Token-Get-and-Use 2 | 3 | ## 注意!所有涉及到登录的操作,消耗pandora额度为1:100 请小心使用! 4 | 5 | ## script版 (可获取access token,session token,share token。可自动生成tokens.json) 6 | 7 | 本项目需要配合 Pandora_Next 使用,请确保您的Pandora_Next已经配置妥当 8 | 9 | tokens.py 利用账号密码获取时效更长的Session Token,并自动生成pandora_next所需的tokens.json (第二次生成时,需要清空tokens.json中的内容) 10 | 11 | 需要创建account.txt 并按照 账号,密码 的格式一行一个 12 | 13 | share.py 用于获取access token和share token;配合定时计划运行可实现 share token 长期有效 14 | 15 | test.py 是调用示例脚本 16 | 17 | ## web版(可获取access token,session_token,share token) 18 | 19 | ### Demo(自定URL版): https://auth.vnbest.eu.org/ 20 | 21 | ### 部署指南 22 | 23 | #### 安装 Flask 24 | 25 | 如果您还没有安装 Flask,您可以使用 pip 来安装它。在您的终端或命令提示符中运行以下命令: 26 | 27 | ```bash 28 | pip install flask 29 | ``` 30 | 31 | #### 保存代码 32 | 33 | 将 app.py和index.html上传至服务器(或下载至本地) 34 | 35 | #### 运行 Flask 应用 36 | 37 | 在包含 app.py 的目录中,运行以下命令来启动 Flask 应用: 38 | 39 | ```bash 40 | python3 app.py 41 | ``` 42 | 43 | #### 访问应用 44 | 45 | 在浏览器中打开 http://127.0.0.1:5000 。您应该能看到您的前端页面,并能够提交表单以获取 tokens。 46 | 47 | 48 | -------------------------------------------------------------------------------- /script/account.txt: -------------------------------------------------------------------------------- 1 | test1@test.com,test123 2 | test2@test.com,test123 3 | test3@test.com,test123 4 | -------------------------------------------------------------------------------- /script/share.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | # 设置PandoraNext代理API的基本URL和你的API前缀 4 | base_url = "http://your-pandoranext-deployment.com/" 5 | 6 | # 账号密码 7 | username = "xxxx" 8 | password = "xxxx" 9 | 10 | # 登录以获取 access token 11 | def get_access_token(base_url, username, password): 12 | login_url = f"{base_url}/api/auth/login" 13 | data = { 14 | "username": username, 15 | "password": password 16 | } 17 | response = requests.post(login_url, data=data) 18 | if response.status_code == 200: 19 | return response.json().get('access_token') 20 | else: 21 | raise Exception("Failed to log in and get access token.") 22 | 23 | # 使用 access token 获取 share token 24 | def get_share_token(base_url, access_token): 25 | register_url = f"{base_url}/api/token/register" 26 | headers = { 27 | "Authorization": f"Bearer {access_token}" 28 | } 29 | data = { 30 | "unique_name": "123321", 31 | "access_token": access_token, 32 | "expires_in": 0 33 | 34 | # 更多参数根据您的需求进行配置 35 | } 36 | response = requests.post(register_url, data=data) 37 | if response.status_code == 200: 38 | return response.json().get('token_key') 39 | else: 40 | raise Exception("Failed to get share token.") 41 | 42 | # 执行脚本 43 | try: 44 | access_token = get_access_token(base_url, username, password) 45 | print("Access Token:", access_token) 46 | 47 | share_token = get_share_token(base_url, access_token) 48 | print("Share Token:", share_token) 49 | except Exception as e: 50 | print(str(e)) 51 | -------------------------------------------------------------------------------- /script/test.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | # 设置PandoraNext代理API的基本URL和你的API前缀 4 | base_url = "https://xxxx/xxxx" 5 | access_token = "fk-xxxx" 6 | 7 | # 创建请求头部 8 | headers = { 9 | "Authorization": f"Bearer {access_token}" 10 | } 11 | 12 | # 设置聊天内容 13 | payload = { 14 | "model": "gpt-3.5-turbo", # 根据需要选择模型 15 | "messages": [{"role": "system", "content": "You are a helpful assistant."}, 16 | {"role": "user", "content": "Can you help me with my homework?"}] 17 | } 18 | 19 | # 发送请求到Chat to API接口 20 | response = requests.post(f"{base_url}/v1/chat/completions", json=payload, headers=headers) 21 | 22 | # 检查响应 23 | if response.status_code == 200: 24 | print("Response from API:", response.json()) 25 | else: 26 | print("Error:", response.status_code, response.text) 27 | 28 | -------------------------------------------------------------------------------- /script/tokens.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | # 设置PandoraNext代理API的基本URL和你的API前缀 4 | base_url = "https://pandora/prefix" 5 | 6 | # 登录以获取 access token 7 | def get_access_token(base_url, username, password): 8 | login_url = f"{base_url}/api/auth/login" 9 | data = { 10 | "username": username, 11 | "password": password 12 | } 13 | response = requests.post(login_url, data=data) 14 | if response.status_code == 200: 15 | return response.json().get('session_token') 16 | else: 17 | raise Exception("Failed to log in and get access token.") 18 | 19 | # 读取账号密码 20 | def read_accounts(filename): 21 | accounts = [] 22 | with open(filename, 'r') as file: 23 | for line in file: 24 | if ',' in line: 25 | username, password = line.strip().split(',') 26 | accounts.append((username, password)) 27 | return accounts 28 | 29 | # 将tokens写入文件 30 | def write_tokens(filename, tokens): 31 | with open(filename, 'w') as file: 32 | file.write("{\n") 33 | for idx, (key, token) in enumerate(tokens.items(), 1): 34 | file.write(f' "test-{idx}": {{\n') 35 | file.write(f' "token": "{token}",\n') 36 | file.write(f' "shared": true,\n') 37 | file.write(f' "show_user_info": true\n') 38 | file.write(' }' + (',\n' if idx < len(tokens) else '\n')) 39 | file.write("}\n") 40 | 41 | # 主程序 42 | try: 43 | accounts = read_accounts('account.txt') 44 | tokens = {} 45 | for idx, (username, password) in enumerate(accounts, 1): 46 | access_token = get_access_token(base_url, username, password) 47 | tokens[f'test-{idx}'] = access_token 48 | print(f"Access Token for {username}: {access_token}") 49 | 50 | write_tokens('tokens.json', tokens) 51 | 52 | except Exception as e: 53 | print(str(e)) 54 | -------------------------------------------------------------------------------- /web/readme.md: -------------------------------------------------------------------------------- 1 | ## 这里是web版本的部署,基于Flask 2 | 3 | ## Demo(自定URL版): https://auth.vnbest.eu.org/ 4 | 5 | # 部署指南 6 | 7 | ## 安装 Flask 8 | 9 | 如果您还没有安装 Flask,您可以使用 pip 来安装它。在您的终端或命令提示符中运行以下命令: 10 | 11 | ```bash 12 | pip install flask 13 | ``` 14 | 15 | ## 保存代码 16 | 17 | 将 app.py和index.html上传至服务器(或下载至本地) 18 | 19 | ## 运行 Flask 应用 20 | 21 | 在包含 app.py 的目录中,运行以下命令来启动 Flask 应用: 22 | 23 | ```bash 24 | python3 app.py 25 | ``` 26 | 27 | ## 访问应用 28 | 29 | 在浏览器中打开 http://127.0.0.1:5000 。您应该能看到您的前端页面,并能够提交表单以获取 tokens。 30 | 31 | -------------------------------------------------------------------------------- /web/固定base_url/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, request, render_template_string 2 | import requests 3 | 4 | app = Flask(__name__) 5 | 6 | # 替换为您的 PandoraNext 部署的 URL 7 | base_url = "http(s)://pandora_url/prefix" 8 | 9 | @app.route('/') 10 | def index(): 11 | with open('index.html', 'r') as file: 12 | return file.read() 13 | 14 | @app.route('/get_tokens', methods=['POST']) 15 | def get_tokens(): 16 | username = request.form['username'] 17 | password = request.form['password'] 18 | 19 | # 登录以获取 access token 20 | login_url = f"{base_url}/api/auth/login" 21 | data = {"username": username, "password": password} 22 | response = requests.post(login_url, data=data) 23 | if response.status_code == 200: 24 | access_token = response.json().get('access_token') 25 | session_token = response.json().get('session_token') 26 | 27 | # 使用 access token 获取 share token 28 | register_url = f"{base_url}/api/token/register" 29 | headers = {"Authorization": f"Bearer {access_token}"} 30 | data = {"unique_name": "123321", "access_token": access_token} 31 | response = requests.post(register_url, headers=headers, data=data) 32 | if response.status_code == 200: 33 | share_token = response.json().get('token_key') 34 | return f"Access Token: {access_token}


Session Token: {session_token}


Share Token: {share_token}" 35 | else: 36 | return "Failed to get share token." 37 | else: 38 | return "Failed to log in and get access token." 39 | 40 | if __name__ == '__main__': 41 | app.run(host='0.0.0.0') 42 | -------------------------------------------------------------------------------- /web/固定base_url/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 登录 6 | 7 | 8 | 13 | 14 | 15 |
16 |

欢迎

17 |

18 | 本服务可帮助用户获取 ChatGPT 的 Access Token和Share Token。
19 | 如果你没有ChatGPT账号,本服务将无法使用。
20 | 获取到的 Access Token 有效期为10天。
21 | 不支持Google / Microsoft 等第三方登录。 22 |

23 |
24 |
25 | 26 | 27 |
28 |
29 | 30 | 31 |
32 | 33 |
34 |
35 | 36 | 37 | -------------------------------------------------------------------------------- /web/自定base_url/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, request 2 | import requests 3 | 4 | app = Flask(__name__) 5 | 6 | @app.route('/') 7 | def index(): 8 | with open('index.html', 'r') as file: 9 | return file.read() 10 | 11 | @app.route('/get_tokens', methods=['POST']) 12 | def get_tokens(): 13 | base_url = request.form['base_url'] 14 | username = request.form['username'] 15 | password = request.form['password'] 16 | 17 | # 登录以获取 access token 18 | login_url = f"{base_url}/api/auth/login" 19 | data = {"username": username, "password": password} 20 | response = requests.post(login_url, data=data) 21 | if response.status_code == 200: 22 | access_token = response.json().get('access_token') 23 | session_token = response.json().get('session_token') 24 | 25 | # 使用 access token 获取 share token 26 | register_url = f"{base_url}/api/token/register" 27 | headers = {"Authorization": f"Bearer {access_token}"} 28 | data = {"unique_name": "unique_name_for_share_token", "access_token": access_token} 29 | response = requests.post(register_url, headers=headers, data=data) 30 | if response.status_code == 200: 31 | share_token = response.json().get('token_key') 32 | return f"Access Token: {access_token}


Session Token: {session_token}


Share Token: {share_token}" 33 | else: 34 | return "Failed to get share token." 35 | else: 36 | return "Failed to log in and get access token." 37 | 38 | if __name__ == '__main__': 39 | app.run(host='0.0.0.0') 40 | -------------------------------------------------------------------------------- /web/自定base_url/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 获取 Tokens 7 | 8 | 9 | 14 | 15 | 16 |
17 |

欢迎

18 |
19 |
20 | 21 | 22 |
23 |
24 | 25 | 26 |
27 |
28 | 29 | 30 |
31 | 32 |
33 | 34 | 35 | 36 | 37 | 38 | 在GitHub访问本项目 39 | 40 |
41 | 42 | 43 | --------------------------------------------------------------------------------