收藏
回答

调用IILinkAuthManager::ThirdAppLogin报错,是什么原因?

在使用PC 小程序插件接入过程中,loginbuffer 已经正确获取,但是在调用IILinkAuthManager::ThirdAppLogin时候,callback返回报错:kWrongThirdSdkMode,是什么原因?

// 初始化配置:

bool WMPFWrapper::InitializeBrowsingCore(const std::string& runtimePath, const std::string& dataDir) {
    // Get BrowsingService instance
    browsingService_ = getBrowsingService_();
    if (!browsingService_) {
        SetError("Failed to get BrowsingService instance");
        return false;
    }
    // Create configuration JSON
    std::ostringstream configJson;
    configJson << "{"
               << "\"product-id\": 3000,"
               << "\"log-level\": 0,"
               << "\"wmpf_root_dir\": \"" << dataDir << "\","
               << "\"enable-applet-v3\": true,"
               << "\"max-retry-count\": 5"
               << "}";

    std::string config = configJson.str();
    std::cout << "[WMPFWrapper] Config: " << config << std::endl;
    // Create core service handler
    static CoreServiceHandler coreHandler;


    // Initialize browsing core
    int result = browsingService_->InitilizeBrowsingCore(
        config.c_str(),
        runtimePath.c_str(),
        &coreHandler
    );
    if (result != 0) {
        std::ostringstream oss;
        oss << "Failed to initialize browsing core (Error: " << result << ")";
        SetError(oss.str());
        return false;
    }
    std::cout << "[WMPFWrapper] Browsing core initialized" << std::endl;
    return true;
}

void AuthManager::LoginCallbackWrapper(
    int32_t login_type,
    int32_t error,
    const char* resp_pb,
    int resp_len,
    void* callback_data) {
    
    std::cout << "[AuthManager] Login callback received:" << std::endl;
    std::cout << "  - login_type: " << login_type << std::endl;
    std::cout << "  - error: " << error << " (0x" << std::hex << error << std::dec << ")" << std::endl;
    std::cout << "  - resp_len: " << resp_len << std::endl;


    AuthManager* self = static_cast<AuthManager*>(callback_data);
    if (!self) {
        std::cerr << "[AuthManager] Error: callback_data is null" << std::endl;
        return;
    }


    bool success = (error == 0);
    std::string errorMsg;
    
    if (!success) {
        // Decode common error codes
        std::string errorDesc;
        switch (error) {
            case 1073741827: // 0x40000003 - kWrongThirdSdkMode
                break;
            case 1073741825: // 0x40000001 - kCanNotAutoLogin
                errorDesc = "kCanNotAutoLogin - Cannot auto login, need manual login first";
                break;
            case 1073741826: // 0x40000002 - kParametersError
                errorDesc = "kParametersError - Invalid parameters";
                break;
            case 1073741828: // 0x40000004 - kAsyncLoginInFlight
                errorDesc = "kAsyncLoginInFlight - Another login is in progress";
                break;
            case 1073741829: // 0x40000005 - kAlreadyLoggedIn
                errorDesc = "kAlreadyLoggedIn - Already logged in";
                break;
            case -1:
                errorDesc = "General error";
                break;
            case -2:
                errorDesc = "Network error";
                break;
            case -3:
                errorDesc = "Invalid parameters";
                break;
            default:
                errorDesc = "Unknown error";
                break;
        }
        errorMsg = "Login failed with error code: " + std::to_string(error) + " (" + errorDesc + ")";
        if (error != 1073741827) {  // Don't print again for kWrongThirdSdkMode
            std::cerr << "[AuthManager] " << errorMsg << std::endl;
        }
    } else {
        std::cout << "[AuthManager] Login successful!" << std::endl;
        // Update cached status
        self->cachedLoginStatus_ = LoginStatus::LoginSuccess;
    }


    // Call user callback
    if (self->loginResultCallback_) {
        self->loginResultCallback_(success, errorMsg);
        self->loginResultCallback_ = nullptr;
    }
}




void AuthManager::LoginWithBuffer(const std::string& loginBuffer, LoginResultCallback callback) {
    if (!authManager_) {
        std::cerr << "[AuthManager] Error: authManager not initialized" << std::endl;
        if (callback) {
            callback(false, "AuthManager not initialized");
        }
        return;
    }

    if (loginBuffer.empty()) {
        std::cerr << "[AuthManager] Error: loginBuffer is empty" << std::endl;
        if (callback) {
            callback(false, "Login buffer is empty");
        }
        return;
    }
    // Store callback
    loginResultCallback_ = callback;
    // Call ThirdAppLogin
    authManager_->ThirdAppLogin(loginBuffer.c_str(), LoginCallbackWrapper, this);
}





回答关注问题邀请回答
收藏

3 个回答

  • 阿中大人
    阿中大人
    01-05

    授权流程已经完成了,还是报错

    01-05
    有用
    回复
  • Jason.hu
    Jason.hu
    2025-12-29

    snsapi_runtime_pcsdk这个权限已经申请了,否则拿不到login buffer。

    2025-12-29
    有用
    回复
  • 智能回答 智能回答 本次回答由AI生成
    2025-12-29
    有用
登录 后发表内容