Exécution de WordPress 3.3.2 et PHP Version 5.2.17
J'essaie d'obtenir le code d'accès à partir de Facebook à l'aide de wp_remote_request () et de l'API OAuth de Facebook (btw, exemple de travail à la fin de cette entrée).
Y a-t-il une raison pour laquelle cela ne fonctionne pas (devrait selon la doc et le code source) ?:
$response = wp_remote_request('https://graph.facebook.com/oauth/access_token', array(
'timeout' => 60,
'sslverify' => false,
'method' => 'GET',
'body' => array(
'client_id' => FACEBOOK_APPID,
'client_secret' => FACEBOOK_APPSECRET,
'redirect_uri' => REDIRECTURI,
'code' => $_GET['code']
)
));
Quand cela fait-il ?:
$http = new WP_Http;
$api_url = sprintf("https://graph.facebook.com/oauth/access_token?client_id=%s&redirect_uri=%s&client_secret=%s&code=%s",
urlencode(FACEBOOK_APPID),
urlencode(REDIRECTURI),
urlencode(FACEBOOK_APPSECRET),
urlencode($_GET['code'])
);
$response = $http->request($api_url, array('timeout' => 60, 'sslverify' => false));
Exemple de travail:
<?php
/* Short and sweet */
define('WP_USE_THEMES', false);
require('../wp-blog-header.php');
?>
<?php
define('FACEBOOK_APPID','123'); // replace 123 with your app id
define('FACEBOOK_APPSECRET','abc'); // replace abc with your app secret
define('REDIRECTURI','http://your.redirect.url');
if ($_GET['code'] != '') {
if ($_GET['state'] != '' && wp_verify_nonce($_GET['state'], 'my-nonce')) {
$http = new WP_Http;
$api_url = sprintf("https://graph.facebook.com/oauth/access_token?client_id=%s&redirect_uri=%s&client_secret=%s&code=%s",
urlencode(FACEBOOK_APPID),
urlencode(REDIRECTURI),
urlencode(FACEBOOK_APPSECRET),
urlencode($_GET['code'])
);
$response = $http->request($api_url, array('timeout' => 60, 'sslverify' => false));
if( is_wp_error( $response ) ) {
echo 'ERROR';
} else {
$args = wp_parse_args( wp_remote_retrieve_body($response), array() );
echo $args['access_token'];
}
}
} else {
$facebook_dialog_url = sprintf("https://www.facebook.com/dialog/oauth?client_id=%s&redirect_uri=%s&state=%s",
FACEBOOK_APPID,
urlencode(REDIRECTURI),
wp_create_nonce ('my-nonce')
);
echo '<a href="'. $facebook_dialog_url .'">LOGIN TO FACEBOOK</a> <br />';
}
?>
Pour répondre à ma propre question, lorsque vous utilisez WP_Http, le transport utilisé est sélectionné, dans cet ordre, dans ce tableau: $request_order = array( 'curl', 'streams', 'fsockopen' );
Si votre PHP prend en charge curl, WP_Http_Curl est utilisé. Curl ne prend pas en charge l’ajout des paramètres de tableau de corps lorsque la méthode est GET
WP_Http_Streams et WP_Http_Fsockopen, d’autre part, ajoutent les paramètres de tableau de corps.
L'argument body
est utilisé pour les demandes POST et est défini dans les en-têtes. Pour les requêtes GET, encodez les arguments de requête en URL (comme dans votre deuxième extrait).