# 药管家开放平台
中药处方订单下单服务。
# 服务说明
甘草药管家开放平台(处方下单),系统对接分为3个部分:1、通信层对接;2、业务接口层对接;3、订单状态回调。
# 业务接口列表
更新时间 | 权重 | 分类 | 接口名称 | package & class |
---|---|---|---|---|
2025-06-30 | 核心 | 订单类 | 新增膏方剂型 df130ext | igc_scm.ops.api.order CTM_SUBMIT_RECIPEL, CTM_PREVIEW |
2025-05-27 | 一般 | 订单类 | 饮片增加药库类型 df101ext.ds_type 选择 | igc_scm.ops.api.order CTM_SUBMIT_RECIPEL, CTM_PREVIEW |
2024-08-08 | 核心 | 登录态 | 生成api用的token登录态 | igc_scm.ops.api.auth MAKE_TOKEN |
2024-08-08 | 一般 | 登录态 | 检查token是否已经失效 | igc_scm.ops.api.auth CHECK_API_TOKEN |
2024-08-08 | 重要 | 订单类 | 中药处方下单参数预检查 | igc_scm.ops.api.order CTM_PREVIEW |
2024-08-08 | 核心 | 订单类 | 中药处方下单 | igc_scm.ops.api.order CTM_SUBMIT_RECIPEL |
2024-08-08 | 一般 | 订单类 | 中药处方撤单并退费 | igc_scm.ops.api.order CTM_REFUND_RECIPEL |
2024-08-08 | 一般 | 订单类 | 获取物流路由信息 | igc_scm.ops.api.order GET_TASK_ROUTE_LIST |
# 登录态说明
本服务需要提供token入参的主要为订单类接口(此类接口都有token入参必填项).
接入商需要先调用【MAKE_TOKEN】接口生成登API的登录态,并维持在业务方本地,token有效期为3小时,如果失效需要重新获取。
【注意】 此处使用的是业务层的AK、SK;需要向技术支持单独索取。(这个AK、SK不是网关层对接使用的ak、sk切勿搞错)
【建议】 业务方应该使用定时任务,每小时重新生成一次token并维持的缓存中,每次通信时从缓存中取出有效token,以减少【MAKE_TOKEN】接口的调用次数,提高系统性能。
【注意】 同一个ak只会维护一个token值,即当获取了新token后,老的token将会在5分钟内失效,请务必注意这个问题。
# 接口说明
接口协议中每个字段的定义分为字段说明与字段类型说明( []中的内容为字段属性定义),定义中 required
表示为必填字段,sometimes
表示为或填字段,未出现 required
表示非必填字段,其余类型根据属性名称一般能自行理解,请详见每个接口的出入参说明。
对接流程
# 生成api用的token登录态
- 使用说明
- 【注意】接口带 4 秒幂等阻断请求约束。
- 【注意】一个ak实体只会存在一个有效token,当新token生成后,旧token将会在5分钟内自动失效,此处需要尤为关注。
- 【注意】入参timestamp与标准UTC时间误差不可操作正负300秒,否则拒绝验证。
- 【说明】新生成的token有效期为3小时(10800秒),建议每小时动态更新一次token,避免在临界点更新token。
- 【说明】入参pwd算法:md5(timestamp + sk)
- 入口协议
{
"ak":"account key [required | alpha_dash | size:32]",
"timestamp":"timestamp 时间戳(精确到秒) [require | integer]",
"pwd":"秘钥签名(小写) [require | alpha_num | size:32]",
"package":"igc_scm.ops.api.auth",
"class":"MAKE_TOKEN"
}
- 出口协议
{
"result":{
"token":"开放平台API用的token [required | alpha_num | min:70 | max:100]"
},
"status":{
"code":"status code [string | min:3 | max:5]",
"msg":"status message [string]",
"runtime":"api runtime(ms) [double]"
}
}
- 业务状态码
10001 ⇒ 缺少必要参数
10101 ⇒ ak账号无效
10102 ⇒ 账户类型无效
10103 ⇒ pwd秘钥无效
10104 ⇒ timestamp服务器误差超过正负300秒。
00000 ⇒ 处理成功
# 检查token是否已经失效
- 入口协议
{
"token":"开放平台API用的token [required | alpha_num | min:70 | max:100]",
"package":"igc_scm.ops.api.auth",
"class":"CHECK_API_TOKEN"
}
- 出口协议
{
"result":{
"aa_id":"商户ID [required | integer | min:1]",
"expires":"过期时间(utc时间戳:秒) [required | integer]",
"remain_sec":"剩余秒数 [required | integer]"
},
"status":{
"code":"status code [string | min:3 | max:5]",
"msg":"status message [string]",
"runtime":"api runtime(ms) [double]"
}
}
- 业务状态码
10001 ⇒ 缺少必要参数
10101 ⇒ token已经失效
10102 ⇒ token类型无效
00000 ⇒ 处理成功
# 中药处方下单参数预检查
- 使用说明
建议在开方过程中融入此接口对待提交的处方内容进行校验,能最大限度避免最终下单失败的几率,如果命中了拦截行规则,系统会拒绝下单,需要接入商根据拒单的原因调整处方单的参数。
其中饮片方的规则相对简单,其他剂型(颗粒剂,丸剂,粉剂,膏方等)会有加工规则的要求,可通过本接口的提示的提示信息,来指导医生的开方用药与以及加工后成品的数量参数的指示。- 【注意】接口带 4 秒幂等阻断请求约束。
- 【注意】一个ak实体只会存在一个有效token,当新token生成后,旧token将会在5分钟内自动失效,此处需要尤为关注。
- 【注意】入参timestamp与标准UTC时间误差不可操作正负300秒,否则拒绝验证。
- 【说明】新生成的token有效期为3小时(10800秒),建议每小时动态更新一次token,避免在临界点更新token。
- 【说明】入参pwd算法:md5(timestamp + sk)
- 特殊剂型参数说明
- 【101饮片 | df101ext】分为代配与代煎,代煎时num_per_pack,is_special_writing,dose必填;
其中 is_special_writing 作用,当单贴的出包数与每日服用次数不同时,需要传1,此时times_per_day,num_per_pack两个值可以不同,否则会被拦截。默认:is_special_writing传0,此时num_per_pack的传值与times_per_day相等。
其中 ds_type 用来区分饮片的药库类型 默认是普通,选择 精致饮片后会影响最终报价。 - 【102浓缩丸 | df102ext】使用此剂型,建议在开方环节调用本接口,系统会计算出实际出丸量,需要显示给医生参考,否则会影响医生的开方体验。
times_per_day,dose,take_days,pill_type 必填;
其中coating_type:包衣类型非必填,如填 NORMA,表示使用普通包衣,此时下单会单独收取包衣加工费。 - 【103颗粒剂 | df103ext】参数请参考饮片配置参数说明。
区别于饮片的参数是 df103ext.auth_auto_convert=1必须提供。因为颗粒剂制药最终使用的是国标系数用量,我们会通过医生填写的饮片克数来自动换算出经验国标计量值,并显示在处方单上,暂不支持医生自己填写国标计量,因此如果df103ext.auth_auto_convert=0系统会直接拒单。 - 【104粉剂 | df104ext】待开放
- 【105水丸 | df106ext】待开放
- 【107水蜜丸 | df107ext】待开放
- 【130饮片膏方 | df130ext】此剂型关键参数为包装方式,分为 膏体罐装(约500g/罐),流浸膏小包装(约20g/包),干切片小包装(约15g/包)。
1、其中 流浸膏 必须指定出包数,总范围30~180包。提交时选择一个出包区间10包为一个区间,例如:30~40包(起点),N~N+10包,170~180包(终点)。系统会根据药量与辅料计算出浓度,请务必返回给医生提示,避免过较稀导致患者的投诉问题。
2、其中 干切片,膏体罐装 两种包装方式会显示预计出膏量,务必提示给医生,以便于他根据出膏量进行辅料用量调整。
3、【注意】 当出现rule_check规则中,code为cream_alert时需阻断用户的下单操作并提示问题原因。
4、【建议】当每次调整过包装方式或药量后,调用本接口,将rule_check规则中的cream_out_msg返显示给医生让他知道膏方的制作信息(如:出膏量,浓稀度,出货量:N罐,N片,N包等信息)
- 【101饮片 | df101ext】分为代配与代煎,代煎时num_per_pack,is_special_writing,dose必填;
- 出口协议参数说明
- rule_check:此节点为检查规则命中提示,正常的开方不应该出现 rule_check.type 大于2的情况,如出现需要根据提示对处方进行调整,否则下单时会被直接被拦截。
- m_list:为药材列表补全参数映射数组,因注意 m_list[n].is_available 值,如果为0表示缺药,需要更换药材
- 入口协议
{
"token":"开放平台api用的token [required | alpha_num | min:10 | max:100]",
"df_id":"剂型id [required | integer | in: 101:饮片, 102:浓缩丸]",
"amount":"帖数(默认1) [required | integer | min:1]",
"m_list":[
{
"id":"药id [required | integer | min:1]",
"quantity":"用药数量(小数点后1位) [required | numeric | min:0.1 | max:9999.9]",
"brief":"特殊处理方式(多个,分割,最多支持2个配置)(另包,打碎,兑入,先煎,后下,另煎,包煎,烊化,打粗粉,打细粉) [string]"
}
],
"df101ext":{
"times_per_day":"日使用次数(如2:指 2次/天)[integer | min:1 | max:6]",
"is_decoct":"是否为代煎 [integer | required | integer | in: 0代配,1代煎]",
"num_per_pack":"【代煎】每贴出包数(如2:指 2包/每贴)[integer | min:1 | max:9]",
"is_special_writing":"【代煎】出包数特殊写法 [integer | in: 0正常出包写法, 1特殊写法]",
"dose":"【代煎】每次计量,建议150(如150:指 150ml/袋)(常用值:50,60,100,150,200;注意与药库配置有关)[integer | min:50 | max:250]",
"usage_mode":"使用范围(默认EXTERNAL_USE) [required | string | in: EXTERNAL_USE 外用, ORAL 内用]",
"ds_type":"药库类型(默认1) [integer | in: 1:普通, 2:精致]"
},
"df102ext":{
"times_per_day":"日使用次数(如2:指 2次/天)[integer | min:1 | max:6]",
"dose":"每次剂量(如5 指出 5g)[integer | min:3 | max:10]",
"take_days":"服用天数(默认7) [integer | min:1 | max:999]",
"coating_type":"丸剂包衣类型(空:无包衣) [string | in: NORMAL:普通包衣]",
"pill_type":"浓缩丸规格 [string | in:WATER:浓缩水丸, HONEY:浓缩蜜丸]"
},
"df103ext":{
"times_per_day":"日使用次数(如2:指 2次/天)[integer | min:1 | max:6]",
"num_per_pack":"每贴出包数(如2:指 2包/每贴)[integer | min:1 | max:9]",
"is_special_writing":"出包数特殊写法 [integer | in: 0正常出包写法, 1特殊写法]",
"auth_auto_convert":"授权自动转换(注意:不授权会被拒单)[integer | in:0,1]",
"usage_mode":"使用范围(默认EXTERNAL_USE) [string | in: EXTERNAL_USE外用, ORAL内服]"
},
"df130ext":{
"times_per_day":"日使用次数(如2:指 2次/天)[integer | min:1 | max:6]",
"dose":"每次剂量(如5:指出 5包|片|克)[integer | min:1 | max:60]",
"pack_type":"包装方式[string | in: cream膏体罐装, extract流浸膏, drychip干切片]",
"package_amount":"【流浸膏】出包数区间(详见说明,如:110~120) [string | min:5 | max:7]"
},
"package":"igc_scm.ops.api.order",
"class":"CTM_PREVIEW"
}
- 出口协议
{
"result":{
"ds_id":"药库id [required | integer]",
"ds_name":"药库名称 [required | string]",
"rule_check":[
{
"code":"规则识别码 [required | string | in: medicine_shortage:药库缺药提示, overdose_ctm:中药饮片超剂量确认, m18reverse_alert:十八反十九畏药材确认, special_writing:特殊出包数不支持, amount_alert:帖数区间不支持, below_start_weight_alert:药材起做量不支持, decoct_alert:代煎,代配告警, medicine_alert:药材问题提示修改(阻断), pill_too_low:丸剂药量不够, pill_yield_notice:出药量提示, coating_notice:包衣提示, take_days_alert:服用天数不在有效区间内, cream_out_msg:膏方出膏量提示, cream_alert:不符合制膏规则的说明(阻断)]",
"msg":"规则提示信息 [required | string]",
"type":"规则类型 [required | string | list: 0提示, 1建议, 2阻塞, 3需签字]"
}
],
"m_list":{
"id":"药id [required | integer]",
"title":"药名称 [required | string]",
"price":"建议零售价 [required | double]",
"ops_price":"开放平台结算价 [required | double]",
"unit":"单位 [required | string]",
"quantity":"本次使用量 [required | double]",
"is_available":"是否可用(缺药检查) [required | integer | list:0,1]",
"brief":"特殊处理方式(中药饮片类专用字段) [required | string]",
"weight":"药材重量g(中药饮片) [required | string]",
"amount_max":"最大unit用量(中药饮片) [required | double]"
},
"take_days":{
"min":"(浓缩丸,膏方)最小可用天数 [require | int]",
"max":"(浓缩丸,膏方)最小可用天数 [require | int]",
"default":"默认选中服用天数 [require | int]"
},
"fee":{
"m_cost":"处方药材价格 [require | numeric | min:0 | max:99999.99]",
"proces_cost":"加工附加费 [require | numeric | min:0 | max:9999.99]"
}
},
"status":{
"code":"status code [string | min:3 | max:5]",
"msg":"status message [string]",
"runtime":"api runtime(ms) [double]"
}
}
- 业务状态码
10001 ⇒ 缺少必要参数
10101 ⇒ 当前商户无效
10102 ⇒ 当前药库不可用
10103 ⇒ 当前剂型未绑定药库
10104 ⇒ 剂型对应的扩展参数未传或缺失,请核对
10105 ⇒ 无效的药库配置
10106 ⇒ 药材不支持的特殊加工方式
10108 ⇒ 药材用量检查未通过
10146 ⇒ 浓缩丸规格暂不支持
00000 ⇒ 处理成功
# 中药处方下单
- 使用说明
- 【注意】接口带 4 秒幂等阻断请求约束。
- 【说明】入参开方扩展参数df...ext当与df_id匹配时,此组数据为必填:如df101ext饮片,df102ext浓缩丸,df103ext颗粒剂,df104ext粉剂,df106ext水丸,df107ext水蜜丸,df130ext饮片膏方,df140ext颗粒剂膏方
- 【注意】入参 express_type=dangrida 时必须提供收件人的高德坐标地址。
- 【注意】入参 express_to.addr必须提供精确地址,如果识别失败将会拒绝下单
- 【注意】入参 cradle_store 用于客服遇到问题订单时与商户联系用的信息
- 用户联的相关说明
- app_recipel_fee:用于在用户联上展示当前处方实收患者的总费用。如果status_recipel参数选择了隐藏价格类的控制符,用户联上不会出现价格金额信息。
- 状态订阅
callback_url 字段必传,当处方单开始流转时,会在关键节点触发订单回调,将订单的状态回调回来,业务方同步订单的进度。详细回调内容请参考 订单状态回调 章节的介绍。 - 回传参数说明
recipel_order_no
:字段需要应用商存储下来,用于以后的业务对账,此为甘草侧的处方订单号。fee
:为结算价格,其中包含药材结算价,加工成本,运费成本。下单的扣费逻辑
:下单成功后,会自动对账户的钱包余额进行扣款,若余额低于授信额度,将会拦截下单,遇到此问题需要联系商务经理进行处理。但请不用担心,正常会在额度低于10%时甘草的渠道经理会提现与商户进行联系。
- 入口协议
{
"token":"开放平台api用的token [required | alpha_num | min:10 | max:100]",
"df_id":"剂型id [required | integer | in: 101:饮片, 102:浓缩丸]",
"amount":"帖数(默认1) [required | integer | min:1]",
"m_list":[
{
"id":"药id [required | integer | min:1]",
"quantity":"用药数量(小数点后1位) [required | numeric | min:0.1 | max:9999.9]",
"brief":"特殊处理方式(多个,分割)(另包,打碎,兑入,先煎,后下,另煎,包煎,烊化,打粗粉,打细粉) [string]"
}
],
"df101ext":{
"times_per_day":"日使用次数(如2:指 2次/天)[integer | min:1 | max:6]",
"is_decoct":"是否为代煎 [integer | in: 0代配,1代煎]",
"num_per_pack":"【代煎】每贴出包数(如2:指 2包/每贴)[integer | min:1 | max:9]",
"is_special_writing":"【代煎】出包数特殊写法 [integer | in: 0正常出包写法, 1特殊写法]",
"dose":"【代煎】每次计量,建议150(如150:指 150ml/袋)(常用值:50,60,100,150,200;注意与药库配置有关)[integer | min:50 | max:250]",
"usage_mode":"使用范围(默认EXTERNAL_USE) [string | in: EXTERNAL_USE外用, ORAL内用]",
"ds_type":"药库类型(默认1) [integer | in: 1:普通, 2:精致]"
},
"df102ext":{
"times_per_day":"日使用次数(如2:指 2次/天)[integer | min:1 | max:5]",
"dose":"每次计量(如5 指出 5g)[integer | min:3 | max:10]",
"take_days":"服用天数(默认7) [integer | min:1 | max:999]",
"coating_type":"丸剂包衣类型(空:无包衣) [string | in: NORMAL:普通包衣]",
"pill_type":"浓缩丸规格 [string | in:WATER:浓缩水丸, HONEY:浓缩蜜丸]"
},
"df103ext":{
"times_per_day":"日使用次数(如2:指 2次/天)[integer | min:1 | max:6]",
"num_per_pack":"每贴出包数(如2:指 2包/每贴)[integer | min:1 | max:9]",
"is_special_writing":"出包数特殊写法 [integer | in: 0正常出包写法, 1特殊写法]",
"auth_auto_convert":"授权饮片克重自动转换新标克重(注意:不授权会被拒单)[integer | in:0,1]",
"usage_mode":"使用范围(默认EXTERNAL_USE) [string | in: EXTERNAL_USE外用, ORAL内服]"
},
"df130ext":{
"times_per_day":"日使用次数(如2:指 2次/天)[integer | min:1 | max:6]",
"dose":"每次剂量(如5:指出 5包|片|克)[integer | min:1 | max:60]",
"pack_type":"包装方式[string | in: cream膏体罐装, extract流浸膏, drychip干切片]",
"package_amount":"【流浸膏】出包数区间(详见说明,如:110~120) [string | min:5 | max:7]"
},
"doct_advice":{
"taboo":"服用禁忌(如:忌油腻) [string | max:128]",
"usage_time":"服用时间(如:饭后半小时服用) [required | string | max:32]",
"usage_brief":"使用描述(如:四碗煎一碗,热汤调入饴糖一勺温服) [string | max:128]",
"others":"医嘱备注 [string | max:128]",
"notes_doctor":"订单备注(仅制药厂家可见) [string | max:128]"
},
"express_type":"物流类型 [required | string | in: general普通物流,dangrida当日达]",
"express_to":{
"name":"收件人名字 [required | string | max:16]",
"phone":"收件人手机号(国内定长11位) [required | digits:11]",
"province":"省名(如:浙江省) [required | string | min:2 | max:16]",
"city":"市名(如:杭州市) [required | string | min:2 | max:16]",
"addr":"收货详细地址(必须包含:省、市、区、街道门牌号) [require | string | max:64]",
"lon":"经度(高德坐标:如 121.5918) [numeric | min:-180 | max:180]",
"lat":"纬度(高德坐标:如 31.155779) [numeric | min:-90 |max:90]"
},
"status_recipel":"药方隐藏显示选项 [required | string | in: ORDINARY:正常(隐藏价格), PRICE_GRAM_HIDE:隐藏价格克数, HIDE:不放处方单, NOT_PUT_S_LABEL:不放小标签]",
"app_order_no":"应用商订单号(全局唯一) [required | string | max:32]",
"cradle_store":"处方发源地(如:四川省中医院 或 线上接诊) [required | string | min:2 | max:32]",
"callback_url":"处方单回调地址(https) [required | url | min:16 | max:256]",
"disease":"病症简述 [required | string | max:128]",
"diagnosis":"诊断记录 [required | string | max:128]",
"doctor":{
"name":"医生名字 [required | string | max:10]",
"phone":"医生手机号 [digits:11]",
"doctor_sign":"医生签名(url全地址;建议:200*100白底黑字png或jpg) [url | min:16 | max:128]"
},
"patient":{
"name":"患者名字 [required | string | max:30]",
"age":"年龄(整数位为年,小数定长两位为月01~12); 例如:0.11为11个月,0.01为1个月,0.00不到1个月) [required | numeric | min:0.00 | max:120]",
"sex":"患者性别 [required | integer | in:0女,1男]",
"phone":"患者手机号 [digits:11]"
},
"package":"igc_scm.ops.api.order",
"class":"CTM_SUBMIT_RECIPEL"
}
- 出口协议
{
"result":{
"fd_id":"中药剂型 [required | integer]",
"ds_id":"药库id [required | integer]",
"ds_name":"药库名称 [required | string]",
"recipel_order_no":"处方单编号(如:Gxxx...) [require | string | size:18]",
"app_order_no":"应用商订单号(全局唯一) [required | string | max:32]",
"m_list":{
"id":"药id [required | integer]",
"title":"药名称 [required | string]",
"ops_price":"开放平台结算价 [required | double]",
"unit":"单位 [required | string]",
"quantity":"本次使用量 [required | double]",
"is_national":"是否新标(颗粒剂专用字段) [sometimes | int | in: 0:原企标, 1:省标, 9:国标]",
"equivalent_ratio":"新标剂量换算系数(颗粒剂专用字段) [sometimes | numeric]",
"brief":"特殊处理方式(中药饮片类专用字段) [required | string]",
"weight":"药材重量g(中药饮片) [required | string]"
},
"fee":{
"m_cost":"处方药材价格 [require | numeric | min:0 | max:99999.99]",
"proces_cost":"加工附加费 [require | numeric | min:0 | max:9999.99]",
"lis_cost":"物流费用 [required | numeric | min:0 | max:9999.99]",
"total_cost":"总费用 [required | numeric | min:0 | max:9999.99]"
}
},
"status":{
"code":"status code [string | min:3 | max:5]",
"msg":"status message [string]",
"runtime":"api runtime(ms) [double]"
}
}
- 业务状态码
10001 ⇒ 缺少必要参数
10100 ⇒ 账户授信额度不足,请联系渠道经理充值
10101 ⇒ 当前商户无效
10102 ⇒ 当前药库不可用
10103 ⇒ 当前剂型未绑定药库
10104 ⇒ 剂型对应的扩展参数未传或缺失,请核对
10105 ⇒ 无效的药库配置
10106 ⇒ 药材不支持的特殊加工方式
10107 ⇒ 药材味数检查未通过
10108 ⇒ 药材用量检查未通过
10146 ⇒ 浓缩丸规格暂不支持
10201 ⇒ 药材超量,需要医生签名
10202 ⇒ 存在十八反十九畏药材关系,需要医生签名
10203 ⇒ 剂型扩展参数规则检测未通过
10210 ⇒ 存在缺药药材,请修改
10211 ⇒ 收货地址省名称无效
10212 ⇒ 收货地址城市名称无效
10213 ⇒ 当前商户物流类型暂时仅支持普通快递
10214 ⇒ 处方的药库无法满足持特殊出包数的制作需求
10215 ⇒ 处方中的药材总量低于最最低起做量
10216 ⇒ 丸剂服用天数不正确
10250 ⇒ 处方下单失败
00000 ⇒ 处理成功
# 中药处方撤单并退费
- 使用说明
- 【注意】接口带 4 秒幂等阻断请求约束。
- 【注意】仅当订单处于未派单状态时可进行撤单退费。否则需要联系客服将订单改为待审核转改才能退费。
- 【注意】入参app_order_no与recipel_order_no二选一。
- 入口协议
{
"token":"开放平台API用的token [required | alpha_num | min:10 | max:100]",
"app_order_no":"应用商订单号(全局唯一) [sometimes | string | max:32]",
"recipel_order_no":"甘草处方单编号(如:Gxxx...) [sometimes | alpha_num:18]",
"package":"igc_scm.ops.api.order",
"class":"CTM_REFUND_RECIPEL"
}
- 出口协议
{
"result":{
},
"status":{
"code":"status code [string | min:3 | max:5]",
"msg":"status message [string]",
"runtime":"api runtime(ms) [double]"
}
}
- 业务状态码
10001 ⇒ 缺少必要参数
10100 ⇒ 账户授信额度不足,请联系甘草渠道经理充值
10101 ⇒ 当前商户无效
10102 ⇒ 无效的订单号
10103 ⇒ 订单当前状态不能退费,请联系甘草客服
10104 ⇒ 订单已经存在退款,不能主动退款,请联系甘草客服
00000 ⇒ 处理成功
# 获取物流路由信息
- 使用说明
- 【注意】出参 route_list 可能为空数组
- 【注意】入参 get_all=0 值返回最近3条记录,为1返回全部记录【route_list数组】
- 当订单状态进入物流中的 状态后,可使用本接口查询物流路由信息,入参app_order_no为下单接口返回的recipel_order_no甘草处方单编号
- 入口协议
{
"app_order_no":"甘草处方订单号 [string | max:32]",
"get_all":"所有记录?[require | int | list:0,1]",
"package":"igc_scm.logistics.client_opt.pull",
"class":"GET_TASK_ROUTE_LIST"
}
- 出口协议
{
"result":{
"t_status":"任务状态 [require | int]",
"t_status_name":"任务状态名称 [require | string]",
"sp_order_no":"快递面单编号 [require | string]",
"place_order_type":"下单类型 [require | int | list: 0未下单,1在线下,2手动下单]",
"sp_code":"物流供应商代码 [require | string]",
"sp_name":"物流供应商名称 [require | string]",
"sp_ico":"物流供应商图标(oss对象名) [require | string]",
"promise_dt":"预计派单时间(仅支持顺丰) [require | string]",
"route_list":[
{
"accept_time":"路由节点时间 [require | string]",
"remark":"路由事件信息 [require | string]",
"route_type":"路由状态 [require | int | list: 0任务创建,10已下单(待揽件),11已揽件,12转运中,13已送达,20取消订单,21派件异常]",
"route_type_name":"路由状态名称 [require | string]"
}
]
},
"status":{
"code":"status code [string | min:3 | max:5]",
"msg":"status message [string]",
"runtime":"api runtime(ms) [double]"
}
}
- 业务状态码
10001 ⇒ 缺少必要参数
10101 ⇒ 快递任务id不存在
10102 ⇒ lt_no与app_order_no必须提供一个
10103 ⇒ 抱歉只能查询90天内的物流信息
00000 ⇒ 处理成功
# 订单状态回调
回调地址在【中药处方下单】的时候用callback_url字段传入,当订单的状态发生变化后会触发业务回调,三方的回调地址务必在5秒内返返回“ok”字符响应,否则会认为回调失败。 建议业务方接收到回调后立即响应ok,然后再自己内部使用异步方式订单状态做更新,尽量优先保证第一时间响应,以节省服务方的资源。
回调请求header中包含内容验签字段access_sign,用以确认回调是由开放平台侧生成的,防止其他攻击方发起恶意回调或者中途篡改。 header中参数为:access_appkey, access_nonce, access_timestamp, access_sign;
access_appkey,secret_key:请向开放平台技术支持索取。
# access_sign签名算法
md5(access_appkey + secret_key + access_nonce + access_timestamp + $sBody)
其中:access_appkey与secret_key,由开放平台提供,$sBody为待发送的json数据体。若遇到access_sign与您本地生成的值不匹配,请丢弃当前回调的请求。
# 签名校对数据样例
access_appkey: ak-36b05d5034f13a86b102c97e72f14
secret_key: f8c1f3c58b55a61a4d41242016d314ea
access_nonce: 1jd4u8ii
access_timestamp: 1723014934
Body: {"recipel_order_no":"1234","state":10}
(结果)access_sign: 68c755e5db51ac06ff1aa87a7ad59aef
# 回调参数结构
{"recipel_order_no":"甘草处方单号","app_order_no":"应用商处方单号","state":"订单状态","ext":{"flow_name":"加工流名","supplier":"订单制作药房","shipping_name":"物流商","nu":"物流单号"}}
state
的状态如下:10系统审核中,11系统审核通过,110订单药房流转制作中,20物流中,30完成(终态)
【注意】 ext为动态字段,根据不同的状态会返回不同的kv结构内容
若遇到110状态,必定会存在 ext.flow_name,ext.supplier结构,对应的值为订单在加工业务流中的各种流程的变化,如:派单、审方、调配、复核、浸泡、煎药开始...包装、发货、寄出等等,会根据剂型不同有变化
若遇到20,30状态,必定会存在 ext.shipping_name,ext.nu,ext.supplier结构,此为物流单号信息。
【注意】 系统回调业务方失败时,会进行重试,最多重试10次。重试的间隔为:失败次数*5分钟。