This commit is contained in:
Your Name
2026-04-15 16:31:25 +08:00
parent 906684c1ed
commit 3d9c5dd8f5
47 changed files with 7963 additions and 10 deletions
+76
View File
@@ -0,0 +1,76 @@
<?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_skpwd=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_medicinename 精确匹配、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', ''),
'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']
];