springsecurity05-第三方登录到微信和支付宝

1。微信和支付宝第三方登录简介

由于微信和支付宝需要申请公司权限,才能完整使用功能,现提供上述两种第三方登录的个人测试过程。

1.1微信个人测试号

微信仅仅提供测试号而且该测试号是用于公众号测试。如果需要在电脑模拟需要安装微信web开发者工具。
微信公众号测试账号申请页面:https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
进入路径后,微信扫码登录,页面会生成用户唯一appID和appsecret。
在这里插入图片描述
第三方登录,首先必须获取授权码,必然要设置回调路径,拉倒页面下方,看到网页账号栏,点击修改,然后设置你的回调地址,尽量只注入 http://主机名:端口/。不要带上路径,否则定死了回调路径,比如你设置了 auth111.jiaozi.com:18003
将来你程序中可以设置为:htttp://auth111.jiaozi.com:18003/a或者 auth111.jiaozi.com:18003/任意path,微信都支持。
在这里插入图片描述
我这里就绑定auth111.jiaozi.com:18003,注意前面不用带http://,测试这个域名可以随便写,端口是你回调程序端口
在这里插入图片描述
假设我局域网的应用的ip地址是192.168.1.100 端口是18003,为了测试,需要在你本地host绑定一个记录,让auth111.jiaozi.com
指向你本地的192.168.1.100,生成环境 这个域名就必须是真是的,并且绑定到外网ip
修改C:\Windows\System32\drivers\etc\hosts
192.168.1.100 auth111.jiaozi.com
微信获取授权码路径
微信内部授权(公众号内部三方登录)
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf38289316bXXXXX&redirect_uri=http://auth111.jiaozi.com:18003/tpauth/code&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect
网站二维码登录(网站接入第三方登录)
https://open.weixin.qq.com/connect/qrconnect?appid=wx8cf4fc48XXXXXXXXX&redirect_uri=http://open.wechat.astraea.com.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.com/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.com/sns/userinfo?access_token=20_I3H5LMdxW3kiMTFknUaRwNdblYg_yzvJPvunezAr8G5ORKCLFWaIft5_G9k4X0kSCIOWF9SpPJM24jw4ulVncg&openid=oeECauNul54HXji7NoZmcKXXXX

注意获取授权码是重定向到你回调路径,通过授权码获取token是rest的请求返回json。
如果你将来接入是网站接入,公众号,app,你需要申请企业接入

企业申请路径:https://open.weixin.qq.com/cgi-bin/applist?t=manage/list&page=0&num=20&openapptype=512&token=1dcb23ce907077ccb3daebdf4fbfe76b73e3ea11&lang=zh_CN
这里申请了网站接入(过程不表)
在这里插入图片描述
查看
在这里插入图片描述
网站接入是上面网站二维码登录,获取授权码路径不同,获取token是一致。

具体接入教程参考:https://open.weixin.qq.com/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.com/platform/appDaily.htm?tab=account
扫描二维码登录后
在这里插入图片描述
沙箱环境中,默认生了一个商家账号和一个买家账号,沙箱环境下你自己不能注册也不能使用你自己的alipay账号,只能使用商家和买家账号
点击左侧沙箱应用进入
在这里插入图片描述
因为传输数据需要使用自定义私钥签名+自定义公钥验证签名,签名的数据需要使用支付宝公钥加密,所以你需要生成一个
自定义的公私钥,alipay必须保留公钥,点击RSA2(SHA256)设置应用公钥,
在这里插入图片描述
点击查看密钥生成,下载密钥生成工具,生成公私钥,将公钥拷贝到文本框中,注意自己保留私钥文件
保存后,点击右侧超链接查看支付宝公钥,保存这个公钥到本地
在这里插入图片描述
注意这里有个支付宝网关,这个网关用于通过授权码获取token的入口,所以要保留,
沙箱环境是:https://openapi.alipaydev.com/gateway.do
正式环境是:https://openapi.alipay.com/gateway.do
授权回调地址与微信规则与微信一致(测试版本可以使用path正式版本一定要用http://ip:端口,不要指定path哦)
由于登录使用二维码,不能使用正式版的alipay只能使用沙箱版本,页面下方扫二维码下载
在这里插入图片描述
下载到手机后注意只能使用上面生成的沙箱商家和买家账号登录
测试获取授权码(沙箱是alipaydev,正式是alipay):
https://openauth.alipaydev.com/oauth2/publicAppAuthorize.htm?app_id=20160925005XXXXXX&scope=auth_user&redirect_uri=http://auth111.jiaozi.com:18003/tpauth/codeAlipay&state=init
使用沙箱alipay扫描二维码后登录,自动跳转到回调地址(没开服务)
在这里插入图片描述
通过code获取授权码,使用代码完成了,参考自https://docs.open.alipay.com/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.com/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.com/platform/home.htm
在这里插入图片描述
点击左侧应用信息查看appid,设置应用公私钥等。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值