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,設置應用公私鑰等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章