public function testAuthenticationParamsAreStrippedAndReapplied() { $app = new FacebookApp('123', 'foo_secret'); $request = new FacebookRequest($app, $accessToken = 'foo_token', $method = 'GET', $endpoint = '/foo', $params = ['access_token' => 'foo_token', 'appsecret_proof' => 'bar_app_secret', 'bar' => 'baz']); $url = $request->getUrl(); $expectedParams = 'bar=baz&access_token=foo_token&appsecret_proof=df4256903ba4e23636cc142117aa632133d75c642bd2a68955be1443bd14deb9'; $expectedUrl = '/' . Facebook::DEFAULT_GRAPH_VERSION . '/foo?' . $expectedParams; $this->assertEquals($expectedUrl, $url); $params = $request->getParams(); $expectedParams = ['access_token' => 'foo_token', 'appsecret_proof' => 'df4256903ba4e23636cc142117aa632133d75c642bd2a68955be1443bd14deb9', 'bar' => 'baz']; $this->assertEquals($expectedParams, $params); }
/** * Converts a Request entity into an array that is batch-friendly. * * @param FacebookRequest $request The request entity to convert. * @param string|null $requestName The name of the request. * @param string|null $attachedFiles Names of files associated with the request. * * @return array */ public function requestEntityToBatchArray(FacebookRequest $request, $requestName = null, $attachedFiles = null) { $compiledHeaders = []; $headers = $request->getHeaders(); foreach ($headers as $name => $value) { $compiledHeaders[] = $name . ': ' . $value; } $batch = ['headers' => $compiledHeaders, 'method' => $request->getMethod(), 'relative_url' => $request->getUrl()]; // Since file uploads are moved to the root request of a batch request, // the child requests will always be URL-encoded. $body = $request->getUrlEncodedBody()->getBody(); if ($body) { $batch['body'] = $body; } if (isset($requestName)) { $batch['name'] = $requestName; } if (isset($attachedFiles)) { $batch['attached_files'] = $attachedFiles; } // @TODO Add support for "omit_response_on_success" // @TODO Add support for "depends_on" // @TODO Add support for JSONP with "callback" return $batch; }
/** * Prepares the request for sending to the client handler. * * @param FacebookRequest $request * * @return array */ public function prepareRequestMessage(FacebookRequest $request) { $postToVideoUrl = $request->containsVideoUploads(); $url = $this->getBaseGraphUrl($postToVideoUrl) . $request->getUrl(); // If we're sending files they should be sent as multipart/form-data if ($request->containsFileUploads()) { $requestBody = $request->getMultipartBody(); $request->setHeaders(['Content-Type' => 'multipart/form-data; boundary=' . $requestBody->getBoundary()]); } else { $requestBody = $request->getUrlEncodedBody(); $request->setHeaders(['Content-Type' => 'application/x-www-form-urlencoded']); } return [$url, $request->getMethod(), $request->getHeaders(), $requestBody->getBody()]; }