@@ -195,25 +195,58 @@ public function getAccessToken(string $requestToken, string $verifier):AccessTok
195195 throw new ProviderException ('request token mismatch ' );
196196 }
197197
198- $ response = $ this ->sendAccessTokenRequest ($ verifier );
198+ $ params = $ this ->getAccessTokenRequestHeaderParams ($ token , $ verifier );
199+ $ response = $ this ->sendAccessTokenRequest ($ params );
199200
200201 return $ this ->parseTokenResponse ($ response );
201202 }
202203
204+ /**
205+ * Prepares the header params for the access token request
206+ */
207+ protected function getAccessTokenRequestHeaderParams (AccessToken $ requestToken , string $ verifier ):array {
208+
209+ $ params = [
210+ 'oauth_consumer_key ' => $ this ->options ->key ,
211+ 'oauth_nonce ' => $ this ->nonce (),
212+ 'oauth_signature_method ' => 'HMAC-SHA1 ' ,
213+ 'oauth_timestamp ' => time (),
214+ 'oauth_token ' => $ requestToken ->accessToken ,
215+ 'oauth_version ' => '1.0 ' ,
216+ 'oauth_verifier ' => $ verifier ,
217+ ];
218+
219+ $ params ['oauth_signature ' ] = $ this ->getSignature (
220+ $ this ->accessTokenURL ,
221+ $ params ,
222+ 'POST ' ,
223+ $ requestToken ->accessTokenSecret ,
224+ );
225+
226+ return $ params ;
227+ }
228+
229+ /**
230+ * Adds the "Authorization" header to the given `RequestInterface` using the given array or parameters
231+ */
232+ protected function setAuthorizationHeader (RequestInterface $ request , array $ params ):RequestInterface {
233+ return $ request ->withHeader ('Authorization ' , sprintf ('OAuth %s ' , QueryUtil::build ($ params , null , ', ' , '" ' )));
234+ }
235+
203236 /**
204237 * Sends the access token request
205238 *
206239 * @see \chillerlan\OAuth\Core\OAuth1Provider::getAccessToken()
207240 */
208- protected function sendAccessTokenRequest (string $ verifier ):ResponseInterface {
241+ protected function sendAccessTokenRequest (array $ headerParams ):ResponseInterface {
209242
210243 $ request = $ this ->requestFactory
211- ->createRequest ('POST ' , QueryUtil:: merge ( $ this ->accessTokenURL , [ ' oauth_verifier ' => $ verifier ]) )
244+ ->createRequest ('POST ' , $ this ->accessTokenURL )
212245 ->withHeader ('Accept-Encoding ' , 'identity ' )
213246 ->withHeader ('Content-Length ' , '0 ' )
214247 ;
215248
216- $ request = $ this ->getRequestAuthorization ($ request );
249+ $ request = $ this ->setAuthorizationHeader ($ request, $ headerParams );
217250
218251 return $ this ->http ->sendRequest ($ request );
219252 }
@@ -245,7 +278,7 @@ public function getRequestAuthorization(RequestInterface $request, AccessToken|n
245278 $ token ->accessTokenSecret ,
246279 );
247280
248- return $ request -> withHeader ( ' Authorization ' , sprintf ( ' OAuth %s ' , QueryUtil:: build ( $ params, null , ' , ' , ' " ' )) );
281+ return $ this -> setAuthorizationHeader ( $ request , $ params );
249282 }
250283
251284}
0 commit comments