文章目录
- 超详细图文教程|APP微信One-Click Login完整实现流程(Android\+iOS\+后端,避坑完整版)
- 一、业务全景流程图
- 二、前置准备:微信开放平台后台配置⚙️(配图2:后台实操截图)
- 2.1 账号资质要求📋
- 2.2 创建移动应用审核步骤📝
- 三、Android端SDK集成实操🤖
- 3\.1 导入官方微信SDK📦
- 3.2 固定目录创建(必做,微信硬性规则📌)
- 3.3 AndroidManifest清单配置⚙️
- 3.4 点击登录核心业务代码💻
- 3.5 回调页面获取code代码📩
- 四、iOS端集成核心配置🍎
- 五、后端全套接口逻辑🖥️(Java通用,全平台通用)
- 5.1 接口一:code换取access\_token、openid🔄
- 5.2 接口二:获取用户微信资料👤
- 5.3 后端业务登录逻辑🧩
- 六、上线高频问题图文避坑⚠️
- 七、上线安全硬性规范🛡️
- 补充答疑💬:Java后端调试|微信有无公用测试AppID\+Secret?
- 1、移动应用(本文Android/iOS APP登录专用)📱
- 2、免费替代调试方案(Java后端本地开发专用🆓)
- 3、密钥归属规则📌
超详细图文教程|APP微信One-Click Login完整实现流程(Android+iOS+后端,避坑完整版)
前言:市面上99%APP微信登录均采用微信OAuth2.0授权码模式,禁止前端直调微信接口(高危安全漏洞),本文全程图文点位标注、分步实操、全套代码、高频坑点配图讲解,零基础开发可直接照搬上线。
一、业务全景流程图
✅ 极简一目了然流程图
整套登录闭环5步走✨,核心原则:前端只拿code,所有密钥、接口鉴权全部交由后端处理****🔒
📱用户点击APP【微信登录】按钮,APP集成SDK拉起微信授权页
✅用户同意授权,微信客户端回调APP,返回一次性临时授权code(5分钟有效期、单次可用⏱️)
📤APP将code上传自研业务后端,不触碰微信私密接口🚫
🔐后端携带AppID、AppSecret、code,请求微信服务器,换取openid、access_token用户凭证
🗄️后端查询数据库,完成账号注册/登录,返回业务token,APP本地存储完成登录🎉
核心禁忌:绝对不能把AppSecret写在安卓/苹果客户端代码内,会直接导致用户账号被盗、平台资质违规!
二、前置准备:微信开放平台后台配置⚙️(配图2:后台实操截图)
2.1 账号资质要求📋
🌐官网地址:https://open.weixin.qq.com/
👤账号类型:必须企业认证账号(个人账号无法开通APP微信登录权限❌)
💰费用:300元/次认证费用,认证长期有效✅
2.2 创建移动应用审核步骤📝
- 登录后台 → 管理中心 →移动应用📱→ 创建移动应用
2.基础资料:填写应用名称、官网、应用图标、应用简介🖼️
平台必填参数(审核必填,错填无法跳转回调⚠️)
🤖Android:APP官方包名、应用签名MD5值
🍎iOS:Bundle ID、Universal Links通用链接(iOS13强制必填)
提交审核:工作日1-3天审核通过⏳,审核完成获取两大核心参数
🆔AppID:客户端+后端共用🔑AppSecret:仅后端留存,禁止外泄🚫
三、Android端SDK集成实操🤖
3.1 导入官方微信SDK📦
Module层级build.gradle引入依赖(无埋点纯净版SDK)
// 微信官方登录SDK 稳定版 implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.8.0'3.2 固定目录创建(必做,微信硬性规则📌)
在项目包名下,新建wxapi固定文件夹📂,新建回调类 WXEntryActivity,包名不能修改,否则微信无法跳转回APP❌
3.3 AndroidManifest清单配置⚙️
<!-- 微信专属回调页面 透明无标题 必须配置exported=true --><activityandroid:name=".wxapi.WXEntryActivity"android:exported="true"android:theme="@android:style/Theme.Translucent.NoTitleBar"><intent-filter><actionandroid:name="android.intent.action.VIEW"/><categoryandroid:name="android.intent.category.DEFAULT"/><categoryandroid:name="android.intent.category.BROWSABLE"/><!-- scheme格式固定:wx+你的微信开放平台AppID --><dataandroid:scheme="wxwxxxxxxxxxxxxxxx"/></intent-filter></activity>3.4 点击登录核心业务代码💻
// 全局初始化微信SDKIWXAPIwxApi=WXAPIFactory.createWXAPI(this,"你的AppID",true);wxApi.registerApp("你的AppID");/** * 微信登录点击事件 */privatevoidgoWxLogin(){// 判断用户是否安装微信if(!wxApi.isWXAppInstalled()){Toast.makeText(this,"请先安装微信客户端",Toast.LENGTH_SHORT).show();return;}// 构建授权请求SendAuth.ReqauthReq=newSendAuth.Req();authReq.scope="snsapi_userinfo";// 授权获取昵称、头像authReq.state="login_"+System.currentTimeMillis();// 防csrf攻击随机值wxApi.sendReq(authReq);}3.5 回调页面获取code代码📩
// WXEntryActivity内回调方法@OverridepublicvoidonResp(BaseRespbaseResp){super.onResp(baseResp);// 判断为微信登录回调if(baseResp.getType()==ConstantsAPI.COMMAND_SENDAUTH){SendAuth.Respresp=(SendAuth.Resp)baseResp;switch(resp.errCode){case0:// 授权成功,拿到核心code,传给后端StringwxCode=resp.code;// 调用自研后端登录接口,上传codehttpPostWxLogin(wxCode);break;case-2:// 用户手动取消微信授权Toast.makeText(this,"已取消登录",Toast.LENGTH_SHORT).show();finish();break;}}finish();}四、iOS端集成核心配置🍎
🔗配置微信URL白名单:LSApplicationQueriesSchemes 添加 weixin、wechat
🌐配置Universal Links通用链接:微信后台与Xcode链接必须完全一致,iOS13+不配置无法返回APP❌
📝AppDelegate注册微信AppID,实现跳转回调代理
✅拉起授权逻辑和安卓完全一致,回调获取code后直接上传后端即可
iOS高频坑:通用链接校验失败,授权弹窗一闪而过,直接返回APP登录页,百分百是链接前后不一致导致。
五、后端全套接口逻辑🖥️(Java通用,全平台通用)
后端两步接口调用,前端无需感知微信接口,安全可控
5.1 接口一:code换取access_token、openid🔄
请求地址(GET):https://api.weixin.qq.com/sns/oauth2/access_token
请求参数:
- 🆔appid:开放平台AppID
- 🔒secret:后端保密AppSecret
- 📨code:前端上传临时授权码
- 📎grant_type:固定值 authorization_code
微信返回标准JSON:
{"access_token":"长期鉴权凭证","expires_in":7200,"refresh_token":"刷新凭证","openid":"用户当前应用唯一ID","unionid":"企业主体全域统一用户ID","scope":"snsapi_userinfo"}5.2 接口二:获取用户微信资料👤
请求地址(GET):https://api.weixin.qq.com/sns/userinfo
入参:access_token + openid
返回:用户昵称、头像地址、性别、城市信息
5.3 后端业务登录逻辑🧩
🗄️根据openid查询业务数据库
🆕无账号:自动新建账号,绑定openid、unionid、头像昵称
✅已有账号:直接核验身份,下发业务登录Token
💾前端接收token,本地SP/钥匙串存储,完成登录
六、上线高频问题图文避坑⚠️
| 报错码 | 故障原因 | 解决方案 |
|---|---|---|
| -2 | 👋用户手动取消授权 | 前端弹窗提示取消登录即可 |
| 40029 | ⏱️Code失效/重复使用 | code仅单次有效,禁止前端缓存复用code |
| 40001 | 🔑AppSecret错误 | 核对开放平台密钥,后端不要随意修改 |
| 无法跳转回APP | 🔗回调配置不匹配 | 安卓核对签名包名、iOS核对通用链接 |
七、上线安全硬性规范🛡️
✅🔒 AppSecret只存后端配置文件,不打包客户端、不传输前端
✅🖥️ 必须后端中转微信接口,禁止前端直接换取token
✅🛡️ 登录state参数必校验,防御CSRF跨站伪造登录
✅👥 多端互通业务优先存储unionid,而非openid
补充答疑💬:Java后端调试|微信有无公用测试AppID+Secret?
核心结论前置:✅APP移动端微信一键登录【无官方全网公用测试AppID/Secret】❌,分为两类账号,权限完全不互通,Java后端调试区分使用!
1、移动应用(本文Android/iOS APP登录专用)📱
🚫微信开放平台:无公开免费测试AppID、Secret,全网没有通用可用账号
👤账号要求:必须自行注册【企业认证账号】(300元认证费),自建移动应用,审核下发专属AppID+Secret
⚠️硬性限制:个人微信开放平台账号,直接禁用APP微信登录权限,无法获取可用密钥
🔗关联前文报错:文档内41002(appid缺失)、41001(token缺失),90%都是复制公用无效密钥、参数漏传导致
2、免费替代调试方案(Java后端本地开发专用🆓)
✅公众号测试号(免费、无需企业认证、个人微信一键申领)
申领地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
特点:自动生成专属AppID+Secret,免费调用token、用户信息接口,适配Java后端接口调试
❌局限性:只能调试接口代码,无法拉起APP微信授权登录,仅用来校验后端http请求、参数逻辑
3、密钥归属规则📌
不是全系统统一密钥:一个应用 = 一套独立AppID+Secret,互不通用
禁止共用他人密钥:公用密钥大概率封禁、接口直接返回40001密钥错误,无法上线
Java开发建议:本地接口调试用公众号测试号,联调打包必须用自研企业移动应用密钥