faulkj / fhirclient
一个简单的SMART on FHIR PHP客户端。
v3.0.1
2024-06-08 16:18 UTC
Requires
- php: >=7.0
- faulkj/webclient: 1.1.*
Requires (Dev)
- phpunit/phpunit: 9.*
README
这是一个简单的SMART on FHIR PHP客户端,SMART on FHIR是标准API,用于将应用程序与任何现代医疗保健系统集成。
安装
$ composer require faulkj/fhirclient
基本用法
EMR内嵌模式
在初始加载时
//Assumining this is the URL loaded by the EMR: https://my.website.com/launch/?iss=https://my.fhirserver.com/FHIRProxy/api/FHIR/R4&launch=abc123 use FaulkJ\FHIRClient; session_start(); $iss = parse_url($_GET["iss"]); $_SESSION["fhirParams"] = [ "{$iss['scheme']}://{$iss['host']}", "1234-5678-9012-3456-7890", [ "redirectURI" => "https://my.website.com" ] ]; $fhir = new FHIRClient(...$_SESSION["fhirParams"]); $fhir->getConformance($_GET["iss"]); $fhir->getAuthCode();
这将首先从 my.fhirserver.com/FHIRProxy/api/FHIR/R4 获取一个一致性声明/SMART配置,以检索授权和令牌端点。然后,它将从授权端点请求一个授权代码,触发重定向到 my.website.com。
在 my.website.com 重定向时
use FaulkJ\FHIRClient; session_start(); $fc = new FHIRClient(...$_SESSION["fhirParams"]); $fc->getAccessToken($_GET["code"]); //You are now authenticated and may query the FHIR server $obs = $fc->query("Observation?patient=12345678&code=12345-6"); if($obs->code == 200) echo $obs->body;
在后续页面加载或AJAX调用中,在发送查询之前,需要重新实例化FHIRClient
use FaulkJ\FHIRClient; session_start(); $fc = new FHIRClient(...$_SESSION["fhirParams"]); $pat = $fc->query("Patient/12345678"); if($pat->code == 200) echo $pat->body;
独立模式
在初始加载时
use FaulkJ\FHIRClient; session_start(); $iss = parse_url($_GET["iss"]); $_SESSION["fhirParams"] = [ "https:/my.fhirserver.com", "1234-5678-9012-3456-7890", [ "state" => base64_encode(rand()), "redirectURI" => "https://my.website.com", "authURI" => "FHIRProxy/oauth2/authorize", "tokenURI" => "FHIRProxy/oauth2/token" ] ]; $fc = new FHIRClient(...$_SESSION["fhirParams"]); $fc->getConformance($_GET["iss"]); $fc->getAuthCode();
此示例包含一个随机生成的 state 参数,并将从 my.fhirserver.com/FHIRProxy/oauth2/authorize 请求授权代码,触发重定向到 my.website.com。
在 my.website.com 重定向时
use FaulkJ\FHIRClient; session_start(); $fc = new FHIRClient(...$_SESSION["fhirParams"]); $fc->getAccessToken($_GET["code"]); //You are now authenticated and may query the FHIR server $obs = $fc->query("Observation?patient=12345678&code=12345-6"); if($obs->code == 200) echo $obs->body;
在后续页面加载或AJAX调用中,在发送查询之前,需要重新实例化FHIRClient
use FaulkJ\FHIRClient; session_start(); $fc = new FHIRClient(...$_SESSION["fhirParams"]); $pat = $fc->query("Patient/12345678"); if($pat->code == 200) echo $pat->body;
后端模式
use FaulkJ\FHIRClient; $fc = (new FHIRClient( "https:/fhir.server.com", "1234-5678-9012-3456-7890", [ "signingKey" => "D:\\privatekey.pem", "tokenURI" => "FHIRProxy/oauth2/token" ] ))->debug(true); $fc->getAccessToken(); $response = $fc->query("FHIRProxy/path/to/api/"); if($response->code == 200) echo $response->body;