Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过PHP获得API Curl授权_Php_Curl_Php Curl - Fatal编程技术网

如何通过PHP获得API Curl授权

如何通过PHP获得API Curl授权,php,curl,php-curl,Php,Curl,Php Curl,我正在与dr chrono API合作,并尝试初始化第一步,即授权 API 以下是授权样本: https://drchrono.com/o/authorize/?redirect_uri=REDIRECT_URI_ENCODED&response_type=code&client_id=CLIENT_ID_ENCODED&scope=SCOPES_ENCODED 以下是我尝试过的: 1.)我已经尝试了下面的第一个代码 <?php echo "<a

我正在与dr chrono API合作,并尝试初始化第一步,即授权

API

以下是授权样本:

https://drchrono.com/o/authorize/?redirect_uri=REDIRECT_URI_ENCODED&response_type=code&client_id=CLIENT_ID_ENCODED&scope=SCOPES_ENCODED
以下是我尝试过的:

1.)我已经尝试了下面的第一个代码

<?php

echo "<a href='https://drchrono.com/o/authorize/?redirect_uri=https://example_site.com/return_page.php&response_type=code&client_id=myclient-id-goeshere&scope=BASE_SCOPE:[read|write]'>Authorize</a>";


?>
2.)使用Curl

$ci = 'my-client-id-goes-here';
$ci_encode = urlencode($ci);

$uri = 'https://example_site.com/return_page.php';
$uri_encode = $uri;
$url = "https://drchrono.com/o/authorize/";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'response_type'=>'code', 
    'client_id'=>$ci_encode,
    'redirect_uri'=>$uri_encode,
    'scope'=>'BASE_SCOPE:[read|write]',
]));
$response = curl_exec($ch);

curl_close($ch);

print_r($response);
使用上面的curl代码甚至可以重定向我

我认为主要问题是范围设置不当。我如何解决这个问题

更新 curl的代码部分:

$ci = 'my-client-id';
$ci_encode = urlencode($ci);
$uri = 'https://example_site.com/return_page.php';
$uri_encode = $uri;
$url = "https://drchrono.com/o/authorize/?";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'response_type'=>'code', 
    'client_id'=>$ci,
    'redirect_uri'=>$uri,
    'scope'=>'patients:summary:read patients:summary:write calendar:read calendar:write clinical:read clinical:write'
]));
$response = curl_exec($ch);

curl_close($ch);

print_r($response);

而不是
BASE\u范围:[read | write]


文档中说,您可以在用户、日历、患者、患者中进行选择:摘要、账单、临床和实验室,并用这些值组成一个范围。

文档中说,“重定向uri”参数必须包含编码的URL。我认为您应该使用php函数
urlencode()
:“redirect\u uri”=>urlencode($uri\u encode),感谢您迄今为止的贡献。link-code选项现在正在使用范围,但是curl代码不起作用。我已经在curl中更新了作用域,但是当我运行代码时,在它加载的下一个页面上,如果我删除API URL中的反斜杠和问号参数,然后将API URL更改为,它将打印1,并且不会重定向,它会说CSRF失败。请查看更新后的Curl的更新代码部分。谢谢你,谢谢你
$ci = 'my-client-id';
$ci_encode = urlencode($ci);
$uri = 'https://example_site.com/return_page.php';
$uri_encode = $uri;
$url = "https://drchrono.com/o/authorize/?";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'response_type'=>'code', 
    'client_id'=>$ci,
    'redirect_uri'=>$uri,
    'scope'=>'patients:summary:read patients:summary:write calendar:read calendar:write clinical:read clinical:write'
]));
$response = curl_exec($ch);

curl_close($ch);

print_r($response);