AI智能导诊入参见兼容旧版本智能导诊

医保支付入参进行加密处理
debug
王绍全 2 weeks ago
parent 4f46a5e256
commit e8b2da6890
  1. 12
      src/main/java/com/ynxbd/common/TestA.java
  2. 44
      src/main/java/com/ynxbd/common/action/healthcard/AIGuidanceAction.java
  3. 11
      src/main/java/com/ynxbd/common/action/healthcard/HCReportAction.java
  4. 13
      src/main/java/com/ynxbd/common/action/pay/MedicalAction.java
  5. 6
      src/main/java/com/ynxbd/common/config/healthcard/HCAIGuidanceConfig.java
  6. 6
      src/main/java/com/ynxbd/common/config/healthcard/HCReportConfig.java
  7. 6
      src/main/java/com/ynxbd/common/config/healthcard/HCSignHelper.java
  8. 2
      src/main/java/com/ynxbd/common/result/Result.java
  9. 19
      src/main/java/com/ynxbd/common/service/MedicalService.java
  10. 6
      src/main/resources/hc-config.xml

@ -22,7 +22,6 @@ public class TestA {
// } // }
// public static void main(String[] args) { // public static void main(String[] args) {
// System.out.println(AesWxHelper.encode("524404")); // System.out.println(AesWxHelper.encode("524404"));
// //
@ -34,11 +33,10 @@ public class TestA {
// } // }
public static void main(String[] args) { // public static void main(String[] args) {
System.out.println(AesWxHelper.encode("624091")); // // System.out.println(AesWxHelper.encode("624091"));
//
// System.out.println(AesWxHelper.decode("A25BF2DD5820B151B8AB2E333E05565E")); // // System.out.println(AesWxHelper.decode("A25BF2DD5820B151B8AB2E333E05565E"));
} // }
} }

@ -29,7 +29,7 @@ import java.util.Map;
public class AIGuidanceAction extends BaseAction { public class AIGuidanceAction extends BaseAction {
/** /**
* 查询平台所有医院列表信息 * 4.1.1 查询平台所有医院列表信息必选
*/ */
@Action("getAllHospInfo") @Action("getAllHospInfo")
public Result getAllHospInfo() { public Result getAllHospInfo() {
@ -47,10 +47,14 @@ public class AIGuidanceAction extends BaseAction {
} }
/** /**
* 查询医院详细信息 * 4.1.2 查询医院详细信息必选
*/ */
@Action("getHospDetail") @Action("getHospDetail")
public Result getHospDetail(String hosId) { public Result getHospDetail(String hosId) {
JSONObject body = getBody();
if (ObjectUtils.isEmpty(hosId)) {
hosId = body.getString("hosId");
}
if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) {
return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 return Result.error(ResultEnum.SIGN_ERROR); // 签名异常
} }
@ -58,10 +62,17 @@ public class AIGuidanceAction extends BaseAction {
} }
/** /**
* 查询科室信息 * 4.1.3 查询科室信息必选
*/ */
@Action("getDeptList") @Action("getDeptList")
public Result getDeptList(String hosId, String branchId) { public Result getDeptList(String hosId, String branchId) {
JSONObject body = getBody();
if (ObjectUtils.isEmpty(hosId)) {
hosId = body.getString("hosId");
}
if (ObjectUtils.isEmpty(branchId)) {
branchId = body.getString("branchId");
}
if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) {
return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 return Result.error(ResultEnum.SIGN_ERROR); // 签名异常
} }
@ -69,10 +80,20 @@ public class AIGuidanceAction extends BaseAction {
} }
/** /**
* 查询医生信息 * 4.1.4 查询医生信息必选
*/ */
@Action("getDoctorList") @Action("getDoctorList")
public Result getDoctorList(String hosId, String branchId, String deptId) { public Result getDoctorList(String hosId, String branchId, String deptId) {
JSONObject body = getBody();
if (ObjectUtils.isEmpty(hosId)) {
hosId = body.getString("hosId");
}
if (ObjectUtils.isEmpty(branchId)) {
branchId = body.getString("branchId");
}
if (ObjectUtils.isEmpty(deptId)) {
deptId = body.getString("deptId");
}
if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) {
return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 return Result.error(ResultEnum.SIGN_ERROR); // 签名异常
} }
@ -85,6 +106,16 @@ public class AIGuidanceAction extends BaseAction {
*/ */
@Action("getPatientCardList") @Action("getPatientCardList")
public Result getPatientCardList(String hosId, String branchId, String deptId) { public Result getPatientCardList(String hosId, String branchId, String deptId) {
JSONObject body = getBody();
if (ObjectUtils.isEmpty(hosId)) {
hosId = body.getString("hosId");
}
if (ObjectUtils.isEmpty(branchId)) {
branchId = body.getString("branchId");
}
if (ObjectUtils.isEmpty(deptId)) {
deptId = body.getString("deptId");
}
if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) {
return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 return Result.error(ResultEnum.SIGN_ERROR); // 签名异常
} }
@ -112,7 +143,10 @@ public class AIGuidanceAction extends BaseAction {
* 4.2.1.1 查询医院的首页服务列表必选 * 4.2.1.1 查询医院的首页服务列表必选
*/ */
@Action("getHospitalHomeService") @Action("getHospitalHomeService")
public Result getHospitalHomeService(String hosId) { public Result getHospitalHomeService() {
JSONObject body = getBody();
String hosId = body.getString("hosId");
log.info("[查询医院的首页服务列表]hosId={}", hosId); log.info("[查询医院的首页服务列表]hosId={}", hosId);
if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) {
return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 return Result.error(ResultEnum.SIGN_ERROR); // 签名异常

@ -2,7 +2,6 @@ package com.ynxbd.common.action.healthcard;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.config.HealthCardConfig;
import com.ynxbd.common.config.healthcard.HCReportConfig; import com.ynxbd.common.config.healthcard.HCReportConfig;
import com.ynxbd.common.config.healthcard.HCSignHelper; import com.ynxbd.common.config.healthcard.HCSignHelper;
import com.ynxbd.common.config.interceptor.AesDecode; import com.ynxbd.common.config.interceptor.AesDecode;
@ -33,28 +32,28 @@ public class HCReportAction extends BaseAction {
Map<String, Object> reqHead = new HashMap<>(); Map<String, Object> reqHead = new HashMap<>();
reqHead.put("requestId", requestId); reqHead.put("requestId", requestId);
// Map<String, Object> textReportInfo = new HashMap<>(); Map<String, Object> textReportInfo = new HashMap<>();
// Map<String, Object> patientInfo = new HashMap<>(); // Map<String, Object> patientInfo = new HashMap<>();
// Map<String, Object> reportInfo = new HashMap<>(); // Map<String, Object> reportInfo = new HashMap<>();
// partnerId:合作方ID 腾讯健康提供 // partnerId:合作方ID 腾讯健康提供
JSONObject jsonObject = OkHttpHelper.postJson(url + "合作方ID 腾讯健康提供", params -> { JSONObject jsonObject = OkHttpHelper.postJson(url + HCReportConfig.PARTNER_ID, params -> {
params.put("reqHead", reqHead); params.put("reqHead", reqHead);
params.put("hospitalId", HealthCardConfig.H_HOSPITAL_ID); params.put("hospitalId", HCReportConfig.HOSP_ID);
params.put("outerId", reportId); params.put("outerId", reportId);
params.put("healthCardId", healthCardId); params.put("healthCardId", healthCardId);
params.put("patientId", patientId); params.put("patientId", patientId);
params.put("msgId", msgId); params.put("msgId", msgId);
params.put("reportFileType", 2); // [ 1:pdf;2:图片;3:文本] params.put("reportFileType", 2); // [ 1:pdf;2:图片;3:文本]
params.put("reportContent", reportContent); // 报告内容:报告文件base64编码、体积需要在30MB以内 当reportFileType 取值为 1, 2时,将报告文件base64编码放在该字段 params.put("reportContent", reportContent); // 报告内容:报告文件base64编码、体积需要在30MB以内 当reportFileType 取值为 1, 2时,将报告文件base64编码放在该字段
params.put("textReportInfo", ""); // 当reportFileType 取值为 3 时,将文本报告内容放下该字段。 params.put("textReportInfo", textReportInfo); // 当reportFileType 取值为 3 时,将文本报告内容放下该字段。
}, headers -> { }, headers -> {
headers.add("Content-Type", "application/json"); headers.add("Content-Type", "application/json");
headers.add("god-portal-signature", config.getSignature()); headers.add("god-portal-signature", config.getSignature());
headers.add("god-portal-timestamp", config.getTimestamp()); headers.add("god-portal-timestamp", config.getTimestamp());
headers.add("god-portal-request-id", requestId); headers.add("god-portal-request-id", requestId);
}); });
log.info("[报告解读] resp={}", jsonObject); log.warn("[报告解读] resp={}", jsonObject);
return Result.success(); return Result.success();
} }
} }

@ -47,9 +47,9 @@ public class MedicalAction extends BaseAction {
* 用户信息获取 | 医保上传 | 医保支付下单 * 用户信息获取 | 医保上传 | 医保支付下单
*/ */
@Action("getFeeDetails") @Action("getFeeDetails")
public Result getFeeDetails(String callNo, String payCode, String openid, String qrCode, String patientId, String cardNo, String realName, BigDecimal totalFee, Boolean isSplitTime, String ybAttrib, String ybBZCode, String ybBZName) { public Result getFeeDetails(String callNo, String payCode, String qrCode, @AesDecode String openid, @AesDecode String patientId, @AesDecode String cardNo, @AesDecode String hisPatientId, String realName, BigDecimal totalFee, Boolean isSplitTime, String ybAttrib, String ybBZCode, String ybBZName) {
try { try {
log.info("[医保]上传明细下单 callNo={}, payCode={}, openid={}, qrCode={}, patientId={}, cardNo={}, realName={}, totalFee={}, ybAttrib={}, ybBZCode={}, ybBZName={}", callNo, payCode, openid, qrCode, patientId, ParamHelper.hideIdCardNo(cardNo), realName, totalFee, ybAttrib, ybBZCode, ybBZName); log.info("[医保]上传明细下单 callNo={}, payCode={}, openid={}, qrCode={}, patientId={}, cardNo={}, realName={}, hisPatientId={}, totalFee={}, ybAttrib={}, ybBZCode={}, ybBZName={}", callNo, payCode, openid, qrCode, patientId, ParamHelper.hideIdCardNo(cardNo), realName, hisPatientId, totalFee, ybAttrib, ybBZCode, ybBZName);
if (callNo == null || payCode == null || openid == null || qrCode == null || patientId == null || cardNo == null || totalFee == null) { if (callNo == null || payCode == null || openid == null || qrCode == null || patientId == null || cardNo == null || totalFee == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
@ -70,7 +70,7 @@ public class MedicalAction extends BaseAction {
if (!DateHelper.isToday(reg.getRegDate())) { if (!DateHelper.isToday(reg.getRegDate())) {
return Result.error("医保支付仅支持今日挂号"); return Result.error("医保支付仅支持今日挂号");
} }
medicalInfo = new MedicalService().hisRegMedUploadDetails(merchantEnum, qrCode, openid, patientId, cardNo, realName, reg, isSplitTime); medicalInfo = new MedicalService().hisRegMedUploadDetails(merchantEnum, qrCode, openid, patientId, cardNo, realName, hisPatientId, reg, isSplitTime);
break; break;
case RECIPE: case RECIPE:
@ -176,10 +176,10 @@ public class MedicalAction extends BaseAction {
* @param familyCardNo 家人证件号码非必传 * @param familyCardNo 家人证件号码非必传
*/ */
@Action("order") @Action("order")
public Result order(String callNo, String payCode, String payOpenId, String openid, String patientId, String cardNo, String realName, String treatNum, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId, public Result order(String callNo, String payCode, String payOpenId, @AesDecode String openid, @AesDecode String patientId, @AesDecode String cardNo, @AesDecode String hisPatientId, String realName, String treatNum, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId,
BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) { BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) {
try { try {
log.info("[医保]下单入参 callNo={}, payCode={}, openid={}, patientId={}, totalFee={}", callNo, payCode, openid, patientId, totalFee); log.info("[医保]下单入参 callNo={}, payCode={}, openid={}, patientId={}, totalFee={}, hisPatientId={}, cardNo={}", callNo, payCode, openid, patientId, totalFee, hisPatientId, ParamHelper.hideIdCardNo(cardNo));
if (callNo == null || payCode == null || openid == null || patientId == null || cardNo == null || totalFee == null) { if (callNo == null || payCode == null || openid == null || patientId == null || cardNo == null || totalFee == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
@ -188,7 +188,8 @@ public class MedicalAction extends BaseAction {
case REG: case REG:
Register reg = new Register().getRegParams(new RequestParams(request), true); Register reg = new Register().getRegParams(new RequestParams(request), true);
return new MedicalService().createRegOrder(payCode, payOpenId, openid, cardNo, realName, ip, payOrdId, payAuthNo, mdTrtId, chrgBchno, mdUserId, return new MedicalService().createRegOrder(payCode, payOpenId, openid, patientId, cardNo, realName, hisPatientId, ip,
payOrdId, payAuthNo, mdTrtId, chrgBchno, mdUserId,
totalFee, acctFee, hifpFee, insuranceFee, cashFee, callNo, reg, totalFee, acctFee, hifpFee, insuranceFee, cashFee, callNo, reg,
familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId); familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId);

@ -31,7 +31,7 @@ public class HCAIGuidanceConfig {
* AI版电子健康卡AppSecret管理>开发商接入 * AI版电子健康卡AppSecret管理>开发商接入
* 旧版Token腾讯提供 * 旧版Token腾讯提供
*/ */
public final static String PARTNER_KEY; public final static String PARTNER_SECRET;
public final static String HOSP_NAME; public final static String HOSP_NAME;
@ -52,7 +52,7 @@ public class HCAIGuidanceConfig {
IS_DEBUG = config.getBoolean("is_debug", false); IS_DEBUG = config.getBoolean("is_debug", false);
IS_SPLIT_TIME_REG = config.getBoolean("is_split_time_reg", true); IS_SPLIT_TIME_REG = config.getBoolean("is_split_time_reg", true);
PARTNER_KEY = config.getString(IS_DEV ? "dev_partner_key" : "partner_key"); PARTNER_SECRET = config.getString(IS_DEV ? "dev_partner_secret" : "partner_secret");
PARTNER_ID = config.getString("partner_id"); PARTNER_ID = config.getString("partner_id");
HOSP_ID = config.getString("hosp_id"); HOSP_ID = config.getString("hosp_id");
@ -85,7 +85,7 @@ public class HCAIGuidanceConfig {
log.info("[智能导诊]验签 timestamp={}, signature={}", timestamp, signature); log.info("[智能导诊]验签 timestamp={}, signature={}", timestamp, signature);
String str = PARTNER_ID + timestamp; String str = PARTNER_ID + timestamp;
String cacheSign = HMACHelper.sha256(str, PARTNER_KEY); String cacheSign = HMACHelper.sha256(str, PARTNER_SECRET);
return signature.equals(cacheSign); return signature.equals(cacheSign);
} }
} }

@ -12,12 +12,16 @@ public class HCReportConfig {
public static final String TOKEN; public static final String TOKEN;
public static final String PARTNER_ID; // 医院ID(每家医院不一样) public static final String PARTNER_ID; // 合作方ID(每家医院不一样)
public static final String HOSP_ID; // 医院ID(每家医院不一样)
static { static {
XmlConfigHelper config = new XmlConfigHelper().read("hc-config.xml", "report"); XmlConfigHelper config = new XmlConfigHelper().read("hc-config.xml", "report");
IS_DEV = config.getBoolean("is_dev", false); IS_DEV = config.getBoolean("is_dev", false);
HOSP_ID = config.getString("hosp_id");
TOKEN = config.getString(IS_DEV ? "dev_token" : "token"); TOKEN = config.getString(IS_DEV ? "dev_token" : "token");
PARTNER_ID = config.getString(IS_DEV ? "dev_partner_id" : "partner_id"); PARTNER_ID = config.getString(IS_DEV ? "dev_partner_id" : "partner_id");
} }

@ -30,12 +30,12 @@ public class HCSignHelper {
public static void main(String[] args) { public static void main(String[] args) {
String TOKEN = "795b207e12572839976d9310bdde32be"; String PARTNER_ID = "e4a05c13301f2f6a8b07b3de872dfe2d";
String PARTNER_ID = "100000317"; String PARTNER_KEY_TOKEN = "e5322dfd9bfab939851319812c30f9f1";
String timestamp = System.currentTimeMillis() + ""; String timestamp = System.currentTimeMillis() + "";
String str = PARTNER_ID + timestamp; String str = PARTNER_ID + timestamp;
String cacheSign = HMACHelper.sha256(str, TOKEN); String cacheSign = HMACHelper.sha256(str, PARTNER_KEY_TOKEN);
System.out.println(timestamp); System.out.println(timestamp);
System.out.println(cacheSign); System.out.println(cacheSign);
} }

@ -165,7 +165,7 @@ public class Result extends BaseResult {
if (serviceException.getMessage() != null) { if (serviceException.getMessage() != null) {
message = serviceException.getMessage(); message = serviceException.getMessage();
if (serviceException.isLog()) { if (serviceException.isLog()) {
log.error("[异常][{}]{}", stackPosition, e.getMessage(), e); log.error("[业务异常][{}]{}", stackPosition, e.getMessage());
} }
} }
if (serviceException.getResultEnum() != null) { if (serviceException.getResultEnum() != null) {

@ -85,7 +85,13 @@ public class MedicalService {
* @param realName 真实姓名 * @param realName 真实姓名
* @param reg 挂号信息 * @param reg 挂号信息
*/ */
public MedicalInfo hisRegMedUploadDetails(MerchantEnum merchantEnum, String qrCode, String openid, String patientId, String cardNo, String realName, Register reg, Boolean isSplitTime) throws ServiceException { public MedicalInfo hisRegMedUploadDetails(MerchantEnum merchantEnum, String qrCode, String openid, String patientId, String cardNo, String realName, String hisPatientId, Register reg, Boolean isSplitTime) throws ServiceException {
// 以传递的数据为主
reg.setOpenid(openid);
reg.setPatientId(patientId);
reg.setHisPatientId(hisPatientId);
reg.setIdCardNo(cardNo);
String payAuthNo = getPayAuthNo(merchantEnum, openid, qrCode, cardNo, realName); String payAuthNo = getPayAuthNo(merchantEnum, openid, qrCode, cardNo, realName);
log.info("[医保]上传明细:patientId={}, cardNo={}, realName={}, reg={}", patientId, cardNo, realName, reg); log.info("[医保]上传明细:patientId={}, cardNo={}, realName={}, reg={}", patientId, cardNo, realName, reg);
JsonResult result = HisMedDao.regMedUploadDetails(merchantEnum, reg, payAuthNo, cardNo, isSplitTime); JsonResult result = HisMedDao.regMedUploadDetails(merchantEnum, reg, payAuthNo, cardNo, isSplitTime);
@ -346,8 +352,7 @@ public class MedicalService {
} }
return Result.success(map); return Result.success(map);
} catch (ServiceException e) { } catch (Exception e) {
log.error(e.getMessage());
return Result.error(e); return Result.error(e);
} }
} }
@ -356,8 +361,13 @@ public class MedicalService {
/** /**
* [医保]挂号下单 * [医保]挂号下单
*/ */
public Result createRegOrder(String payCode, String payOpenId, String openid, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId, BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType, Register reg, public Result createRegOrder(String payCode, String payOpenId, String openid, String patientId, String cardNo, String realName, String hisPatientId, String ip, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId, BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType, Register reg,
String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) { String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) {
reg.setOpenid(openid);
reg.setPatientId(patientId);
reg.setHisPatientId(hisPatientId);
reg.setIdCardNo(cardNo);
Result result = PayService.isPaymentPermittedByTime(); Result result = PayService.isPaymentPermittedByTime();
if (result != null) { if (result != null) {
return result; return result;
@ -384,7 +394,6 @@ public class MedicalService {
} }
String treatNum = reg.getTreatNum(); String treatNum = reg.getTreatNum();
String patientId = reg.getPatientId();
log.info("[医保][挂号]下单 hasDBOrder={}, openid={}, patientId={}, treatNum={}, outTradeNo={}, payOrdId={}, payAuthNo={}, totalFee={}, acctFee={}, hifpFee={}, cashFee={}, idCardNo={}, realName={}, familyType={}, familyName={}, medicalCardId={}, medicalCardInstId={}", hasDBOrder, openid, patientId, treatNum, outTradeNo, payOrdId, payAuthNo, totalFee, acctFee, hifpFee, cashFee, cardNo, realName, familyType, familyName, medicalCardId, medicalCardInstId); log.info("[医保][挂号]下单 hasDBOrder={}, openid={}, patientId={}, treatNum={}, outTradeNo={}, payOrdId={}, payAuthNo={}, totalFee={}, acctFee={}, hifpFee={}, cashFee={}, idCardNo={}, realName={}, familyType={}, familyName={}, medicalCardId={}, medicalCardInstId={}", hasDBOrder, openid, patientId, treatNum, outTradeNo, payOrdId, payAuthNo, totalFee, acctFee, hifpFee, cashFee, cardNo, realName, familyType, familyName, medicalCardId, medicalCardInstId);
String orderTitle = "挂号"; String orderTitle = "挂号";

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<config> <config>
<!-- 报告解读 -->
<report name="报告解读"> <report name="报告解读">
<is_dev mame="是否为测试环境">true</is_dev> <is_dev mame="是否为测试环境">true</is_dev>
<hosp_id name="医院ID">31737</hosp_id>
<partner_id name="合作方ID">20009251</partner_id> <partner_id name="合作方ID">20009251</partner_id>
<token name="密钥token">3bee9edc0a2f41ac911b9b714c854cad</token> <token name="密钥token">3bee9edc0a2f41ac911b9b714c854cad</token>
@ -22,9 +22,9 @@
<!-- AI版:电子健康卡AppId(管理>开发商接入) | 旧版:合作方ID(腾讯提供)--> <!-- AI版:电子健康卡AppId(管理>开发商接入) | 旧版:合作方ID(腾讯提供)-->
<partner_id>e4a05c13301f2f6a8b07b3de872dfe2d</partner_id> <partner_id>e4a05c13301f2f6a8b07b3de872dfe2d</partner_id>
<!-- AI版:电子健康卡AppSecret(管理>开发商接入) | 旧版:Token(腾讯提供)--> <!-- AI版:电子健康卡AppSecret(管理>开发商接入) | 旧版:Token(腾讯提供)-->
<partner_key >e5322dfd9bfab939851319812c30f9f1</partner_key> <partner_secret >e5322dfd9bfab939851319812c30f9f1</partner_secret>
<!-- --> <!-- -->
<dev_partner_key>e5322dfd9bfab939851319812c30f9f1</dev_partner_key> <dev_partner_secret>e5322dfd9bfab939851319812c30f9f1</dev_partner_secret>
<hosp_id name="医院ID">800002580</hosp_id> <hosp_id name="医院ID">800002580</hosp_id>
<hosp_name name="医院名称">红河州第一人民医院</hosp_name> <hosp_name name="医院名称">红河州第一人民医院</hosp_name>

Loading…
Cancel
Save