Maison >Tutoriel CMS >WordPresse >OAuth, Twitter, l'API WordPress HTTP et vous
Dans les tutoriels précédents, nous avons plongé profondément dans l'API WordPress HTTP. Nous sommes même allés jusqu'à la construction des plugins suivants pour démontrer des exemples du monde réel de son utilisation: Whois de domaine et widget de données sociales; Plugin de protection CAPTCHA pour la connexion, enregistrement et commentaire WordPress; et plugin pour arrêter l'inscription de l'adresse e-mail jetable.
Dans ce tutoriel, nous serons présentés au monde d'Oauth, comment Twitter l'utilise pour autoriser les demandes HTTP à son API et enfin, construire une classe PHP alimentée par API HTTP WordPress dont les plugins peuvent profiter lors de la consommation de Twitter .
OAuth est un protocole d'authentification qui fournit un moyen simple, plus sûr et plus sécurisé de publier et d'interagir avec des données protégées. Il permet aux utilisateurs d'approuver les applications d'agir en leur nom sans partager leur mot de passe.
Si vous stockez des données protégées au nom de vos utilisateurs, ils ne devraient pas diffuser leurs mots de passe sur le Web pour y accéder. Au lieu de cela, vous pouvez utiliser OAuth pour donner à vos utilisateurs accès à leurs données, tout en protégeant leurs informations d'identification de compte.
Un aperçu de la façon dont les demandes HTTP à Twitter sont faites avec l'authentification OAuth seront expliquées car nous codons la classe PHP.
Tout d'abord, rendez-vous au centre de gestion des applications de Twitter; Créez une application pour saisir vos clés et votre jeton d'accès.
Un guide étape par étape sur la création d'applications Twitter et l'obtention des clés de l'API se trouvent sur hostoople.com
Créez la classe PHP et incluez les propriétés qui stockeront les différents paramètres. Ceux-ci sont décrits ci-dessous.
<span>class Twitter_API_WordPress { </span> <span>/** <span>@var <span>string</span> OAuth access token */</span> </span> <span>private $oauth_access_token; </span> <span>/** <span>@var <span>string</span> OAuth access token secrete */</span> </span> <span>private $oauth_access_token_secret; </span> <span>/** <span>@var <span>string</span> Consumer key */</span> </span> <span>private $consumer_key; </span> <span>/** <span>@var <span>string</span> consumer secret */</span> </span> <span>private $consumer_secret; </span> <span>/** <span>@var <span>array</span> POST parameters */</span> </span> <span>private $post_fields; </span> <span>/** <span>@var <span>string</span> GET parameters */</span> </span> <span>private $get_field; </span> <span>/** <span>@var <span>array</span> OAuth credentials */</span> </span> <span>private $oauth_details; </span> <span>/** <span>@var <span>string</span> Twitter's request URL */</span> </span> <span>private $request_url; </span> <span>/** <span>@var <span>string</span> Request method or HTTP verb */</span> </span> <span>private $request_method;</span>
Le constructeur acceptera un tableau de la clé de consommation (ou API) d'application de votre Twitter, ainsi que du jeton d'accès et d'accès à jeton et de les enregistrer dans leurs propriétés respectives.
<span>/** Class constructor */ </span> <span>public function __construct( $settings ) { </span> <span>if ( ! isset( $settings['oauth_access_token'] ) </span> <span>|| ! isset( $settings['oauth_access_token_secret'] ) </span> <span>|| ! isset( $settings['consumer_key'] ) </span> <span>|| ! isset( $settings['consumer_secret'] ) </span> <span>) { </span> <span>return new WP_Error( 'twitter_param_incomplete', 'Make sure you are passing in the correct parameters' ); </span> <span>} </span> <span>$this->oauth_access_token = $settings['oauth_access_token']; </span> <span>$this->oauth_access_token_secret = $settings['oauth_access_token_secret']; </span> <span>$this->consumer_key = $settings['consumer_key']; </span> <span>$this->consumer_secret = $settings['consumer_secret']; </span> <span>}</span>
Ensuite sont les méthodes qui accepteront les paramètres GET ou POST pour la demande HTTP.
<span>/** </span><span> * Store the POST parameters </span><span> * </span><span> * <span>@param <span>array</span> $array array of POST parameters </span></span><span> * </span><span> * <span>@return $this </span></span><span> */ </span> <span>public function set_post_fields( array $array ) { </span> <span>$this->post_fields = $array; </span> <span>return $this; </span> <span>} </span> <span>/** </span><span> * Store the GET parameters </span><span> * </span><span> * <span>@param $string </span></span><span> * </span><span> * <span>@return $this </span></span><span> */ </span> <span>public function set_get_field( $string ) { </span> <span>$this->getfield = $string; </span> <span>return $this; </span> <span>}</span>
La méthode privée _build_signature_base_string () accepte les arguments suivants pour créer la chaîne de base de la signature: l'URL de la demande, la méthode de demande ou le verbe http et les informations d'identification OAuth (Consumer Key and Secret; Access Token and Secret; et les paramètres de get si c'est une demande de get).
<span>/** </span><span> * Create a signature base string from list of arguments </span><span> * </span><span> * <span>@param <span>string</span> $request_url request url or endpoint </span></span><span> * <span>@param <span>string</span> $method HTTP verb </span></span><span> * <span>@param <span>array</span> $oauth_params Twitter's OAuth parameters </span></span><span> * </span><span> * <span>@return <span>string</span> </span></span><span> */ </span> <span>private function _build_signature_base_string( $request_url, $method, $oauth_params ) { </span> <span>// save the parameters as key value pair bounded together with '&' </span> <span>$string_params = array(); </span> <span>ksort( $oauth_params ); </span> <span>foreach ( $oauth_params as $key => $value ) { </span> <span>// convert oauth parameters to key-value pair </span> <span>$string_params[] = "<span><span>$key</span>=<span>$value</span>"</span>; </span> <span>} </span> <span>return "<span><span>$method</span>&"</span> . rawurlencode( $request_url ) . '&' . rawurlencode( implode( '&', $string_params ) ); </span> <span>}</span>
La méthode privée _generaterate_oauth_signature () accepte la chaîne de base de signature créée pour générer la signature OAuth.
<span>private function _generate_oauth_signature( $data ) { </span> <span>// encode consumer and token secret keys and subsequently combine them using & to a query component </span> <span>$hash_hmac_key = rawurlencode( $this->consumer_secret ) . '&' . rawurlencode( $this->oauth_access_token_secret ); </span> <span>$oauth_signature = base64_encode( hash_hmac( 'sha1', $data, $hash_hmac_key, true ) ); </span> <span>return $oauth_signature; </span><span>}</span>
le build_oauth () crée un tableau contenant les données suivantes et les enregistre sur la propriété OAuth_Details, qui sera utilisée ultérieurement par Authorization_Header () pour générer l'en-tête d'autorisation.
La méthode de demande ou le verbe http est également enregistré sur la propriété request_method.
<span>/** </span><span> * Build, generate and include the OAuth signature to the OAuth credentials </span><span> * </span><span> * <span>@param <span>string</span> $request_url Twitter endpoint to send the request to </span></span><span> * <span>@param <span>string</span> $request_method Request HTTP verb eg GET or POST </span></span><span> * </span><span> * <span>@return $this </span></span><span> */ </span> <span>public function build_oauth( $request_url, $request_method ) { </span> <span>if ( ! in_array( strtolower( $request_method ), array( 'post', 'get' ) ) ) { </span> <span>return new WP_Error( 'invalid_request', 'Request method must be either POST or GET' ); </span> <span>} </span> <span>$oauth_credentials = array( </span> <span>'oauth_consumer_key' => $this->consumer_key, </span> <span>'oauth_nonce' => time(), </span> <span>'oauth_signature_method' => 'HMAC-SHA1', </span> <span>'oauth_token' => $this->oauth_access_token, </span> <span>'oauth_timestamp' => time(), </span> <span>'oauth_version' => '1.0' </span> <span>); </span> <span>if ( ! is_null( $this->get_field ) ) { </span> <span>// remove question mark(?) from the query string </span> <span>$get_fields = str_replace( '?', '', explode( '&', $this->get_field ) ); </span> <span>foreach ( $get_fields as $field ) { </span> <span>// split and add the GET key-value pair to the post array. </span> <span>// GET query are always added to the signature base string </span> <span>$split = explode( '=', $field ); </span> <span>$oauth_credentials[ $split[0] ] = $split[1]; </span> <span>} </span> <span>} </span> <span>// convert the oauth credentials (including the GET QUERY if it is used) array to query string. </span> <span>$signature = $this->_build_signature_base_string( $request_url, $request_method, $oauth_credentials ); </span> <span>$oauth_credentials['oauth_signature'] = $this->_generate_oauth_signature( $signature ); </span> <span>// save the request url for use by WordPress HTTP API </span> <span>$this->request_url = $request_url; </span> <span>// save the OAuth Details </span> <span>$this->oauth_details = $oauth_credentials; </span> <span>$this->request_method = $request_method; </span> <span>return $this; </span> <span>}</span>
Voici le code de la méthode Authorization_Header () dont nous avons parlé.
<span>/** </span><span> * Generate the authorization HTTP header </span><span> * <span>@return <span>string</span> </span></span><span> */ </span> <span>public function authorization_header() { </span> <span>$header = 'OAuth '; </span> <span>$oauth_params = array(); </span> <span>foreach ( $this->oauth_details as $key => $value ) { </span> <span>$oauth_params[] = "<span><span>$key</span>=\""</span> . rawurlencode( $value ) . '"'; </span> <span>} </span> <span>$header .= implode( ', ', $oauth_params ); </span> <span>return $header; </span> <span>}</span>
Le process_request () enverra la demande GET ou POST en utilisant wp_remote_get () ou wp_remote_post () en fonction de la méthode de demande et renvoyez par la suite la réponse à l'aide de wp_remote_retrieve_body ().
<span>/** </span><span> * Process and return the JSON result. </span><span> * </span><span> * <span>@return <span>string</span> </span></span><span> */ </span> <span>public function process_request() { </span> <span>$header = $this->authorization_header(); </span> <span>$args = array( </span> <span>'headers' => array( 'Authorization' => $header ), </span> <span>'timeout' => 45, </span> <span>'sslverify' => false </span> <span>); </span> <span>if ( ! is_null( $this->post_fields ) ) { </span> <span>$args['body'] = $this->post_fields; </span> <span>$response = wp_remote_post( $this->request_url, $args ); </span> <span>return wp_remote_retrieve_body( $response ); </span> <span>} </span> <span>else { </span> <span>// add the GET parameter to the Twitter request url or endpoint </span> <span>$url = $this->request_url . $this->get_field; </span> <span>$response = wp_remote_get( $url, $args ); </span> <span>return wp_remote_retrieve_body( $response ); </span> <span>} </span> <span>}</span>
Voir ce tutoriel pour une meilleure compréhension de l'API WordPress HTTP et de son fonctionnement.
Et enfin, nous fermons la classe.
<span>} // Twitter_API_WordPress</span>
Veuillez noter: dans set_post_fields (), set_get_field () et build_oauth (), l'objet $ Ceci est renvoyé dans chaque méthode afin de prendre en charge le chaînage de la méthode.
Exemple:
<span>$SomeObject->getObjectOne()->getObjectTwo()</span>
Voir l'utilisation des classes ci-dessous pour une meilleure compréhension.
Cette classe doit être utilisée dans le contexte d'un plugin WordPress. Cela ne fonctionnera pas comme une classe autonome car il nécessite l'API WordPress HTTP pour qu'il fonctionne.
Pour obtenir une liste ou une collection de vos tweets les plus récents, suivez le guide ci-dessous. Remarque: https://api.twitter.com/1.1/statures/user_timeline.json est l'URL de ressource pour récupérer les données de tweet récentes.
Tout d'abord, créez un tableau de vos clés d'accès et de vos jetons.
<span>class Twitter_API_WordPress { </span> <span>/** <span>@var <span>string</span> OAuth access token */</span> </span> <span>private $oauth_access_token; </span> <span>/** <span>@var <span>string</span> OAuth access token secrete */</span> </span> <span>private $oauth_access_token_secret; </span> <span>/** <span>@var <span>string</span> Consumer key */</span> </span> <span>private $consumer_key; </span> <span>/** <span>@var <span>string</span> consumer secret */</span> </span> <span>private $consumer_secret; </span> <span>/** <span>@var <span>array</span> POST parameters */</span> </span> <span>private $post_fields; </span> <span>/** <span>@var <span>string</span> GET parameters */</span> </span> <span>private $get_field; </span> <span>/** <span>@var <span>array</span> OAuth credentials */</span> </span> <span>private $oauth_details; </span> <span>/** <span>@var <span>string</span> Twitter's request URL */</span> </span> <span>private $request_url; </span> <span>/** <span>@var <span>string</span> Request method or HTTP verb */</span> </span> <span>private $request_method;</span>
Définissez l'URL et la méthode de la demande où W3guy est votre nom d'utilisateur Twitter.
<span>/** Class constructor */ </span> <span>public function __construct( $settings ) { </span> <span>if ( ! isset( $settings['oauth_access_token'] ) </span> <span>|| ! isset( $settings['oauth_access_token_secret'] ) </span> <span>|| ! isset( $settings['consumer_key'] ) </span> <span>|| ! isset( $settings['consumer_secret'] ) </span> <span>) { </span> <span>return new WP_Error( 'twitter_param_incomplete', 'Make sure you are passing in the correct parameters' ); </span> <span>} </span> <span>$this->oauth_access_token = $settings['oauth_access_token']; </span> <span>$this->oauth_access_token_secret = $settings['oauth_access_token_secret']; </span> <span>$this->consumer_key = $settings['consumer_key']; </span> <span>$this->consumer_secret = $settings['consumer_secret']; </span> <span>}</span>
Enfin, traitez la demande comme ça.
<span>/** </span><span> * Store the POST parameters </span><span> * </span><span> * <span>@param <span>array</span> $array array of POST parameters </span></span><span> * </span><span> * <span>@return $this </span></span><span> */ </span> <span>public function set_post_fields( array $array ) { </span> <span>$this->post_fields = $array; </span> <span>return $this; </span> <span>} </span> <span>/** </span><span> * Store the GET parameters </span><span> * </span><span> * <span>@param $string </span></span><span> * </span><span> * <span>@return $this </span></span><span> */ </span> <span>public function set_get_field( $string ) { </span> <span>$this->getfield = $string; </span> <span>return $this; </span> <span>}</span>
Si tout se passe bien, le résultat de la variable sera rempli de données JSON de vos tweets récents.
Pour une demande de poste, par exemple, disons que vous souhaitez mettre à jour la description de votre profil.
<span>/** </span><span> * Create a signature base string from list of arguments </span><span> * </span><span> * <span>@param <span>string</span> $request_url request url or endpoint </span></span><span> * <span>@param <span>string</span> $method HTTP verb </span></span><span> * <span>@param <span>array</span> $oauth_params Twitter's OAuth parameters </span></span><span> * </span><span> * <span>@return <span>string</span> </span></span><span> */ </span> <span>private function _build_signature_base_string( $request_url, $method, $oauth_params ) { </span> <span>// save the parameters as key value pair bounded together with '&' </span> <span>$string_params = array(); </span> <span>ksort( $oauth_params ); </span> <span>foreach ( $oauth_params as $key => $value ) { </span> <span>// convert oauth parameters to key-value pair </span> <span>$string_params[] = "<span><span>$key</span>=<span>$value</span>"</span>; </span> <span>} </span> <span>return "<span><span>$method</span>&"</span> . rawurlencode( $request_url ) . '&' . rawurlencode( implode( '&', $string_params ) ); </span> <span>}</span>
La structure et le code de cette classe ont été inspirés par le client PHP Twitter de James Mallison.
Pour en savoir plus sur l'API Twitter et OAuth, voir les ressources ci-dessous.
Dans cet article, nous avons appris sur OAuth et comment consommer Twitter à l'aide d'une classe client HTTP alimentée par API HTTP WordPress. Comme indiqué précédemment, cette classe doit être utilisée dans un plugin WordPress car il utilise l'API WordPress HTTP, qui n'est présent ou instancié que lorsque WordPress est chargé. Cette classe PHP peut être utile dans la construction, par exemple, un récent widget de tweets.
Le code est disponible sur github. N'hésitez pas à se nourrir et même à soumettre des demandes de traction.
Assurez-vous de vous abonner à la chaîne WordPress pour se tenir au courant de mes prochains tutoriels.
codage heureux.
La configuration de OAuth2 sur votre site WordPress implique l'installation et la configuration d'un plugin OAuth2. Vous pouvez choisir parmi plusieurs plugins disponibles dans le répertoire de plugin WordPress. Une fois que vous avez installé le plugin, vous devrez le configurer avec les détails de votre fournisseur OAuth2, y compris l'ID client et le secret du client. Vous devrez peut-être également configurer des URL et des portées de redirection, en fonction des exigences de votre fournisseur.
OAuth joue un rôle crucial dans l'API Twitter en fournissant accès délégué sécurisé. Il permet aux utilisateurs d'accorder l'accès aux applications tierces à leur compte Twitter sans partager leur mot de passe. Cela signifie que les applications peuvent interagir avec Twitter en votre nom, effectuer des actions comme tweeter, lire votre calendrier et suivre de nouveaux utilisateurs.
Déploiement d'erreurs Les problèmes d'API dans Twitter peuvent être résolus en vous assurant que votre application est correctement configurée et que vous utilisez les touches API correctes. Vous devez également vous assurer que votre demande ne dépasse pas les limites de taux de Twitter. Si vous rencontrez toujours des problèmes, cela peut valoir la peine de contacter le support des développeurs de Twitter pour une assistance supplémentaire.
oAuth1.0 et OAuth2.0 sont toutes deux des protocoles pour l'autorisation d'API sécurisée. Cependant, OAuth2.0 est un protocole plus rationalisé et puissant. Il offre plus de flexibilité pour les développeurs et peut être utilisé pour des applications sur une variété de plateformes, y compris les applications mobiles et de bureau. OAuth1.0, en revanche, est plus complexe et moins flexible.
L'API HTTP WordPress peut être utilisée pour envoyer des demandes HTTP à partir de votre Site WordPress. Cela peut être utile pour interagir avec des API externes, comme l'API Twitter. Pour utiliser l'API WordPress HTTP, vous devrez utiliser les fonctions WP_Remote_get ou WP_Remote_Post, en passant dans l'URL du point de terminaison de l'API avec lequel vous souhaitez interagir.
sécuriser vos jetons OAuth est crucial pour éviter un accès non autorisé à votre application. Vous devez toujours stocker vos jetons en toute sécurité, comme dans une base de données sécurisée, et ne jamais les exposer dans le code côté client. Vous devez également implémenter l'expiration des jetons et actualiser les jetons pour vous assurer que même si un jeton est compromis, il ne peut pas être utilisé indéfiniment.
Certains problèmes communs rencontrés lors de l'intégration de l'OAuth avec WordPress incluent une configuration incorrecte du plugin OAuth, des problèmes avec les URL de redirection et des problèmes avec l'API du fournisseur OAuth. Ces problèmes peuvent généralement être résolus en vérifiant soigneusement votre configuration et en vous assurant que vous utilisez les touches API correctes et que vous redirigez les URL.
Les problèmes de dépannage des problèmes de dépannage L'API Twitter peut impliquer la vérification de la configuration de votre application, vous assurer que vous utilisez les touches API correctes et la vérification que votre application ne dépasse pas les limites de taux de Twitter. Vous pouvez également utiliser la documentation de référence de l'API de Twitter pour comprendre le comportement attendu de l'API et pour identifier tout problème potentiel.
Pour utiliser OAuth2 .0 Avec l'API Twitter, vous devrez créer une application Twitter et obtenir vos clés API. Vous devrez ensuite utiliser ces clés pour obtenir un jeton d'accès, qui peut être utilisé pour authentifier vos demandes d'API. Notez que la mise en œuvre par Twitter de OAuth2.0 est uniquement en application, ce qui signifie qu'elle ne peut être utilisée que pour les demandes qui ne nécessitent pas de contexte utilisateur.
Le plugin de serveur Miniorange OAuth 2.0 pour WordPress fournit un moyen simple et sécurisé de configurer un serveur OAuth2.0 sur votre site WordPress. Il prend en charge plusieurs types de subventions, y compris le code d'autorisation, l'implicite, le mot de passe et les informations d'identification du client, et il prend également en charge JWT et SAML. Cela en fait un choix flexible et puissant pour implémenter OAuth2.0 sur votre site WordPress.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!