APP对接微信登录接口(app对接微信登录接口是什么)

APP对接微信登录接口(app对接微信登录接口是什么)

解决方案goocz2025-07-09 14:36:423A+A-

背景

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

时序图

移动应用微信登录是基于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);
    }
}

总结

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

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5