86 lines
4.2 KiB
PHP
86 lines
4.2 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
/**
|
||
* 甘草药管家 SCM 开放平台(处方下单)
|
||
*
|
||
* @see https://apidoc.igancao.com/service-doc/scm-outer-recipel.html
|
||
*
|
||
* .env 注意:ThinkPHP 使用 parse_ini_file 分区后,写在 `[trtc]` 等分区**下面**的键会
|
||
* 变成 `TRTC_XXX` 而不是顶层 `GANCAO_SCM_XXX`。请把 GANCAO_SCM_* 写在文件最前(任意
|
||
* `[分区]` 之前),或使用独立分区 `[GANCAO_SCM]`(键为 ENABLED、GATEWAY_AK 等)。
|
||
*
|
||
* 网关层:与 GcOpenApi.php 一致(AK/SK + AES 请求体)。
|
||
* 业务层:MAKE_TOKEN 使用 biz_ak / biz_sk(pwd=md5(timestamp+业务sk))。**常与网关 OpenAPI AK/SK 不是同一套**;
|
||
* 若甘草返回 10103 等,请在 .env 单独配置 GANCAO_SCM_BIZ_AK / GANCAO_SCM_BIZ_SK。仅当业务与网关确为同一套时才可留空 BIZ 以复用网关。
|
||
*
|
||
* 药材 id:甘草接口 m_list[].id 为平台药 id。解析顺序:处方 herbs 的 gc_id / gancao_id →
|
||
* 下方 herb_id_map → 医师药品库 zyt_doctor_medicine(name 精确匹配、status=1、gid 为纯数字)。
|
||
*/
|
||
if (!function_exists('zyt_gancao_scm_env')) {
|
||
/**
|
||
* 读取环境变量:优先 GANCAO_SCM_*;兼容误写在 [trtc] 下的 TRTC_GANCAO_SCM_*。
|
||
*
|
||
* @param mixed $default
|
||
*/
|
||
function zyt_gancao_scm_env(string $suffix, mixed $default = null): mixed
|
||
{
|
||
$primary = env('GANCAO_SCM_' . $suffix, null);
|
||
if ($primary !== null && $primary !== '' && $primary !== false) {
|
||
return is_string($primary) ? trim($primary, " \t\n\r\0\x0B\"") : $primary;
|
||
}
|
||
$fallback = env('TRTC_GANCAO_SCM_' . $suffix, $default);
|
||
if (is_string($fallback)) {
|
||
return trim($fallback, " \t\n\r\0\x0B\"");
|
||
}
|
||
|
||
return $fallback;
|
||
}
|
||
}
|
||
// 测试网关:http://dev-gapis-base.igancao.com/oapi ;生产:https://oapi.igancao.com(见甘草《网关对接规范》)
|
||
$gwUrl = rtrim((string) zyt_gancao_scm_env('GATEWAY_URL', 'https://oapi.igancao.com'), '/');
|
||
if (str_contains($gwUrl, 'dev-gapis-base.igancao.com') && !preg_match('#/oapi$#i', $gwUrl)) {
|
||
$gwUrl .= '/oapi';
|
||
}
|
||
$gwAk = (string) zyt_gancao_scm_env('GATEWAY_AK', '');
|
||
$gwSk = (string) zyt_gancao_scm_env('GATEWAY_SK', '');
|
||
$bizAk = (string) zyt_gancao_scm_env('BIZ_AK', '');
|
||
$bizSk = (string) zyt_gancao_scm_env('BIZ_SK', '');
|
||
if ($bizAk === '') {
|
||
$bizAk = $gwAk;
|
||
}
|
||
if ($bizSk === '') {
|
||
$bizSk = $gwSk;
|
||
}
|
||
$CALLBACK_URL = (string) zyt_gancao_scm_env('GANCAO_SCM_CALLBACK_URL', '');
|
||
$enabledRaw = zyt_gancao_scm_env('ENABLED', false);
|
||
|
||
return [
|
||
'enabled' => filter_var($enabledRaw, FILTER_VALIDATE_BOOLEAN),
|
||
'gateway_url' => $gwUrl,
|
||
'gateway_ak' => $gwAk,
|
||
'gateway_sk' => $gwSk,
|
||
'biz_ak' => $bizAk,
|
||
'biz_sk' => $bizSk,
|
||
'callback_url' => (string) zyt_gancao_scm_env('CALLBACK_URL', ''),
|
||
// 回调签名凭证:与下单业务账号 biz_ak/biz_sk 不同,由甘草控制台「订单流转回调通知」配置
|
||
'callback_appkey' => (string) zyt_gancao_scm_env('CALLBACK_APPKEY', ''),
|
||
'callback_secret' => (string) zyt_gancao_scm_env('CALLBACK_SECRET', ''),
|
||
'cradle_store' => (string) zyt_gancao_scm_env('CRADLE_STORE', '甄养堂互联网医院'),
|
||
'df_id' => (int) zyt_gancao_scm_env('DF_ID', 102),
|
||
'express_type' => (string) zyt_gancao_scm_env('EXPRESS_TYPE', 'general'),
|
||
'default_is_decoct' => (int) zyt_gancao_scm_env('DEFAULT_IS_DECOCT', 1),
|
||
'default_times_per_day' => (int) zyt_gancao_scm_env('TIMES_PER_DAY', 2),
|
||
'default_num_per_pack' => (int) zyt_gancao_scm_env('NUM_PER_PACK', 2),
|
||
'default_dose_ml' => (int) zyt_gancao_scm_env('DOSE_ML', 150),
|
||
'herb_id_map' => [],
|
||
'df_ids' => ['饮片' => '101', '浓缩水丸' => '102'],
|
||
// 可选:HTTPS cURL cipher list。默认留空 → 走 cURL 内置默认,兼容性最好。
|
||
// 需要对付弱加密服务器时:
|
||
// - OpenSSL 构建(绝大多数 Linux Docker):GANCAO_SCM_TLS_CIPHERS="DEFAULT@SECLEVEL=1"
|
||
// - 通用:GANCAO_SCM_TLS_CIPHERS="DEFAULT:!aNULL:!eNULL"
|
||
// 如果 cURL 报 CURLE_SSL_CIPHER(59) Unknown cipher in list,八成是底层不是 OpenSSL,清空此项即可。
|
||
'tls_ciphers' => (string) zyt_gancao_scm_env('TLS_CIPHERS', ''),
|
||
];
|