191 lines
5.3 KiB
PHP
191 lines
5.3 KiB
PHP
<?php
|
|
|
|
namespace App\Utils;
|
|
|
|
use App\Constants\HttpEnumCode;
|
|
use App\Exception\BusinessException;
|
|
use GuzzleHttp\Client;
|
|
use GuzzleHttp\Exception\GuzzleException;
|
|
use Hyperf\Guzzle\CoroutineHandler;
|
|
use GuzzleHttp\HandlerStack;
|
|
use Hyperf\Redis\Redis;
|
|
use Hyperf\Utils\ApplicationContext;
|
|
use Psr\Container\ContainerInterface;
|
|
use Hyperf\Di\Annotation\Inject;
|
|
|
|
/**
|
|
* 处方平台对接类
|
|
*/
|
|
class Prescription
|
|
{
|
|
#[Inject]
|
|
protected ContainerInterface $container;
|
|
#[Inject]
|
|
protected Client $client;
|
|
|
|
#[Inject]
|
|
protected Redis $redis;
|
|
|
|
protected string $api_url;
|
|
protected string $client_id;
|
|
protected string $client_secret;
|
|
protected string $access_token;
|
|
protected array $header;
|
|
public string $version = "v1";
|
|
|
|
|
|
public function __construct()
|
|
{
|
|
// $container = ApplicationContext::getContainer();
|
|
// $this->redis = $container->get(Redis::class);
|
|
|
|
// 请求地址
|
|
$this->api_url = "http://49.233.3.200:6304/api/thridapi/";
|
|
$this->client_id = "ZD-004";
|
|
$this->client_secret = "0baa5927164710b9f800bf33546b6da3";
|
|
|
|
// 启动时redis已注入,此处不会出现问题。
|
|
$this->access_token = $this->redis->get("prescription_token");
|
|
if (empty($access_token)){
|
|
$this->access_token = $this->getToken();
|
|
}
|
|
|
|
$this->header = [
|
|
"Authorization" => "Bearer " . $this->access_token
|
|
];
|
|
}
|
|
|
|
/**
|
|
* 获取token接口
|
|
* @return string token数据
|
|
*/
|
|
protected function getToken(): string
|
|
{
|
|
$option = [
|
|
"json" => array(
|
|
"clientId" => $this->client_id,
|
|
"clientSecret" => $this->client_secret,
|
|
)
|
|
];
|
|
|
|
try {
|
|
$response = $this->httpRequest($this->api_url . $this->version . '/user_thrid/token', $option);
|
|
|
|
if (empty($response['result'])){
|
|
// 返回值为空
|
|
throw new BusinessException(HttpEnumCode::getMessage(HttpEnumCode::SERVER_ERROR));
|
|
}
|
|
|
|
if (empty($response['result']['token'])){
|
|
// 返回值为空
|
|
throw new BusinessException(HttpEnumCode::getMessage(HttpEnumCode::SERVER_ERROR));
|
|
}
|
|
|
|
} catch (GuzzleException $e) {
|
|
throw new BusinessException($e->getMessage());
|
|
}
|
|
|
|
return $response['result']['token'];
|
|
}
|
|
|
|
// 获取药品
|
|
public function getProd(){
|
|
$option = [
|
|
"json" => array(
|
|
"page" => 1,
|
|
"pageSize" => 1,
|
|
),
|
|
"headers" => $this->header
|
|
];
|
|
|
|
try {
|
|
$response = $this->httpRequest($this->api_url . $this->version . '/drug/syncDrugCatalogue', $option);
|
|
if (empty($response['result'])){
|
|
// 返回值为空
|
|
throw new BusinessException(HttpEnumCode::getMessage(HttpEnumCode::SERVER_ERROR));
|
|
}
|
|
|
|
if (empty($response['result']['rows'])){
|
|
return true;
|
|
}
|
|
dump($response);
|
|
// 获取总数
|
|
// $count
|
|
} catch (GuzzleException $e) {
|
|
throw new BusinessException($e->getMessage());
|
|
}
|
|
|
|
// return $response['token'];
|
|
}
|
|
|
|
// 查询商品库存
|
|
public function getProdStock(){
|
|
$option = [
|
|
"json" => array(
|
|
"pharmacyCode" => "JG-10009",
|
|
"drugCode" => "105860",
|
|
),
|
|
"headers" => $this->header
|
|
];
|
|
|
|
try {
|
|
$response = $this->httpRequest($this->api_url . $this->version . '/pharmacy/pharmacyInventory', $option);
|
|
dump($response);
|
|
|
|
} catch (GuzzleException $e) {
|
|
throw new BusinessException($e->getMessage());
|
|
}
|
|
}
|
|
|
|
// 获取运费
|
|
public function getExpressPrice(){
|
|
$option = [
|
|
"json" => array(
|
|
"pharmacyCode" => "JG-10009",
|
|
),
|
|
"headers" => $this->header
|
|
];
|
|
|
|
try {
|
|
$response = $this->httpRequest($this->api_url . $this->version . '/pharmacy/transportationExpenses', $option);
|
|
dump($response);
|
|
|
|
} catch (GuzzleException $e) {
|
|
throw new BusinessException($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 请求封装
|
|
* @param string $path
|
|
* @param array $option
|
|
* @return array
|
|
* @throws GuzzleException
|
|
*/
|
|
protected function httpRequest(string $path,array $option = []): array
|
|
{
|
|
$response = $this->client->post($path, $option);
|
|
|
|
if ($response->getStatusCode() != '200'){
|
|
// 请求失败
|
|
throw new BusinessException($response->getBody()->getContents());
|
|
}
|
|
|
|
$body = json_decode($response->getBody(),true);
|
|
if (empty($body)){
|
|
// 返回值为空
|
|
throw new BusinessException(HttpEnumCode::getMessage(HttpEnumCode::SERVER_ERROR));
|
|
}
|
|
dump($body);
|
|
|
|
if (empty($body['data'])){
|
|
// 返回值为空
|
|
if (!empty($body['message'])){
|
|
throw new BusinessException($body['message']);
|
|
}
|
|
throw new BusinessException(HttpEnumCode::getMessage(HttpEnumCode::SERVER_ERROR));
|
|
}
|
|
|
|
return $body['data'];
|
|
}
|
|
} |