热门搜索:软件下载

应用怎么获得微信登录授权(APP对接微信登录接口)

首页教程应用怎么获得微信登录授权更新时间:2023-02-09 10:51:40
背景

现在我们APP的登录、特殊事件提醒,验证码之类的都是短信通知用户。现在这个短信运维成本也越来越高, 一条短信的成本基本达到了4分钱左右,我们APP才2万的注册用户短信的费用每个月都要几千块,为了减低我们的运维成本,我们要对接微信生态,从微信登录,再到通知走微信公众号推送,这样预计每个月可以节省几千块。

时序图

应用怎么获得微信登录授权,APP对接微信登录接口(1)

登录时序图

移动应用微信登录是基于OAuth2.0 协议标准构建的微信 OAuth2.0 授权登录系统。

登录流程

1、移动应用微信授权登录获取code

开发人员需要配合微信开放平台的SDK进行授权登录请求。正确接入 SDK 后并拥有相关授权域(scope)权限后,开发者移动应用会在终端本地拉起微信应用进行授权登录,微信用户确认后微信将拉起开发者移动应用,并带上授权临时票据(code)。

iOS 平台应用授权登录接入代码示例(请参考 iOS 接入指南): -(void)sendAuthRequest { //构造 SendAuthReq 结构体 SendAuthReq* req =[[[SendAuthReq alloc]init]autorelease]; req.scope = @"snsapi_userinfo"; req.state = @"123"; //第三方向微信终端发送一个 SendAuthReq 消息结构 [WXApi sendReq:req]; } android 平台应用授权登录接入代码示例(请参考 Android 接入指南): { // send oauth request Final SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "wechat_sdk_demo_test"; api.sendReq(req); }


参数说明

参数

是否必须

说明

appid

应用唯一标识,在微信开放平台提交应用审核通过后获得

scope

应用授权作用域,如获取用户个人信息则填写 snsapi_userinfo

state

用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止 csrf 攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加 session 进行校验。在 state 传递的过程中会将该参数作为 url 的一部分进行处理,因此建议对该参数进行url encode操作,防止其中含有影响 url 解析的特殊字符(如'#'、'&'等)导致该参数无法正确回传。

2、云端根据微信登录的code进行业务关联

@Slf4j @Service public class WeixinServiceImpl implements WeixinService { /** * 获取登录tokenurl */ final public static String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx8713050991911d16&secret=54f57519a5e6b74b5bdcbc40a85e1354&code=${code}&grant_type=authorization_code"; /** * 微信获取用户信息url */ final public static String USER_INFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${openid}"; @Autowired private RestTemplateClient restTemplateClient; //通过移动端微信登录的code获取openid及accessToken @Override public AccessTokenResp codeAuthAccessToken(String code) { //返回的是text/plain格式,需要转 String accessTokenRespText = restTemplateClient.doPostForJSON_UTF8(ACCESS_TOKEN_URL .replace("${code}" ,code ), String.class ); return JSON.parseObject(accessTokenRespText , AccessTokenResp.class); } //根据access_token与openid获取用户的头像、用户名、unionid等信息 @Override public UserInfoResp getWeixinUserInfo(String token, String openid) { //返回的是text/plain格式,需要转 String accessTokenRespText = restTemplateClient.doPostForJSON_UTF8(USER_INFO_URL .replace("${access_token}" ,token ) .replace("${openid}" ,openid ), String.class ); return JSON.parseObject(accessTokenRespText , UserInfoResp.class); } }总结

整个微信登录的流程还是挺简洁的,我们的目标是方便用户的使用,比如一方面对接微信登录后将头像、用户昵称直接可以同步过来,另一方面减少短信,甚至达到不发送短信的目的,达到降低我们的运维成本的目的。

,
软件推荐