资讯动态

wxid添加好友全攻略:从URL拼接到二维码批量生成

发布时间:2026/10/17 21:49:17 来源:尧图企业网站定制
简介一份专门解决 wxid_ 微信号添加难题的源码工具包适合普通微信用户、安卓手机使用者以及需要做微信好友引流测试的开发者。这类以 wxid_ 开头的账号由系统自动生成常规搜索无法直接命中资源提供一种基于 HTML 的调用方案用户只需保存页面并按要求填入目标 wxid_即可生成添加请求。相比通过共同好友、群聊或扫二维码等常规途径这一方式更为直接尤其适合安卓手持设备。包内共 3 个文件主逻辑写在 index.html 中另附 inscode 环境配置与 .gitignore 版本控制文件方便在 VS Code、网页编辑器等环境中直接运行和调试。整个压缩包仅 5KB轻量不占空间上手成本极低。目前已有 1319 人学习浏览。代码中特别标注了安卓机型需要保留关键空格避免拼接后的协议被系统拒绝该方法不仅适用于系统分配的 wxid_ 账号对自定义微信号同样有效。对于经常受限于微信隐私策略而无法添加好友的用户这套小工具可省去反复摸索的时间开箱即用无论是添加客户、群友还是处理临时会话对象都能派上用场。1. wxid到底是什么为什么拿到的ID搜不到二维码却能加有人在群里丢来一串“wxid_xxxxxx”让你加个好友你在微信里把这段ID粘进搜索框回车多半是“用户不存在”。更麻烦的是对方还指望你把这种方法写进脚本一键批量加人。先说清一个前提wxid是注册时分配的原始ID它是账号体系里的唯一标识但并不是“微信号”。微信添加朋友时接受搜索的字段是用户可修改的微信号、手机号或QQ号很多版本早已把wxid从可搜索索引里摘出去了。也就是说直接拿wxid去搜索框里找人大概率走不通但把wxid拼成一条微信自己认识的URLweixin://contacts/profile/xxx再把它做成二维码扫码入口却是通的。标题里的“wxid微信号添加方法[代码]”本质上是这么一回事把wxid当作输入参数拼出一条微信客户端能解析的添加路径然后用代码批量输出二维码。这套方法适合处理老客户回捞、资料清洗、社群拉新这类场景。你手里有一批wxid但对方没留手机号也不方便手动一个个搜于是需要本地脚本先把wxid转成二维码再分发给对应的人去扫。本文从URL拼接讲到二维码生成再讲不同账号状态下选哪条路最后把批量场景里的去重、校验和几个坑一并说清。2. 从wxid到可扫二维码URL拼装与qrcode的最小代码2.1 添加好友二维码的解析逻辑weixin:// 协议与一次扫码微信的个人二维码扫码后客户端解析出来的并不是一串纯数字ID而是一条自定义协议URL结构大致是 weixin://contacts/profile/目标标识。这个协议由微信客户端自己注册和解析外部工具只需要把内容放进二维码剩下的跳转、查询、弹出添加确认页都由客户端完成。一次完整的扫码链路是这样的手机扫到二维码 → 客户端读取到 weixin:// 开头的内容 → 提取 profile/ 后面的目标标识 → 在账号体系里查询这个名字 → 命中后弹出“添加到通讯录”确认页。这一整条链路里二维码内容只是一个“快递单”微信收到后自己拆包查人二维码本身不需要任何官方接口授权。这里就引出了整篇文章最关键的一个判断profile/ 后面到底该填什么。微信客户端拿到这个标识后按“微信号”去查所以只有当你的wxid同时是对方当前微信号时这条路径才成立。对方注册后从没改过微信号微信号栏里显示的就是wxid_xxx二维码有效对方已经改成自定义英文ID你拿原来的wxid去拼URL扫码就会提示用户不存在。这个区别后面会在第3章专门展开。顺带说明为什么不建议让脚本直接调用客户端接口去加好友一方面个人号没有公开的添加接口另一方面即便有现成工具短时间高频请求极容易被判定为营销行为。离线生成二维码、由人工扫码的方式既满足“把wxid变成可添加好友入口”的需求又不触碰风控红线。2.2 用Python生成二维码最小可跑代码与参数说明最常见的做法是用Python的qrcode库它把编码、矩阵生成和PNG保存都封装好了十几行就能把wxid变成一张可扫图片。下面这个函数接受一个wxid输出一张png格式二维码理论上扫出来就是目标用户的添加页。import qrcode def wxid_to_qrcode(wxid: str, output: str wxid_qr.png): # 把 wxid 当作微信号拼进官方扫码结构这样扫出来才会跳“添加朋友” path weixin://contacts/profile/{}.format(wxid) qr qrcode.QRCode( version4, # 1~40 的整数数字越大矩阵越密 error_correctionqrcode.constants.ERROR_CORRECT_M, # 容错率中等 box_size10, # 每个点的像素数决定整张图分辨率 border2, # 白边格数太薄容易扫不出 ) qr.add_data(path) qr.make(fitFalse) qr.make_image().save(output) print(已生成:, output) # 用法 wxid_to_qrcode(wxid_example_123)逻辑说明先把wxid拼成 weixin://contacts/profile/ 开头的URL再交给qrcode库把这段文本渲染成二维码矩阵最后保存为PNG。这里刻意用了 fitFalse不给qrcode缩小版本号的机会保证编码结构与预期一致。参数说明version决定矩阵尺寸version4约能容纳几十个字符普通wxid加前缀足够error_correction建议至少用M如果这张二维码会被截图压缩或打印在不干胶上用Q或H更稳box_size是每格的像素数10适合屏幕展示8以下细节偏小border是白边宽度官方标准推荐4格2是下限再薄就会扫码失败。这组参数不是固定的我一般在出印刷物料时把box_size调到12在批量生成电子图片时维持10。2.3 特殊字符与URL编码为什么会让二维码失效很多wxid不是纯字母数字里面可能出现比如 wxid_a1b2_c3d4。直接把这种wxid拼进URL再生成二维码扫出来经常是空白页或者跑到一个无关的账号主页。原因是在URL语义里被当作参数分隔符的预备符号微信客户端解析时会从处把路径截断导致查询对象变成之前的残段。解决方式是先把wxid做一遍URL编码把特殊字符转成百分号形式再拼进链接。Python标准库urllib.parse可以干这个关键点是safe参数要传空字符串让所有特殊字符都被转义。import urllib.parse raw_wxid wxid_a1b2_c3d4 safe_wxid urllib.parse.quote(raw_wxid, safe) print(safe_wxid) # wxid_a1b2_%40c3d4 url weixin://contacts/profile/{}.format(safe_wxid) print(url)逻辑说明quote把转成%40把:和/这类有歧义的字符也一并处理避免路径被错误切分。微信扫码后会对URL做一次解码所以用户那边看到的仍是正常ID不会出现乱码。在实际项目中我不会只对个别带的wxid做处理而是把URL编码做成流水线里的固定一环。原因很简单你无法保证上游导出的excel里没有隐藏字符全量转义比逐个排查更省事而且多一层编码不会影响有效wxid的扫码结果。提示如果生成的二维码被一些扫码工具识别后出现“链接格式不支持”的提示先检查weixin://后面有没有被加上额外的/或空格这类细节比编码更容易忽略。3. 拿到wxid之后三种可靠的添加路径对比3.1 方案一对方未改过微信号直接扫码添加适用对象是注册后从未修改过微信号的账号。这类账号在“我→设置→账号与安全→微信号”里显示的仍然是一串wxid_开头的内容和资料库里拿到的原始ID一致。对这类数据源第2章的代码可以直接用拼URL、出二维码、发给对方扫码链路最短。怎么判断目标账号是不是这种状态最直接的办法是让目标用户发一张个人名片截图看名片上的微信号字段是否以wxid_开头或者从你自己微信的通讯录里进对方主页在“更多信息”里找微信号一栏。如果显示的就是wxid_原文那方案一成立。还有个细节值得注意微信里“微信号”一栏显示的内容可能是脱敏的例如只显示前两个字符和后两个字符。看到这种情况不要急着判断对方改过号先确认是不是隐私设置把中间部分遮挡了。很多人误判这一步把有效数据当成失效数据丢掉了。方案一的代码实现就是第2章的wxid_to_qrcode不需要额外分支。实际落地时我一般会在脚本里加一个判断如果输入本身不是wxid_开头但仍然是一串字母数字组合就继续按原样生成二维码因为新注册账号的微信号不一定带wxid_前缀。3.2 方案二对方已改过微信号先还原当前微信号再走二维码更多时候你拿到的wxid对应的账号已经设置过自定义微信号直接用原始ID拼URL扫码会提示“用户不存在”。这时候要做的不是强行生成二维码而是先通过正常可见的信息找回对方当前微信号。常见做法是在共同群聊里进入对方头像资料页查看“更多信息”中的“微信号”字段如果对方关闭了该展示就只能借助对方的个人二维码——让认识的人扫一下他的码在“通过名片添加”的确认页里能看到完整微信号。你说到底这属于正常的信息读取不涉及任何接口调用。还有一种场景是对方微信号里保留了wxid的部分前缀比如 wxid_abc123 改成了 abc123xx。这种数据如果直接拿去生成二维码大概率会失败因为这个ID已经不是账号当前的有效标识。处理办法是把这类可疑数据单独列一个待复核清单不要混进批量生成流程。方案二的重点不是写更多代码而是把数据源做分区未确认状态的wxid和已确认可用微信号是两条处理线路。我习惯在脚本里加一个人工复核输出目录把无法判断状态的数据单独落盘避免一把梭全量生成。3.3 方案三批量场景下从wxid列表生成二维码批量生成是实务里最常见的需求。上游导出一个txt文件每行一个wxid本地脚本逐行读取、去重、生成二维码。这里除了基本的循环处理还要注意三点文件编码统一用UTF-8、输出文件名避开特殊字符、对重复ID做去重。from pathlib import Path import qrcode import urllib.parse def batch_generate(wxid_file: str, out_dir: str qr_out): out_path Path(out_dir) out_path.mkdir(exist_okTrue) seen set() # 去重防止同一ID生成多张码 for line in Path(wxid_file).read_text(encodingutf-8).splitlines(): wxid line.strip() if not wxid or wxid in seen: continue # 空行或重复ID跳过 seen.add(wxid) # 特殊字符全量转义避免等符号截断URL safe urllib.parse.quote(wxid, safe) url weixin://contacts/profile/{}.format(safe) qr qrcode.QRCode(version5, error_correctionqrcode.constants.ERROR_CORRECT_M) qr.add_data(url) qr.make(fitFalse) # 文件名取前缀规避Windows非法字符 file_name wxid.split()[0] _qr.png qr.make_image().save(str(out_path / file_name)) print(已生成:, wxid, -, url) # 用法 batch_generate(wxid_list.txt, qr_out)逻辑说明脚本逐行读取txt空行和重复ID直接跳过每个有效wxid拼出URL后生成独立png。set用来去重避免同一个wxid在列表里出现多次时生成多张内容相同的图片既浪费空间也可能引起扫码频率异常。参数说明version5比第2章的最小代码略大这是为了应对更长的wxid和百分号转义后的长度增长文件名用split()[0]截取wxid的前半段避免、/、:等字符在Windows下报文件名非法输出目录用Path对象管理兼容Windows和Linux路径分隔符差异。这套脚本跑完后目录qr_out里会是与txt行数一致的png文件。它们可以直接通过聊天窗口发给目标用户也可以打包成一个压缩包让对方自己挑对应的二维码扫。务必强调一点脚本到生成二维码这一步就结束了最终点“添加”的动作留给人工避免连续请求触发限制。提示txt文件如果来自Windows记事本保存时默认可能是GBK编码读出来会乱码且ID对不上。统一用UTF-8编码保存再跑脚本这是批量生成前最容易忽略的一步。4. wxid添加好友避坑指南五个易翻车的常见点4.1 现象二维码扫了没反应——原因字符截断——解决先quote再拼URL有一类用户的wxid里带着比如 wxid_8f0a_bb2。不做编码直接拼URL扫出来的结果要么是空白页要么跳到某个无关账号主页。原因在前文已经提过在URL语义里容易被当作参数边界微信客户端解析时把路径截断查询对象变成之前的残段自然查不到目标用户。解决方法是全量编码不对某个字符抱有侥幸心理所有wxid都用urllib.parse.quote处理一遍再拼链接。同时加一段打印逻辑把拼接后的完整URL输出到日志里遇到问题能直观看到是哪一步出了问题。4.2 现象搜索框输入wxid搜不到人——原因新版客户端把wxid移出可搜索字段——解决走二维码路径很多人把wxid直接粘进“搜索→添加朋友”的输入框然后得到“用户不存在”的反馈。这不是ID错了而是微信早就把wxid移出了可搜索字段的索引范围。搜索框接受的输入只有手机号、QQ号、邮箱以及用户自行设置的微信号原始ID不在此列。解决方式就是回到二维码路径把wxid拼成weixin:// contacts/profile格式并生成二维码扫码后客户端能识别走的是和搜索不同的解析通道。遇到这种情况不需要去质疑数据源直接进入二维码生成流程即可。4.3 现象昨天生成的二维码今天提示用户不存在——原因对方改了微信号——解决重新核对数据上周还能正常扫出添加页的二维码这周拿出来扫客户端提示用户不存在。最常见的原因是对方在这期间修改了“微信号”字段原来和wxid一致的标识已经失效。微信允许用户修改微信号改完后旧ID不再作为可查询标识。解决方法是回到数据源头确认最新状态。如果对方是你的存量好友直接进他的资料页看当前微信号如果不是好友只能通过共同群聊或第三方转发的名片确认。不要反复用同一张旧二维码去扫码验证那样既浪费时间也可能因为连续扫码被系统记录。4.4 现象批量自动点击添加后账号被限制——原因高频请求触发风控——解决离线生成二维码人工扫码技术圈子里常有人把这一步做成全自动脚本调内部接口、循环点击添加按钮、自动处理弹窗。看起来效率拉满实则风险极高短时间连续添加陌生人会被系统判定为营销行为轻则提示操作频繁重则限制部分功能。解决方式是只把自动化停在二维码生成这一步后续的点击动作全部改为人工。你可以把批量生成的二维码打包发给对应的人由对方自己扫自己添加或者在内部团队里把二维码按组分发由运营同事分批扫码操作控制频率。把工具和“真人操作”的边界划清楚既能达到建联目的也不会把账号推到被封的边缘。提示涉及账号安全的操作永远不要想着绕过风控本期能用不代表下期安全。老老实实做离线生成才是可持续的方案。4.5 现象Windows保存二维码时报文件名非法——原因特殊字符进入文件名——解决文件名规范化Windows文件系统对文件名有严格限制不能包含/、\、:、*、?、、、、|这些字符。wxid里如果有还好如果上游导出的数据里混着其他符号直接拿wxid当文件名保存脚本会报错中断。解决方式是文件名只取wxid的安全前缀或者用索引编号代替原始ID。第3章的split()[0]就是为此设计的但更稳妥的做法是直接对文件名整体做一次字符替换把所有非法字符转成下划线再从处理后的内容截取前30个字符作为文件名彻底避开这个坑。5. 进阶给wxid列表加一道合法性预校验5.1 生成前的合法性校验把明显无效的wxid挡在门外很多人拿到一批wxid就急着生成二维码效率很高但坏数据也一并进了产出队列。这些坏ID生成出来的图片扫不出来发给用户只会增加沟通成本。所以我习惯在批量脚本里加一道预校验先过滤明显非法的输入再用正则和长度判断把可疑数据单独挑出来。import re def is_likely_wxid(text: str) - bool: if not text or len(text) 6 or len(text) 32: return False # 排除URL、路径、文件名场景里会出现干扰的字符 if re.search(r[\s/\\\\:#*?\|], text): return False # 只允许字母数字、下划线、和点号 if re.search(r[^0-9A-Za-z_.], text): return False return True这是一个宽松的判断不追求百分之百准确目的是把明显无效的脏数据挡在二维码生成之前。比如空行、带空格的描述文本、被误复制进列表的URL地址都会在这一步被筛掉。真正的wxid长度一般在6到32之间前缀多为wxid_但新号段的格式可能有变化所以判断时不要在前缀上卡得太死。用这个函数把输入列表分成两批合法的进批量生成流程可疑的落到一个“待人工确认”的txt里。这样既不会漏掉格式少见但真实有效的ID也不会让垃圾数据污染最终产出。5.2 验证一张二维码是否有效一张截图判断生成后的二维码是否有效最快的验证方法是用微信自己扫一次。有效二维码扫码后会直接进入目标用户的“添加到通讯录”确认页如果你的微信和目标用户已经是好友则会跳转到他的个人资料页。这两种结果都说明二维码本身格式无误。另一种验证方式是先把二维码发给一个测试账号用测试账号扫码后确认能弹出添加页再把这张码正式分发。这种方式适合批量产出的抽检不必每张都验证按批次抽3到5张就能覆盖大部分问题。我现在做这类工具的习惯是先校验再出码宁可每个ID多花一毫秒的过滤时间也别让大批量数据里的一两个坏ID在落地阶段变成脏数据后面回头排查更费神。这套从wxid到二维码的流程跑顺之后后续加人还是沿用二维码路径配合文件命名规范和预校验基本不会再出幺蛾子。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑