Plaid REST API: ожидает ли MFA на основе выбора скалярное значение, а не массив?

Из документации Plaid:

Некоторые учреждения требуют, чтобы пользователь ответил на вопрос из ограниченного набора ответов, т.е. множественный выбор. Может быть возвращено несколько вопросов, и отправка ответов MFA должна представлять собой массив в формате JSON с ответами, предоставленными в том же порядке, что и заданные вопросы.

Исходя из этого, я понимаю, что это означает, что:

  • Если в массиве ответов есть только один вопрос, отправьте ответ в виде скалярного значения.
  • Если в массиве ответов более одного вопроса, отправьте ответ в виде массива значений.

Это правильно?

Например, если плед возвращает:

{
    "type": "questions",
    "mfa": [{"question":"What was the name of your first pet?"}],
    "access_token": "xxxxx"
}

Я бы представил:

{
    "mfa": "fido"
}

Но если плед возвращается:

{
    "type": "questions",
    "mfa": [
        {"question":"What was the name of your first pet?"},
        {"question":"What was the name of your first girlfriend?"}
    ],
    "access_token": "xxxxx"
}

Я бы представил:

{
    "mfa": ["fido", "forever alone"]
}

Это правильно?


person matmar10    schedule 03.01.2015    source источник


Ответы (1)


Я считаю, что Plaid будет отправлять пользователю только один MFA за раз. Я проверил один из их банков в песочнице, и он отправил, а затем отправил еще один после того, как я неправильно ответил на первый MFA.

Я не верю, что вы получите 2 MFA в одном и том же объекте JSON.

Я реализовал их схему MFA следующим образом:

public static function accountOrMFA($response, $formBuilder, $formId = null, $request = null) {
    if ($response) {
        // do we have a MFA or the accounts?
        if (property_exists($response, "mfa")) {
            // we have MFA to deal with
            $mfa['type'] = $response->type;
            $mfa['data'] = $response->mfa;
            $mfa['access_token'] = $response->access_token;

            return response()->json(['html' => PlaidController::makeHTMLForMFA($mfa, $formBuilder)]);
        } else {
            $auth_accounts = [];
            $connect_accounts = [];
            foreach($response->accounts as $account) {
                $auth_accounts[] = [
                    'id' => $account->_id,
                    'number' => $account->meta->number,
                    'name' => $account->meta->name,
                    'type' => $account->type,
                ];
            }

            $connect_response = UserController::storeToken($response, $request); // add this token to the user's tokens

            return response()->json(['html' => PlaidController::makeHTMLForAccounts($auth_accounts, $formBuilder, $formId)]);
        }

    }

    return response()->json(['error' => true, 'response' => json_encode($response)]); // maybe the wrong credentials? we don't know
}
person Adam Link    schedule 12.05.2015