android 支付寶授權登錄、獲取個人信息一鍵接入

1.支付寶授權登錄,獲取用戶信息:

那些導入SDK和配置設置的就不一一講了,參照官方文檔配置即可參照這裏,下面主要說關鍵的代碼處理。

1.首先要讓後臺服務端將拼接好的infoStr信息,通過接口方式獲取得到,這個後端處理。不能放在前段不安全。

2.用得到的infoStr信息調用支付寶SDK授權獲取AuthCode。

3.用得到的AuthCode去獲取用戶信息。

以下是關鍵代碼:

  //獲取AuthCode
    private void getAlipayUserData() {
        if (Constant.ALIPAY_ID.equals("")) {
            toast("支付寶sdk未初始化完成,請稍後再試");
        } else {
            getAuthInfo(authInfo);
        }
    }

    private void getAuthInfo(String alipay_auth_info) {
        Runnable authRunnable = new Runnable() {
            @Override
            public void run() {
                // 構造AuthTask 對象
                AuthTask authTask = new AuthTask(ImpowerActivity.this);
                // 調用授權接口,獲取授權結果
                Map<String, String> result = authTask.authV2(authInfo, true);

                Message msg = new Message();
                msg.what = SDK_AUTH_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };

        // 必須異步調用
        Thread authThread = new Thread(authRunnable);
        authThread.start();
    }

//調用支付寶SDK獲取authcode;
  @SuppressLint("HandlerLeak")
    private Handler mHandler = new Handler() {
        @SuppressWarnings("unused")
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SDK_AUTH_FLAG: {
                    @SuppressWarnings("unchecked")
                    AuthResult authResult = new AuthResult((Map<String, String>) msg.obj, true);
                    String resultStatus = authResult.getResultStatus();
                    // 判斷resultStatus 爲“9000”且result_code
                    // 爲“200”則代表授權成功,具體狀態碼代表含義可參考授權接口文檔
                    if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
                        toast("授權成功");
                        // 獲取alipay_open_id,調支付時作爲參數extern_token 的value, 傳入,則支付賬戶爲該授權賬戶
//開發者自己的方法,把code傳給後臺同事,他們拿code換token,這裏是後臺自己去獲取用戶信息
                        auth_code = authResult.getAuthCode();
                        if (auth_code != null) {
                            getAlipayBinDingInfo();
                        }
                    } else {
                        // 其他狀態值則爲授權失敗
                        if (TextUtils.isEmpty(authResult.getAuthCode())) {
                            toast("授權取消");
                        } else {
                            toast(String.format("授權失敗_authCode:%s", authResult.getAuthCode()));
                        }
                    }
                    break;
                }
                default:
                    break;
            }
        }
    };

 public static class AuthResult {

        private String resultStatus;
        private String result;
        private String memo;
        private String resultCode;
        private String authCode;
        private String alipayOpenId;

        public AuthResult(Map<String, String> rawResult, boolean removeBrackets) {
            if (rawResult == null) {
                return;
            }

            for (String key : rawResult.keySet()) {
                if (TextUtils.equals(key, "resultStatus")) {
                    resultStatus = rawResult.get(key);
                } else if (TextUtils.equals(key, "result")) {
                    result = rawResult.get(key);
                } else if (TextUtils.equals(key, "memo")) {
                    memo = rawResult.get(key);
                }
            }

            String[] resultValue = result.split("&");
            for (String value : resultValue) {
                if (value.startsWith("alipay_open_id")) {
                    alipayOpenId = removeBrackets(getValue("alipay_open_id=", value), removeBrackets);
                    continue;
                }
                if (value.startsWith("auth_code")) {
                    authCode = removeBrackets(getValue("auth_code=", value), removeBrackets);
                    continue;
                }
                if (value.startsWith("result_code")) {
                    resultCode = removeBrackets(getValue("result_code=", value), removeBrackets);
                    continue;
                }
            }

        }

        private String removeBrackets(String str, boolean remove) {
            if (remove) {
                if (!TextUtils.isEmpty(str)) {
                    if (str.startsWith("\"")) {
                        str = str.replaceFirst("\"", "");
                    }
                    if (str.endsWith("\"")) {
                        str = str.substring(0, str.length() - 1);
                    }
                }
            }
            return str;
        }

        @Override
        public String toString() {
            return "resultStatus={" + resultStatus + "};memo={" + memo + "};result={" + result + "}";
        }

        private String getValue(String header, String data) {
            return data.substring(header.length(), data.length());
        }

        /**
         * @return the resultStatus
         */
        public String getResultStatus() {
            return resultStatus;
        }

        /**
         * @return the memo
         */
        public String getMemo() {
            return memo;
        }

        /**
         * @return the result
         */
        public String getResult() {
            return result;
        }

        /**
         * @return the resultCode
         */
        public String getResultCode() {
            return resultCode;
        }

        /**
         * @return the authCode
         */
        public String getAuthCode() {
            return authCode;
        }

        /**
         * @return the alipayOpenId
         */
        public String getAlipayOpenId() {
            return alipayOpenId;
        }
    }

 

 

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