Files
zyt/server/config/gancao_scm.php
T
2026-05-11 17:49:38 +08:00

86 lines
4.2 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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', ''),
// 回调签名凭证:与下单业务账号 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', ''),
];