技术派微信服务号登录
一、公众号与服务号登录流程对比
1.公众号登录流程
技术派之前对接的是个人公众号,不支持生成带链接的二维码,因此所有人访问的二维码都是同一个,我们采用的方案就是,用户在唤起登录时,给前端一个验证码,当用户对公众号发送验证码之后,后端就可以将这个微信公众号的用户
个人公众号登录流程:

2.服务号登录流程
对于服务号,基本流程和上面的差不多,区别在于服务号支持生成带参数的二维码地址,这样我就可以为每一个用户生成唯一的二维码,当用户通过这个唯一的公众号扫描关注之后,就可以找到将微信公众号用户与技术派的用户进行关联起来

3.关键点对比
从上面的流程图也可以看出,核心区别在于:
- 公众号:所有人扫描同一个二维码图片;
- 通过在技术派前端为每个用户展示不同的验证码来实现微信公众号用户与技术派用户的绑定
- 用户需要在公众号内,输入验证码,实现登录
- 服务号:生成带参数二维码,每个用户的二维码图片都不一样
- 后端在生成二维码图片时,自动携带验证码参数,通过这个参数来实现服务号用户与技术派用户的绑定
- 用户扫码之后,自动登录(无需输入验证码)
二、实现流程
1.服务号配置
微信认证,开通 生成带参数的二维码接口权限

在服务号的后台,开通开发者相关信息

2.微信登录配置
上面配置完毕之后,在代码实现层,重点需要关注的有两个参数: appId + appSecret,我们在配置文件 application-login.yml中新增微信登录的配置参数
# 知识星球快捷登录方式
paicoding:
login:
wx:
loginQrType: SUBSCRIPTION_ACCOUNT # SUBSCRIPTION_ACCOUNT 表示普通的公众号登录 SERVICE_ACCOUNT 表示服务号关注登录
appId: wx59x(使用公众号的appId)ffb8
appSecret: a7c4xb(使用公众号的appSecret)68c84
qrCodeImg: ${view.site.contactMeWxQrCode}
qrCodeLogo: ${view.site.websiteLogoUrl}
为了给大家更好的使用体验,个人公众号的登录方式依然保留,实际的选择通过
paicoding.login.wx.loginQrType来切换,对应的取值为com.github.paicoding.forum.api.model.enums.login.LoginQrTypeEnum
- 本地开发环境,默认是公众号登录:SUBSCRIPTION_ACCOUNT
- 生产prod环境,默认是服务号登录:SERVICE_ACCOUNT,相关配置放在
GlobalConfig中进行维护

在代码侧,新增对应的属性类 WxLoginProperties
@Component
@Data
@ConfigurationProperties("paicoding.login.wx")
public class WxLoginProperties {
/**
* 登录二维码的类型:微信公众号、服务号
*
* @see LoginQrTypeEnum#name()
*/
private String loginQrType;
/**
* 开发者ID(AppID)
*/
private String appId;
/**
* 开发者密码
*/
private String appSecret;
/**
* 如果是普通公众号登录,这里为公众号的二维码图片地址
*/
private String qrCodeImg;
/**
* 二维码的logo,适用于服务号的场景
*/
private String qrCodeLogo;
}
3.生成带参数二维码
接下来针对服务号,我们需要对接两个接口,以此来生成用户登录的二维码图片:
3.1 获取接口调用凭据
一个普通的get请求,通过传入appid, appsecret来获取后续接口调用的 accessToken;为了避免后续的微信接口调用,每次都需要重新生成accessToken,我们对生成的token做一个简单的缓存
具体实现如下
@Component
public class WxLoginQrGenIntegration {
private static final String WX_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}";
private static final String WX_GEN_QR_URL = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=";
private final WxLoginProperties wxLoginProperties;
// 对于服务号登录的场景
private volatile WxAccessToken accessToken;
public WxLoginQrGenIntegration(WxLoginPropert...未能定位到原文的划线
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复