faulkj/fhirclient

一个简单的SMART on FHIR PHP客户端。

v3.0.1 2024-06-08 16:18 UTC

This package is auto-updated.

Last update: 2024-09-08 17:05:11 UTC


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;