заголовок php curl - PullRequest
       8

заголовок php curl

2 голосов
/ 06 января 2012

Я пытаюсь обернуть голову, используя cURL с API FreshBooks. У него есть два способа аутентификации: OpenAuth и на основе токенов. Я пытаюсь использовать метод, основанный на токене. Я использовал cURL раньше, но мои учетные данные всегда были в передаваемом XML.

В свежих книгах кажется, что мне нужно передать учетные данные в заголовке запроса cURL ... я думаю. Ниже приведен пример кода с использованием метода OpenAuth. Используя аутентификацию на основе токенов, я предполагаю только передать имя пользователя и пароль.

Как правильно передать свои учетные данные с помощью моего запроса cURL?

http://developers.freshbooks.com/authentication-2/#TokenBased

private function buildAuthHeader()
    {
        $params = array(
            'oauth_version' => '1.0',
            'oauth_consumer_key' => $this->oauth_consumer_key,
            'oauth_token' => $this->oauth_token,
            'oauth_timestamp' => time(),
            'oauth_nonce' => $this->createNonce(20),
            'oauth_signature_method' => 'PLAINTEXT',
            'oauth_signature' => $this->oauth_consumer_secret. '&' .$this->oauth_token_secret
        );

        $auth = 'OAuth realm=""';
        foreach($params as $kk => $vv)
        {
            $auth .= ','.$kk . '="' . urlencode($vv) . '"';
        }

        return $auth;
    }


    public function post($request)
    {
        $this->fberror = NULL;
        $headers = array(
                    'Authorization: '.$this->buildAuthHeader().'',
                    'Content-Type: application/xml; charset=UTF-8',
                    'Accept: application/xml; charset=UTF-8',
                    'User-Agent: My-Freshbooks-App-1.0');

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->apiUrl());
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $request);

        $response = curl_exec($ch);
        curl_close($ch);
        $response = new SimpleXMLElement($response);

        if($response->attributes()->status == 'ok') 
            return $response;
        else if($response->attributes()->status == 'fail' || $response->fberror)    
            throw new FreshbooksAPIError($response->error);
        else throw new FreshbooksError('Oops, something went wrong. :(');
    }

1 Ответ

4 голосов
/ 06 января 2012

Пример командной строки curl -u на связанной странице просто использует базовую аутентификацию HTTP, где токеном является имя пользователя.Эквивалент phpcurl будет

curl_setopt($ch, CURLOPT_USERPWD, "$token:$password");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...