小编unf*_*vio的帖子

Google API PHP离线访问,"invalid_grant:代码已被兑换"

如何在用户撤销授权之前永久授权Google客户端?

我正在尝试创建一个连接到Google日历的应用.它必须在PHP中运行,因此我使用谷歌提供的Google API PHP客户端.

该应用程序需要具有脱机访问权限,以便在用户不在会话中时可以使用.该应用程序旨在让用户在网站等上公开管理和显示他的日历.

我使用服务方法(具有客户端ID和客户端密钥)在Google控制台中创建了凭据.使用Google API客户端,我还要求用户授权.我打开一个新的浏览器窗口,用户授权,Google会返回授权码.我使用此代码,存储并使用它来授权客户端,该客户端成功连接到Google日历并交换数据.

现在,我明白这是一个即将到期的令牌.除非我使用离线访问,我设置.但是,几分钟或更短时间后,我总会收到错误:Error fetching OAuth2 access token, message: 'invalid_grant: Code was already redeemed.

这是我用来连接客户端的代码:

$client = new \Google_Client();
$client->setApplicationName( 'My App' );
$client->setScopes( array( \Google_Service_Calendar::CALENDAR ) );
$client->setClientId( $this->google_client_id );
$client->setClientSecret( $this->google_client_secret );
$client->setRedirectUri( $this->google_client_redirect );
$client->setAccessType( 'offline' );

if ( $code = $this->google_client_auth ) {

    try {

        $client->authenticate( $code );

    } catch( \Exception $e ) {
            var_dump( $e );
    }    

}

return new \Google_Service_Calendar( $client );
Run Code Online (Sandbox Code Playgroud)

这是一个类中的方法.

客户端ID和客户端密钥存储在应用程序设置中.

我也将用户返回的代码存储在一个设置中,但我认为这是我做错的地方?我在一个单独的方法(也使用相同的客户端ID)中将链接放到Google OAuth窗口并秘密和设置离线方法).并获得授权工作.我可以到达日历.它只是不会持续很长时间...

php oauth google-api google-oauth google-api-php-client

16
推荐指数
1
解决办法
2万
查看次数

如何检查Google Client API密钥是否对Google PHP API库有效?

我已在PHP应用程序中正确实现了Google API客户端.我能够连接到我想要的服务.

但现在我想检查用户输入的API密钥是否有效.

我查看了Google_Client()类公开的方法,但我认为我不确定如何检查.

下面是我的类中创建客户端的方法:

    private function client( $api_key ) {

        $client = new \Google_Client();
        $client->setClassConfig( 'Google_Cache_File', 'directory',  $this->cache_dir );
        $client->setDeveloperKey( $api_key );
        $client->setApplicationName( $this->name );
        $client->setScopes( array( \Google_Service_Calendar::CALENDAR_READONLY ) );
        $client->setAccessType( 'online' );

        return $client;
    }
Run Code Online (Sandbox Code Playgroud)

我想制作另一种方法来判断使用的API密钥是否有效......

    public function validate_api_key( $api_key ) {
        $client = $this->client( $api_key );

        // What should I use here to check if $api_key is valid?

        if ( $client ) {
            return true;
        }
        return 'error';
    }
Run Code Online (Sandbox Code Playgroud)

或者我应该连接到服务,然后检查我是否有读取访问权限?但我相信有一种更简单,更好的方法可以做到这一点......

php client google-api api-key

7
推荐指数
1
解决办法
1923
查看次数

在 LI 元素中显示水平滚动条并强制水平溢出

我有一些 CSS 和 HTML,如下所示。有一段 JavaScript 代码可以将 .tab 转换为 #tab-container 的选项卡式元素。由于 #tab-container 具有固定的宽度和高度,如果 .tab 的内容超过宽度/高度,则会隐藏或溢出。对于 UL,我希望它溢出并在 div.tab 内有滚动条。只应出现水平滚动条。我尝试使用下面的代码,但由于某种原因我只能垂直滚动(LI填充宽度限制,然后出现更多行......我只想要一行+水平滚动)。我认为我不能真正更改这两个 DIV,否则选项卡将被破坏。我需要 .tab 层内的解决方案。

HTML:

<div id="tab-container">
    <div class="tab">
       <ul>
           <li><img src="img01.png" width="96" height="96" /></li>
           <li><img src="img02.png" width="96" height="96" /></li>
           <li><img src="img03.png" width="96" height="96" /></li>
           <li><img src="img04.png" width="96" height="96" /></li>
       </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

#tab-container { width: 500px; height: 200px; position: relative; overflow: hidden; } 
.tab { position: relative; overflow: hidden;}
#tab-container .tab ul { position: absolute; width: auto; display: block; overflow: scroll; }
#tab-container …
Run Code Online (Sandbox Code Playgroud)

html css positioning scrollbars overflow

5
推荐指数
1
解决办法
1万
查看次数

使用PHPStorm在Windows上使用SASS进行开发

我在Windows上运行PHPStorm IDE.

我想开始使用Zurb Foundation并使用SCSS编写我的样式表.我需要安装Ruby或Compass才能这样做吗?

有没有办法让PHPStorm在编辑.scss文件的时候在我的项目中(在每个项目的自定义路径中)为我自动编译.css样式表?

我已经看过这个http://www.jetbrains.com/phpstorm/webhelp/transpiling-sass-less-and-scss-to-css.html,但看起来是针对unix系统的说明,而我运行的是Windows.

到目前为止,我做了以下事情:

  1. 我已经安装了http://rubyinstaller.org/然后
  2. 在ruby/bin文件夹中成功安装了sass和指南针gems
  3. 在此之后,我指出了PHPStorm中的项目设置并告诉了在哪里寻找指南针

此时该怎么办?使用Compass变量为我的项目定义config.rb,以查找SASS文件的位置以及编译它们的位置?我还该怎么办?

ruby windows sass phpstorm compass-sass

4
推荐指数
1
解决办法
2163
查看次数

PHP使用括号分隔的字符串中的键名创建多维关联数组

我有一个字符串,括号中包含可变数量的键名,例如:

$str = '[key][subkey][otherkey]';
Run Code Online (Sandbox Code Playgroud)

我需要创建一个多维数组,该数组具有在字符串中表示的相同键($value这里只是一个不重要的字符串值):

$arr = [ 'key' => [ 'subkey' => [ 'otherkey' => $value ] ] ];
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢这种其他符号:

$arr['key']['subkey']['otherkey'] = $value;
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想像对待字符串那样追加数组键,但据我所知,这是不可能的.我认为array_push()在这里没有帮助.起初我以为我可以使用正则表达式从字符串中获取方括号中的值:

preg_match_all( '/\[([^\]]*)\]/', $str, $has_keys, PREG_PATTERN_ORDER );
Run Code Online (Sandbox Code Playgroud)

但我只有一个没有任何层次结构的非关联数组,这对我没用.

所以我提出了以下几点:

$str = '[key][subkey][otherkey]';
$value = 'my_value';
$arr = [];

preg_match_all( '/\[([^\]]*)\]/', $str, $has_keys, PREG_PATTERN_ORDER );

if ( isset( $has_keys[1] ) ) {

  $keys = $has_keys[1];
  $k = count( $keys );
  if ( $k > 1 ) {
    for ( $i=0; $i<$k-1; $i++ ) …
Run Code Online (Sandbox Code Playgroud)

php regex arrays string multidimensional-array

4
推荐指数
1
解决办法
960
查看次数

在foreach循环中跳过没有值的数组中的键

我有一个普通的一维数组,我们称它为$ myarray,其中几个键的范围从[0]到[34].有些钥匙可能是空的.

假设我想在foreach循环中使用这样的数组

 $i = 1;
 $choices = array(array('text' => ' ', 'value' => ' '));
 foreach ( $myarray as $item ) :
      $count = $i++; 
      $choices[] = array('text' => $count, 'value' => $count, 'price' => $item);
 endforeach;
Run Code Online (Sandbox Code Playgroud)

我希望在这个foreach循环中跳过所有空键,因此我在这里构建的另一个数组($ choices)可能比$ myarray的行数少.但与此同时,正如您所看到的,我计算循环,因为我需要增加一个数字作为正在构建的新数组的一个键的值.计数应该是渐进的(1..2..3..4 ......).

谢谢

php arrays foreach key

2
推荐指数
1
解决办法
1万
查看次数