Android開發(fā)中App支付寶三方登錄

在支付寶授權登錄之前,有的需要先判斷一下手機上是否安裝支付寶應用,

public static boolean checkAliPayInstalled(Context context) {

        Uri uri = Uri.parse("alipays://platformapi/startApp");
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        ComponentName componentName = intent.resolveActivity(context.getPackageManager());
        return componentName != null;
    }

在APP申請審核之后會自動生成app_id,pid,
RSA_PRIVATE 為公鑰,RSA2_PRIVATE為私鑰

/**
     * 用于支付寶支付業(yè)務的入?yún)?app_id。
     */
    public static final String APPID = "";
    
    /**
     * 用于支付寶賬戶登錄授權業(yè)務的入?yún)?pid。
     */
    public static final String PID = "";

    /**
     * 用于支付寶賬戶登錄授權業(yè)務的入?yún)?target_id。
     */
    public static final String TARGET_ID = "";
    private static final int SDK_AUTH_FLAG = 2;

    /**
     *  pkcs8 格式的商戶私鑰。
     *
     *  如下私鑰,RSA2_PRIVATE 或者 RSA_PRIVATE 只需要填入一個,如果兩個都設置了,本 Demo 將優(yōu)先
     *  使用 RSA2_PRIVATE。RSA2_PRIVATE 可以保證商戶交易在更加安全的環(huán)境下進行,建議商戶使用
     *  RSA2_PRIVATE。
     *
     *  建議使用支付寶提供的公私鑰生成工具生成和獲取 RSA2_PRIVATE。
     *  工具地址:https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106097&docType=1
     */
    public static final String RSA2_PRIVATE = "";
    public static final String RSA_PRIVATE = "";
/**
     * 支付寶賬戶授權業(yè)務示例
     */
    public void authV2(View v) {
        if (TextUtils.isEmpty(PID) || TextUtils.isEmpty(APPID)
                || (TextUtils.isEmpty(RSA2_PRIVATE) && TextUtils.isEmpty(RSA_PRIVATE))
                || TextUtils.isEmpty(TARGET_ID)) {
            showAlert(this, getString(R.string.error_auth_missing_partner_appid_rsa_private_target_id));
            return;
        }

        /*
         * 這里只是為了方便直接向商戶展示支付寶的整個支付流程;所以Demo中加簽過程直接放在客戶端完成;
         * 真實App里,privateKey等數(shù)據(jù)嚴禁放在客戶端,加簽過程務必要放在服務端完成;
         * 防止商戶私密數(shù)據(jù)泄露,造成不必要的資金損失,及面臨各種安全風險; 
         * 
         * authInfo 的獲取必須來自服務端;
         */
        boolean rsa2 = (RSA2_PRIVATE.length() > 0);
        Map<String, String> authInfoMap = OrderInfoUtil2_0.buildAuthInfoMap(PID, APPID, TARGET_ID, rsa2);
        String info = OrderInfoUtil2_0.buildOrderParam(authInfoMap);
        
        String privateKey = rsa2 ? RSA2_PRIVATE : RSA_PRIVATE;
        String sign = OrderInfoUtil2_0.getSign(authInfoMap, privateKey, rsa2);
        final String authInfo = info + "&" + sign;
        Runnable authRunnable = new Runnable() {

            @Override
            public void run() {
                // 構造AuthTask 對象
                AuthTask authTask = new AuthTask(PayDemoActivity.this);
                // 調(diào)用授權接口,獲取授權結果
                Map<String, String> result = authTask.authV2(authInfo, true);

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

        // 必須異步調(diào)用
        Thread authThread = new Thread(authRunnable);
        authThread.start();
    }
    
@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”則代表授權成功,具體狀態(tài)碼代表含義可參考授權接口文檔
                    if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
                        // 獲取alipay_open_id,調(diào)支付時作為參數(shù)extern_token 的value
                        // 傳入,則支付賬戶為該授權賬戶
                        LogUtils.e(authResult.toString());
                        String authCode = authResult.getAuthCode();
                        String aliPayOpenId = authResult.getAlipayOpenId();
                        String state = authResult.getResult();

                        //TODO本地服務的三方登錄接口
                        mViewModel.upLoginThree("social", "all", "alipay", authCode, "alipay", "", "", "");

                    } else {
                        // 其他狀態(tài)值則為授權失敗
                        LogUtils.e("其他狀態(tài)值則為授權失敗");
                    }
                    break;
                }
                default:
                    break;
            }
        }

        ;
    };

支付寶登錄授權官方文檔地址:
https://opendocs.alipay.com/open/218/105325

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容