对于机器人,我遇到了一个问题:
摘要和功能
当用户写(在聊天应用程序中)!添加spotify:track:someHash
时,我调用java
- 函数,然后调用PHP脚本。
仅供参考:我正在使用this git-project。我跟着documentation获取授权内容,当我在源代码中对它们进行硬编码时,我可以添加我的曲目。
让我告诉你重要的片段:
if (spotifyTrack.startsWith("spotify")) {
// this might be important, maybe need to change this?
URL url = new URL("http://www.example.com/spot/index.php");
URLConnection con = url.openConnection();
con.setDoOutput(true);
PrintStream ps = new PrintStream(con.getOutputStream());
ps.print("track=" + spotifyTrack);
con.getInputStream();
ps.close();
sendMessage.setText("Song added");
}
可以说,我的变量spotifyTrack包含这样的内容:
spotify:track:06faVvKZVHivuKgL8NUMQr
所以,我正在调用 index.php
require 'vendor/autoload.php';
// I'm calling another script here, add.php, you see why down below
$session = new SpotifyWebAPI\Session('My ID','My Secret','http://www.example.com./spot/add.php');
$api = new SpotifyWebAPI\SpotifyWebAPI();
$scopes = array(
'playlist-read-private',
'user-read-private',
'playlist-modify-public'
);
$authorizeUrl = $session->getAuthorizeUrl(array(
'scope' => $scopes
));
header('Location: ' . $authorizeUrl);
die();
// Start using the API!
这是第二个脚本: add.php
require 'vendor/autoload.php';
$session = new SpotifyWebAPI\Session('My Id', 'MY Secret','http://www.example.com/spot/add.php');
$api = new SpotifyWebAPI\SpotifyWebAPI();
$scopes = array(
'playlist-read-private',
'user-read-private',
'playlist-modify-public'
);
$authorizeUrl = $session->getAuthorizeUrl(array(
'scope' => $scopes
));
// Request a access token using the code from Spotify
$session->requestAccessToken($_GET['code']);
$accessToken = $session->getAccessToken();
// Set the access token on the API wrapper
$api->setAccessToken($accessToken);
$track = explode(":", $_POST['track']);
// Start using the API!
$api->addUserPlaylistTracks('my user', 'my playlist id', array(
$track[2],
));
正如您所知,有些东西是多余的,而不是最好的方法。但是,我被困了,因为我不知道接下来该做什么。您必须指定重定向URI ,因此我添加了 index.php 和 add.php 。
问题:如果我从我的java-programm调用index.php并将index.php中的URL更改为index.php,它将以无限重定向循环结束。
但是,调用脚本add.php将导致丢失POST-data
。
从我的理解:我必须调用index.php,需要重定向来获取代码参数。 (猜猜OAuth有关吗?)
我的问题:如何在重定向(使用header()
)后保留POST数据而不会丢失我的请求?
答案 0 :(得分:1)
如果您需要将数据转发到另一个页面,您可以使用会话:
session_start();
$_SESSION['post_data'] = $_POST;
答案 1 :(得分:1)
@cKarsten解决方案在我眼前是开销的,因为$_POST['track']
的值只需要一次,而这在重定向到的页面中。此外,数据也不必存储。
我希望通过将index.php
的值作为get-paramater传递给$_POST['track']
来修改app.php
。 app.php $_POST['track']
分别必须更改为$_GET['track']
。
我证明了这一点。以下是不安全的,但显示了我会这样做的方式。 修改后的代码在上一行中标有“// ADDED:”。
require 'vendor/autoload.php';
// I'm calling another script here, add.php, you see why down below
$session = new SpotifyWebAPI\Session('My ID','My Secret','http://www.example.com./spot/add.php');
$api = new SpotifyWebAPI\SpotifyWebAPI();
$scopes = array(
'playlist-read-private',
'user-read-private',
'playlist-modify-public'
);
$authorizeUrl = $session->getAuthorizeUrl(array(
'scope' => $scopes
));
// ADDED: if $authorizeUrl contains at least one get-paramater use "&". Otherwise "?". In this sample I am using "&".
$authorizeUrl .= "&track=".$_POST['track'];
header('Location: ' . $authorizeUrl);
die();
// Start using the API!
不要忘记更新add.php
。