首页 >CMS教程 >WordPress >Oauth,Twitter,WordPress HTTP API和您

Oauth,Twitter,WordPress HTTP API和您

Lisa Kudrow
Lisa Kudrow原创
2025-02-18 08:30:12388浏览

OAuth, Twitter, the WordPress HTTP API and You

Oauth,Twitter,WordPress HTTP API和您

钥匙要点

    oauth是一种身份验证协议,它提供了一种与受保护数据进行交互的更安全的方法,使应用程序可以代表用户行事而无需共享密码。 Twitter使用OAuth授权HTTP请求到其API。
  • >该教程提供了有关如何创建由WordPress HTTP API供电的PHP类的分步指南,用于消费Twitter。这包括在Twitter的键和访问令牌的应用程序管理中心上创建一个应用程序,对PHP类编码以及使用OAuth Authentication向Twitter提出HTTP请求。
  • 在教程中创建的PHP类可以在WordPress插件的上下文中用于访问Twitter数据。提供的示例包括检索最近的推文和更新配置文件描述。
  • >
  • >教程强调正确配置OAuth并使用正确的API键避免部署错误的重要性。它还强调了确保Oauth代币以防止未经授权访问的必要
  • 在以前的教程中,我们深入研究了WordPress HTTP API。我们甚至构建了以下插件,以演示其用法的真实示例:whois和社交数据小部件; WordPress登录,注册和评论的CATPCHA保护插件;和用于停止一次性电子邮件地址注册的插件。
  • 在本教程中,我们将介绍Oauth的世界,Twitter如何使用它来授权HTTP请求向其API授权,最后构建由WordPress HTTP API供电的PHP类,该插件可以在消费Twitter时利用Twitter时会利用。
  • > oauth
简介

> oauth是一种身份验证协议,提供了一种简单,更安全,更安全的方式来发布和与受保护的数据进行交互。它允许用户批准应用程序代表他们行动而无需共享密码。>

>您代表用户存储受保护的数据,他们不应在网上传播密码以访问它。相反,您可以使用OAuth使用户访问其数据,同时保护其帐户凭据。

编码PHP类

>关于如何使用OAuth身份验证进行http请求的分解,将在我们编码PHP类时解释。

>首先,前往Twitter的应用程序管理中心;创建一个应用程序以获取您的键并访问令牌。

>逐步指南创建Twitter应用程序和获取API键,请访问hostoople.com

>

创建PHP类,并包括将存储各种参数的属性。这些在下面概述了。

<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>

构造函数将接受您的Twitter应用程序消费者(或API)密钥和秘密的数组,以及访问令牌和访问令牌秘密并将其保存到各自的属性中。

<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>
接下来是将接受HTTP请求的GET或发布参数的方法。

<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>
>私有方法_build_signature_base_string()接受以下参数以创建签名基础字符串:请求URL,请求方法或HTTP动词和OAuth凭据(消费者密钥和秘密和秘密; access and; access token and秘密;以及get参数;以及get参数;这是一个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>
_generate_oauth_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>
> build_oauth()创建一个包含以下数据的数组并将其保存到OAuth_details属性,该属性将稍后由pertureization_header()用于生成授权标头。

> oauth_consumer_key - Twitter应用程序消费者密钥。
  • > oauth_nonce - 一个随机字符串,由客户端唯一生成,允许服务器验证在经常使用time()或mt_rand()的创建之前从未提出过请求
  • > oauth_signature_method - 签名方法通常是时代
  • “ hmac-sha1”
  • > oauth_token - 应用程序oauth token。
  • > oauth_timestamp - 当前的时间戳使用time()
  • >创建
  • > oauth_version - Twitter使用版本1.0
  • > oauth_signature - _generate_oauth_signature()
  • 生成的OAuth签名
  • 请求方法或http动词也保存到请求_method属性。

这是我们讨论的授权_header()方法的代码。

>
<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>

> process_request()将使用wp_remote_get()或wp_remote_post()发送get或发布请求,并根据请求方法发送,然后随后使用wp_remote_retrieve_body()。

<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>
请参阅本教程,以更好地了解WordPress HTTP API及其工作方式。

>最后,我们关闭了课程。

<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>

请注意:在set_post_fields()中

>示例:

<span>} // Twitter_API_WordPress</span>
请参阅下面的类用法,以便更好地理解。

如何使用类

必须在WordPress插件的上下文中使用此类。它无法作为独立类,因为它需要WordPress http api才能工作。
<span>$SomeObject->getObjectOne()->getObjectTwo()</span>
>

>获取最新推文的列表或集合,请按照下面的指南进行操作。 注意:https://api.twitter.com/1.1/statuses/user_timeline.json是检索最新推文数据的资源URL。

首先,创建一个访问键和令牌的数组。>
<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>

设置请求URL和方法,其中w3guy是您的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>
最后,像这样处理请求。

>

<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>
如果一切顺利,变量$结果将使用您最近的推文的JSON数据填充。

例如,对于发布请求,说您要更新个人资料描述。

信用和资源

<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>
该课程的结构和代码受到詹姆斯·马利森(James Mallison)的php twitter客户端的启发。

要了解有关Twitter API和OAuth的更多信息,请参见下面的资源。

> oauth身份验证demystifified

> Twitter Oauth在方案上下文中的工作方式

    > Twitter的文档
  • 创建PHP OAUTH服务器
  • > IETF RFC
  • 结论
  • 在本文中,我们了解了OAuth以及如何使用由WordPress HTTP API供电的HTTP客户端类消耗Twitter。如前所述,该类应在WordPress插件中使用,因为它使用WordPress HTTP API,该插件仅在加载WordPress时才存在或实例化。这个PHP类可以用来派遣构建,例如,最近的推文窗口小部件。
  • 该代码可在GitHub上获得。随意叉,甚至提交拉的请求。
>确保订阅WordPress频道,以与我即将到来的教程保持一致。

快乐的编码。

经常询问有关Oauth,Twitter和WordPress HTTP API

的问题

>如何在WordPress站点上设置OAuth2?

>在WordPress网站上设置OAuth2涉及安装和配置OAuth2插件。您可以从WordPress插件目录上的几个插件中进行选择。安装插件后,您需要使用OAuth2提供商的详细信息(包括客户端ID和客户端秘密)进行配置。您可能还需要设置重定向的URL和范围,具体取决于提供商的要求。

>

> OAuth在Twitter API中的作用是什么?安全委派访问。它允许用户在不共享密码的情况下授予第三方应用程序访问其Twitter帐户。这意味着应用程序可以代表您与Twitter进行交互,执行诸如推文,阅读时间表和关注新用户之类的操作。

>

>如何解决Twitter中的部署错误API问题?可以通过确保正确配置您的应用程序并使用正确的API键来解决Twitter中的API问题。您还应确保您的应用程序不超过Twitter的速率限制。如果您仍在遇到问题,则可能值得与Twitter的开发人员提供更多帮助。

OAuth1.0和OAuth2.0?

oauth1.0和OAuth2.0之间有什么区别。但是,OAuth2.0是一个更加精简和强大的协议。它为开发人员提供了更大的灵活性,可用于各种平台上的应用程序,包括移动和桌面应用程序。另一方面,oauth1.0更复杂且灵活较低。 WordPress网站。这对于与外部API(例如Twitter API)进行交互可能很有用。要使用WordPress HTTP API,您需要使用wp_remote_get或wp_remote_post函数,传递在API端点的URL中。

>确保您的OAuth代币对于防止未经授权访问您的应用程序至关重要。您应该始终安全地存储代币,例如在安全数据库中,并且永远不要将其曝光在客户端代码中。您还应该实施令牌到期和刷新令牌,以确保即使令牌受到损害,也不能无限期地使用它。

>

>在将OAuth与WordPress集成时,面临哪些常见问题? >在将OAuth与WordPress集成时面临的一些常见问题包括OAuth插件的不正确配置,具有重定向URL的问题以及OAuth Provider的API问题。这些问题通常可以通过仔细检查您的配置并确保您使用正确的API键和重定向URL来解决这些问题。

>

>如何使用Twitter API对问题进行故障排除?使用Twitter,API可以涉及检查应用程序的配置,确保您使用正确的API键,并检查您的应用程序不超过Twitter的速率限制。您还可以使用Twitter的API参考文档来了解API的预期行为并确定任何潜在问题。

>

>我如何将OAuth2.0与Twitter API? .0使用Twitter API,您需要创建一个Twitter应用程序并获取API键。然后,您需要使用这些键来获得访问令牌,该键可用于验证您的API请求。请注意,Twitter的实现OAuth2.0是仅应用程序的,这意味着它只能用于不需要用户上下文的请求。

使用Miniorange OAuth 2.0服务器插件在WordPress中有什么好处? WordPress的Miniorange OAuth 2.0服务器插件提供了一种简单且安全的方法,可以在WordPress站点上设置OAuth2.0服务器。它支持多种赠款类型,包括授权代码,隐式,密码和客户端凭据,并且还支持JWT和SAML。这使其成为在您的WordPress网站上实现OAuth2.0的灵活和强大选择。

>

以上是Oauth,Twitter,WordPress HTTP API和您的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn