天天看點

使用者授權流程以及常見問題

使用者授權分為靜默授權與主動授權

1,靜默授權(scope = auth_base)可以擷取到使用者的什麼資訊呢?

使用靜默授權可以擷取到使用者的UserId以及scope是auth_base的token令牌。

這個在什麼情況下使用呢?

例如:在小程式需要對使用者進入小程式的時候就需要使用者的UserId來進行标記,然後就可以使用該授權方式,并且直接使用,不會彈出授權窗。避免了首頁不能彈出授權窗的尴尬。

2,主動授權(scope = auth_user)可以擷取到的使用者的資訊可以參考文檔:[url]https://docs.open.alipay.com/api_2/alipay.user.info.share[/url]  主要是擷取使用者的頭像avatar、nick_name、user_id

3,正常小程式授權流程:

  1. 前端中擷取到使用者的授權code碼。
    my.getAuthCode({
          scopes: 'auth_user',
          success: ({ authCode }) => {
            my.alert({
              content: authCode,
            });
          },
        });​           
  2. 在前端擷取到的authCode傳到服務端後調用接口
    public void getAuth_token() {
    		AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
    		request.setCode("460c52fbe3c64be28fd9c9d0e4acTX10");
    		request.setGrantType("authorization_code");
    		try {
    			AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClientSmallMember.execute(request);
    			if (oauthTokenResponse.isSuccess()) {
    				System.out.println("調用成功" + oauthTokenResponse.getBody());
    			} else {
    				System.out.println("調用失敗" + oauthTokenResponse.getSubMsg());
    			}
    			System.out.println(oauthTokenResponse.getAccessToken());
    			getUserInfo(oauthTokenResponse.getAccessToken());
    		} catch (AlipayApiException e) {
    			// 處理異常
    			e.printStackTrace();
    		}
    	}​           
  3. 擷取到的accessToken令牌去調用擷取使用者資訊的接口
    public void getUserInfo(String token) {
    		AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();
    		AlipayUserInfoShareResponse response;
    		try {
    			response = alipayClientXiaorong.execute(request,token);
    			if(response.isSuccess()){
    				System.out.println("調用成功" + response.getBody());
    				} else {
    				System.out.println("調用失敗"+ response.getBody());
    				}
    		
    		} catch (AlipayApiException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}​           
    正常擷取到使用者的資訊,然後傳到前端進行展示使用。

4,ISV商戶調用使用者授權接口需要注意的點:

 a,前端使用的為模闆ID

 b,服務端使用的為第三方應用的Appid

 c,并且第三方應用對模闆發起授權擷取到APPAUTHTOKEN

 d,代碼中需要alipayClient.execute(request,null,APPAUTHTOKEN)這樣進行調用接口。

5,常見問題

 Q:無效的通路令牌

 A:scope指派的資訊,與後面調用的接口是不比對的,例如:scope用的是auth_user,結果後面調用的接口并非alipay.user.info.share,而是芝麻的接口; 擷取會員資訊,服務端報 isv.invalid-token 無效 token 原因1:擷取授權碼scope 必須傳 auth_user 原因2:調用的接口錯誤,請使用接口:alipay.user.info.share 你先檢查下,發現實在還是解決不了,再把相關的請求資訊提供過來,我們幫你查 來源位址:[url]https://openclub.alipay.com/read.php?tid=6629&fid=66[/url]、[url]https://docs.alipay.com/mini/introduce/auth#4-[/url]補充說明。

 Q: 為什麼不允許小程式打開就讓使用者授權擷取阿裡的id呢??小程式駁回了

 A:小程式禁止首屏強制授權框,建議使用靜默授權擷取使用者的UserId,來進行後面的業務的操作。

 Q:擷取使用者資訊可以擷取到用的手機号嗎

 A:手機号屬于使用者的私密資訊,由于安全的問題,是不能擷取到的。