当前远程仓库只保留 第一版开源代码,用于学习、研究和基础二开。
第二版为收费版,已加入更多自动化能力和稳定性优化。为了避免被滥用,第二版不在公开仓库直接发布;如确有研究、测试或二开需求,可以通过 TG 交流群联系。
本仓库已同步上传 研究成果/ 目录,里面沉淀了协议逆向、接口流程、资产记录、更新日志等研究笔记。
有能力的大佬可以根据这些研究成果继续深度开发,例如:
- 对接更多接码平台;
- 优化设备画像和重试策略;
- 改造多线程 / 队列化运行;
- 补充更稳定的异常处理;
- 按自己的业务流程二开。
入口文档:研究成果/README.md
| 功能项 | 第一版(当前开源版) | 第二版(收费版) |
|---|---|---|
| 核心流程 | 纯协议注册 / 登录 / 设置 PIN | 注册 / 登录 / 设置 PIN + 更多自动化链路 |
| 入口方式 | 主要通过命令行参数运行 | 支持 .env 集中配置,命令更简单 |
| 接码平台 | 仅对接 SMSCloud | 支持 SMSCloud / SMSPool / SMSBower / manual 等模式 |
| 运行模式 | 单线程单号跑 | 增强重试策略,可按场景选择换设备或换号 |
| 设备画像 | 基础 fresh device tuple | 随机真实设备画像、设备池、固定/随机模式 |
| OTP 流程 | 注册 OTP + PIN 二次 OTP | OTP 轮询、复用订单、人工确认、更多超时处理 |
| 余额查询 | 不包含独立查询工具 | 支持 GoPay 账号余额查询和接码平台余额保护 |
| 支付链路 | 不包含 | 支持订阅订单支付 URL、Midtrans / Stripe Checkout 链路 |
| 支付 OTP | 不包含 | 支持 sms-order / sms-api / manual 等支付 OTP 模式 |
| overlap 模式 | 不包含 | 支持 PIN OTP 与支付 user-consent 联动实验模式 |
| 代理支持 | 基础 requests 行为 | GoPay 专用 HTTP/SOCKS 代理配置 |
| 日志 | 基础调试输出 | 精简日志 / 完整日志可切换 |
| 文档 | 基础 README | 完整 README + 启动命令大全 |
| 发布方式 | GitHub 免费开源 | 收费获取,避免滥用 |
有问题可以进 TG 交流群一起交流:@JNMHUB
L 站:https://linux.do/u/lijinmu
python3 android_gopay_2.10.0/protocol/pure_pin_only.py --pin 736294这个目录是一个纯 Python 协议脚本包,主要入口是 pure_pin_only.py。脚本会自动:
- 从 SMSCloud 接码平台购买印度尼西亚号码;
- 轮询短信 OTP;
- 完成注册 / 登录;
- 刷新登录态;
- 发起设置 PIN 的二次 OTP;
- 提交并设置新的 PIN;
- 将运行状态保存为 JSON。
pure_pin_only.py:推荐入口,只需要传入要设置的 PIN。full_pure_signup_pin.py:完整底层 runner,支持手动号码、复用订单、调试签名等高级参数。smscloud_client.py:SMSCloud 接码平台 API 封装。gopay_protocol.py:GoPay 协议、签名、设备指纹和请求封装。README_pure_signup_pin.md:旧版说明和历史验证记录。
需要 Python 3.10+,并安装依赖:
pip install requests cryptography在 Windows PowerShell 中进入项目目录:
cd C:\Users\jnmgp\Desktop\pure_pin_only_bundle_20260530_065956接码平台https://smscloud.sbs/sms接码平台使用的是 SMSCloud,KEY 参数名是 sms_key,读取优先级如下:
- 命令行参数
--sms-key,优先级最高; - 环境变量
SMSCLOUD_KEY; - 代码里的默认值
KEY_DEFAULT。
对应代码位置:
pure_pin_only.py
ap.add_argument("--sms-key", default=os.getenv("SMSCLOUD_KEY", KEY_DEFAULT))full_pure_signup_pin.py
KEY_DEFAULT = "..."
ap.add_argument("--sms-key", default=os.getenv("SMSCLOUD_KEY", KEY_DEFAULT))推荐使用环境变量,不要直接把自己的 KEY 写死到代码里:
$env:SMSCLOUD_KEY="你的_SMSCloud_API_KEY"
python .\pure_pin_only.py --pin 736294 --skip-waf-preflight也可以临时通过命令行传入:
python .\pure_pin_only.py --pin 736294 --sms-key "你的_SMSCloud_API_KEY" --skip-waf-preflight推荐命令:
$env:SMSCLOUD_KEY="你的_SMSCloud_API_KEY"
python .\pure_pin_only.py --pin 736294 --skip-waf-preflight参数说明:
--pin 736294:要设置的新 PIN,必填。--sms-key:SMSCloud 接码平台 KEY;也可以用环境变量SMSCLOUD_KEY。--attempts 8:失败、超时、号码被占用时最多换号重试次数,默认 8。--otp-timeout 240:每个号码等待 OTP 的秒数,默认 240。--quiet:减少 HTTP 调试输出。--dry-run:只构造首包,不买号、不完整执行。--skip-waf-preflight:跳过预探测。当前精简包里没有probe_initiate_waf.py,所以建议加上这个参数。
运行后会在日志中看到 SMSCloud 余额、订单、手机号、OTP 和最终状态文件路径。
新增手机号日志格式如下:
[phone] acquired input=628xxxxxxxxxx normalized=+628xxxxxxxxxx
状态 JSON 默认写入:
.\runs\pure_pin_only_attempt*.json # 使用 pure_pin_only.py 且未指定 --out 时
android_gopay_2.10.0/protocol/runs/*.json # 直接使用 full_pure_signup_pin.py 且未指定 --out 时
如果想指定输出文件:
python .\pure_pin_only.py --pin 736294 --skip-waf-preflight --out .\runs\latest.json如果已经在接码平台买好了号码,可以使用底层 runner:
python .\full_pure_signup_pin.py `
--phone 628xxxxxxxxxx `
--sms-order-id 订单ID `
--sms-key "你的_SMSCloud_API_KEY" `
--pin 736294 `
--finish-sms-order如果不使用接码平台,手动传 OTP:
python .\full_pure_signup_pin.py `
--phone 628xxxxxxxxxx `
--otp 123456 `
--pin-otp 654321 `
--pin 736294编译检查:
python -m py_compile .\gopay_protocol.py .\full_pure_signup_pin.py .\pure_pin_only.py .\smscloud_client.py查看完整参数:
python .\pure_pin_only.py --help
python .\full_pure_signup_pin.py --help--pin是必填参数,入口脚本不会使用默认 PIN。- 推荐把
SMSCLOUD_KEY设置为环境变量,避免误提交真实 KEY。 - 运行状态文件里会记录参数、手机号、订单和 OTP 等调试信息,请妥善保存。
- 如果遇到 OTP 超时、号码已注册、服务端 429,
pure_pin_only.py会按--attempts自动换号重试。
本项目仅供学习研究使用。使用者需自行承担风险,遵守相关服务条款。 不得违法gopay的条款和相关法律法规,使用则默认用户知情,一切后果由用户个人承担,与作者无关。
