PHP:使用Post方法生成令牌

PHP:使用Post方法生成令牌,php,Php,你好 在回到Stackoverflow之前,我已经用谷歌搜索了整个下午,但没有真正成功 我想做的是通过引用他们的api从MyFoxAPI中获取一个令牌,其中 必须生成新的令牌才能执行API调用。这个 可以通过调用以下方法来请求令牌 并提供以下参数 (通过POST):客户id、客户机密、用户名、密码和密码 将“”类型设置为密码 因此,我的代码是: function getToken() { $clientID = "a65000ee0c57f2e37260e90c375c3"; $clientSe

你好

在回到Stackoverflow之前,我已经用谷歌搜索了整个下午,但没有真正成功

我想做的是通过引用他们的api从MyFoxAPI中获取一个令牌,其中

必须生成新的令牌才能执行API调用。这个 可以通过调用以下方法来请求令牌 并提供以下参数 (通过POST):客户id、客户机密、用户名、密码和密码 将“”类型设置为密码

因此,我的代码是:

function getToken()
{
$clientID = "a65000ee0c57f2e37260e90c375c3";
$clientSecret = "MyLongSecretCode";
$exportFile = "myfile.txt";
$userName = "somebody@somewhere.com";
$userPass = "myPassword123";
$sourceWebsite = "https://api.myfox.me/oauth2/token?client_id=" . $clientID .  "&client_secret=" . $clientSecret . "&username=" . $userName . "&password=" . $userPass . "&grant_type=password";

file_put_contents($exportFile, fopen($sourceWebsite , 'r'));
}
我得到的只是一个PHP错误,它说该方法是不允许的

你知道我在这里遗漏了什么吗

非常感谢你在这个问题上的帮助

编辑2017年3月17日:

其他用户告诉我,我可能可以通过使用curl来实现这一点,同样,通过阅读文档,我可以做到这一点:

必须生成新的令牌才能执行API调用。这个 可以通过调用以下方法来请求令牌 并提供以下参数 (通过POST):客户id、客户机密、用户名、密码和密码 将“”类型设置为密码。curl-u CLIENT\u ID:CLIENT\u SECRET -d '授权类型=密码和用户名=您的用户名和密码=您的密码' 或curl-d '授权类型=密码和客户id=客户id和客户机密=客户机密和用户名=您的用户名和密码=您的密码'

现在,对于我的问题:有没有一种方法可以将这个curl-u查询转换为php指令,并将内容输出到一个文件中,如下所示:

{"access_token":"********************************","expires_in":3600,"token_type":"Bearer","scope":null,"refresh_token":"********************************"}

再次感谢您的帮助。

非常感谢大家的提示,下面是一个有效的脚本:

我希望这个脚本(和这篇文章)能在某个时候对其他人有所帮助。祝你周末愉快



非常感谢大家的提示,下面是一个有效的脚本:

我希望这个脚本(和这篇文章)能在某个时候对其他人有所帮助。祝你周末愉快




file\u put\u默认情况下,内容将执行
GET
请求,而不是
POST
。您可能需要告诉他们如何正确地使用post并传递post数据,或者使用另一个工具,比如curl,它允许更简单的发布,但总体上使用起来有点复杂。两者都会做同样的事情。@JonathanKuhn:谢谢,我会看看这篇文章。很抱歉,如果是重复的。在您提供给我的示例中,还有一个问题。在我的示例中,'var1'=>'some content',var1将是'client_id','some content'将是'a6500ee0c57f2e37260e90c375c3'。我说的对吗?没关系。虽然这不是一个精确的相关性,但这篇文章应该回答这个问题,这就是为什么我将它标记为重复的原因。我知道,如果你以前从未这样做过,那么可能有点难以理解你需要搜索什么。只是猜测一下,但你需要将数据作为post数据发送过来。它不像您在这里所做的那样通过URL传递。在重复问题的顶部答案中,您可以看到他们正在创建一个名为
$postdata
的数组,并在
$opts
数组下传递该数组。它保存已发布的数据。您不会像在这里传递
https://URL/token?client_id=“$clientID.”和客户机密=" . $clientSecret…等
。这样通过URL对于密钥/令牌或密码等机密数据来说是不好的。默认情况下,文件内容将执行
GET
请求,而不是
POST
。您可能需要告诉他们如何正确地使用post并传递post数据,或者使用另一个工具,比如curl,它允许更简单的发布,但总体上使用起来有点复杂。两者都会做同样的事情。@JonathanKuhn:谢谢,我会看看这篇文章。很抱歉,如果是重复的。在您提供给我的示例中,还有一个问题。在我的示例中,'var1'=>'some content',var1将是'client_id','some content'将是'a6500ee0c57f2e37260e90c375c3'。我说的对吗?没关系。虽然这不是一个精确的相关性,但这篇文章应该回答这个问题,这就是为什么我将它标记为重复的原因。我知道,如果你以前从未这样做过,那么可能有点难以理解你需要搜索什么。只是猜测一下,但你需要将数据作为post数据发送过来。它不像您在这里所做的那样通过URL传递。在重复问题的顶部答案中,您可以看到他们正在创建一个名为
$postdata
的数组,并在
$opts
数组下传递该数组。它保存已发布的数据。您不会像在这里传递
https://URL/token?client_id=“$clientID.”&client_secret=“..$clientSecret…etc
。这样通过URL被认为对密钥/令牌或密码等机密数据有害。
<?php

$clientID = 'b85036758c385c3cd0c57f2e37260f91';
$clientSecret = 'MyLongSecretCode';
$username = 'myemailaddress@provider.net';
$passwd = 'mypassword';

// Get cURL resource
$curl = curl_init();
// Set some options - we are passing in a useragent too here
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'https://api.myfox.me/oauth2/token',
    CURLOPT_USERAGENT => 'Codular Sample cURL Request',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => array(
        'grant_type' => 'password',
        'client_id' => $clientID,
        'client_secret' => $clientSecret,
        'username' => $username,
        'password' => $passwd
    )
));
// Send the request & save response to $resp
$resp = curl_exec($curl);   

echo $resp;

// Close request to clear up some resources
curl_close($curl);

?>