admin管理员组文章数量:1573690
文章目录
- 1。微信和支付宝第三方登录简介
- 1.1微信个人测试号
- 1.2支付宝沙箱
1。微信和支付宝第三方登录简介
由于微信和支付宝需要申请公司权限,才能完整使用功能,现提供上述两种第三方登录的个人测试过程。
1.1微信个人测试号
微信仅仅提供测试号而且该测试号是用于公众号测试。如果需要在电脑模拟需要安装微信web开发者工具。
微信公众号测试账号申请页面:https://mp.weixin.qq/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
进入路径后,微信扫码登录,页面会生成用户唯一appID和appsecret。
第三方登录,首先必须获取授权码,必然要设置回调路径,拉倒页面下方,看到网页账号栏,点击修改,然后设置你的回调地址,尽量只注入 http://主机名:端口/。不要带上路径,否则定死了回调路径,比如你设置了 auth111.jiaozi:18003
将来你程序中可以设置为:htttp://auth111.jiaozi:18003/a或者 auth111.jiaozi:18003/任意path,微信都支持。
我这里就绑定auth111.jiaozi:18003,注意前面不用带http://,测试这个域名可以随便写,端口是你回调程序端口
假设我局域网的应用的ip地址是192.168.1.100 端口是18003,为了测试,需要在你本地host绑定一个记录,让auth111.jiaozi
指向你本地的192.168.1.100,生成环境 这个域名就必须是真是的,并且绑定到外网ip
修改C:\Windows\System32\drivers\etc\hosts
192.168.1.100 auth111.jiaozi
微信获取授权码路径
微信内部授权(公众号内部三方登录)
https://open.weixin.qq/connect/oauth2/authorize?appid=wxf38289316bXXXXX&redirect_uri=http://auth111.jiaozi:18003/tpauth/code&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect
网站二维码登录(网站接入第三方登录)
https://open.weixin.qq/connect/qrconnect?appid=wx8cf4fc48XXXXXXXXX&redirect_uri=http://open.wechat.astraea.au:18003/tpauth/code&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect
因为开发者工具支持公众号第三方登录,使用第一个地址测试,参数解释
- appid:你页面显示的应用id
- redirect_url:网页授权回调路径,域名和端口必须和测试号配置一致
- response_type:code表示使用授权码模式认证
- scope:snsapi_userinfo:表示获取用户信息,snsapi_login表示仅仅登录。
- state:表示回调路径,传回授权码后,重新带回的参数,可选。
接下来输入正确路径在浏览器测试微信内部授权路径(必须在微信客户端打开)
打开开发者工具,扫二维码登录,点击公众号网页:
发现弹出二维码,登录后直接跳转到了 回调路径并且生成了code,因为我没开18003对应服务。所以404了
通过授权码获取token(测试用户每天access_token上限2000,慎用)
https://api.weixin.qq/sns/oauth2/access_token?appid="+appid+"&secret="+secret+"&code="+code+"&grant_type=authorization_code"
返回格式(openid是当前用户唯一表示):
{“success”:true,“code”:“200”,“message”:“成功”,“time”:1554870556154,“data”:"{“access_token”:“20_I3H5LMdxW3kiMTFknUaRwNdblYg_yzvJPvunezAr8G5ORKCLFWaIft5_G9k4X0kSCIOWF9SpPJM24jw4ulVncg”,“expires_in”:7200,“refresh_token”:“20_OwFPtGs9qOxrVpseyHhH6qyiW39aDE1pPiu08k1r_W37m7O-PTEue85KUJPoJrlhg4uzCNO9hJk1S4OJff6zmw”,“openid”:“oeECauNul54HXji7NoZmcKacAPcs”,“scope”:“snsapi_userinfo”}"}
获取用户信息
https://api.weixin.qq/sns/userinfo?access_token=20_I3H5LMdxW3kiMTFknUaRwNdblYg_yzvJPvunezAr8G5ORKCLFWaIft5_G9k4X0kSCIOWF9SpPJM24jw4ulVncg&openid=oeECauNul54HXji7NoZmcKXXXX
注意获取授权码是重定向到你回调路径,通过授权码获取token是rest的请求返回json。
如果你将来接入是网站接入,公众号,app,你需要申请企业接入
企业申请路径:https://open.weixin.qq/cgi-bin/applist?t=manage/list&page=0&num=20&openapptype=512&token=1dcb23ce907077ccb3daebdf4fbfe76b73e3ea11&lang=zh_CN
这里申请了网站接入(过程不表)
查看
网站接入是上面网站二维码登录,获取授权码路径不同,获取token是一致。
具体接入教程参考:https://open.weixin.qq/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=
1.2支付宝沙箱
支付宝提供沙箱账号用于测试,获取授权码和api路由都是测试路径和正式环境分开,获取token必须使用aliyun api获取,
传输数据使用了非对称加密,虽然微信使用oauth2规范,从感觉上,aliyun更专业啊。
沙箱账号申请:https://openhome.alipay/platform/appDaily.htm?tab=account
扫描二维码登录后
沙箱环境中,默认生了一个商家账号和一个买家账号,沙箱环境下你自己不能注册也不能使用你自己的alipay账号,只能使用商家和买家账号
点击左侧沙箱应用进入
因为传输数据需要使用自定义私钥签名+自定义公钥验证签名,签名的数据需要使用支付宝公钥加密,所以你需要生成一个
自定义的公私钥,alipay必须保留公钥,点击RSA2(SHA256)设置应用公钥,
点击查看密钥生成,下载密钥生成工具,生成公私钥,将公钥拷贝到文本框中,注意自己保留私钥文件
保存后,点击右侧超链接查看支付宝公钥,保存这个公钥到本地
注意这里有个支付宝网关,这个网关用于通过授权码获取token的入口,所以要保留,
沙箱环境是:https://openapi.alipaydev/gateway.do
正式环境是:https://openapi.alipay/gateway.do
授权回调地址与微信规则与微信一致(测试版本可以使用path正式版本一定要用http://ip:端口,不要指定path哦)
由于登录使用二维码,不能使用正式版的alipay只能使用沙箱版本,页面下方扫二维码下载
下载到手机后注意只能使用上面生成的沙箱商家和买家账号登录
测试获取授权码(沙箱是alipaydev,正式是alipay):
https://openauth.alipaydev/oauth2/publicAppAuthorize.htm?app_id=20160925005XXXXXX&scope=auth_user&redirect_uri=http://auth111.jiaozi:18003/tpauth/codeAlipay&state=init
使用沙箱alipay扫描二维码后登录,自动跳转到回调地址(没开服务)
通过code获取授权码,使用代码完成了,参考自https://docs.open.alipay/263/105809/
@Override
public Token authCodeToToken(String code) throws ServiceException {
//你的应用私钥文件读取,你自己定
String appPrivate=null;
try {
appPrivate=IOUtils.toString(AlipayLogin.class.getResourceAsStream(alipayConfig.getAppPrivate()), Charset.forName("UTF-8"));
appPrivate = appPrivate.replace("-----BEGIN PRIVATE KEY-----", "");
appPrivate = appPrivate.replace("-----END PRIVATE KEY-----", "");
} catch (IOException e) {
e.printStackTrace();
}
//参数参考:https://docs.open.alipay/263/105809/
AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.getServiceUrl(), alipayConfig.getAppid(), appPrivate, alipayConfig.getFormat(), alipayConfig.getCharset(), alipayConfig.getAliPublic(), alipayConfig.getSignType());
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setCode(code);
request.setGrantType("authorization_code");
try {
AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(request);
if(oauthTokenResponse.isSuccess()) {
Token token = new Token();
//获取token
token.setToken(oauthTokenResponse.getAccessToken());
//获取有效期
token.setExpiresIn(Integer.parseInt(oauthTokenResponse.getExpiresIn()));
//获取微信用户id
token.setAppid(oauthTokenResponse.getUserId());
return token;
}else{
throw new ServiceException(oauthTokenResponse.getCode(),oauthTokenResponse.getMsg()+" "+oauthTokenResponse.getSubMsg());
}
} catch (AlipayApiException e) {
//处理异常
e.printStackTrace();
}
return null;
}
阿里正式环境必须企业申请,路径:https://openhome.alipay/platform/home.htm
点击左侧应用信息查看appid,设置应用公私钥等。
版权声明:本文标题:springsecurity05-第三方登录到微信和支付宝 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1725777468a1041981.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论