Appearance
医保混合支付退款通知
1 功能说明
此接口用于医院通知微信以及银行订单有退款情况。其中请求中含有医保部分退款的,银行会进一步通知微信。
- 请求中若含有医保部分退款的,银行会进一步通知微信。 交易链路:医院->银行->微信 请使用工行API平台提供的SDK进行调用,(可参考调用示例代码)
2 请求路径
| 环境 | 路径 |
|---|---|
| 正式环境 | https://gw.open.icbc.com.cn/api/hbfh/mimp/mixrefundnotify/V1 |
(测试环境切模测需替换样例中的serviceUrl即可,公、私钥,appid以及AES密钥不变;切换生产环境除了serviceUrl还需替换公、私钥,appid以及AES密钥)
3 通用请求参数
| 参数名 | 类型 | 是否必输 | 最大长度 | 描述 | 示例值 | ||
|---|---|---|---|---|---|---|---|
| from | str | true | - | 工行调用固定为icbc-api | icbc-api | ||
| api | str | true | - | 接口路径,调用哪一个接口的回调 | |||
| app_id | str | true | - | 合作方在工行开具的应用编号 | |||
| charset | str | true | - | 调用过程使用的编码格式 | utf-8 | ||
| format | str | true | - | 报文类型 | json | ||
| encrypt_type | str | false | - | 加密方式,此接口默认不加密 | - | ||
| timestamp | str | true | - | 回调发生时间,格式为“yyyy-MM-dd HH:mm:ss” | 2017-01-12 17:33:56 | ||
| sign_type | str | true | - | 签名类型,目前网关回调请求的签名只支持RSA方式,需要合作方使用网关公钥验签 | RSA | ||
| sign | str | true | - | 工行签名 | FSDFDRYXDS342FDSR | ||
| biz_content | str | true | - | 业务参数集合,详见业务参数说明 | - |
4 请求参数
| 参数 | 类型 | 是否必输 | 最大长度 | 描述 | 示例值 |
|---|---|---|---|---|---|
| hospital_id | string | 是 | [1, 32] | 工行侧定义的医院编号,由工行提供 | 0001 |
| refund_type | string | 是 | 退款类型 | MED_REFUND - 纯医保退费,SELF_REFUND-纯自费退费,MIX_REFUND-医保自费混合退费 | |
| intrx_serial_no | string | 退款类型含有自费部分退款必送 | [1,30] | 银行侧退款流水号(退款成功后由工行聚合支付退费API返回) | 202311140923999754132 |
| cash_refund_fee | int | 退款类型含有自费部分退款必送 | - | 单位分,自费退款金额。 | 45000 |
| mix_trade_no | string | 是 | [1, 32] | 医保自费混合订单号 | 202204022005169952975171534816 |
| sub_mchid | string | 否 | [1, 32] | 医疗机构的商户号(通知自费部分退款时可不送。医保部分退款时建议送,若不送,将会以银行侧配置的值向微信发报) | 1900008XXX |
| med_refund_total_fee | int | 退款类型含有医保部分退款必送 | - | 单位分,医保退款的总金额。 | 45000 |
| med_refund_gov_fee | int | 退款类型含有医保部分退款必送 | - | 单位分,医保统筹退款金额。 | 45000 |
| med_refund_self_fee | int | 退款类型含有医保部分退款必送 | - | 单位分,医保个账退款金额。 | 45000 |
| med_refund_other_fee | int | 退款类型含有医保部分退款必送 | - | 单位分,医保其他退款金额。 | 45000 |
| refund_time | string | 退款类型含有医保部分退款必送 | [1, 64] | 医保退款成功时间 遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE。 | 2015-05-20T13:29:35+08:00 |
| cancel_serial_no | string | 退款类型含有医保部分退款必送 | [1, 20] | 医保退款业务流水号 例如医院HIS系统退款订单号。 | 1217752501201 |
5 通用响应参数
| 参数名 | 类型 | 是否非空 | 最大长度 | 描述 | 示例值 |
|---|---|---|---|---|---|
| response_biz_content | str | true | - | 响应参数集合,包含公共和业务参数 | - |
| sign | str | true | 300 | 针对返回参数集合的签名 | ERITJKEIJKJHKHJEREEEEEEEE |
6 响应参数
| 参数 | 类型 | 是否必输 | 最大长度 | 描述 | 示例值 |
|---|---|---|---|---|---|
| return_code | string | 是 | - | 返回码,交易成功返回0,其他表示业务报错 | 0 |
| return_msg | string | 是 | - | 返回消息 | 微信已成功接收退款消息 |
7 使用示例
java
DefaultIcbcClient client = new DefaultIcbcClient(APP_ID,
MY_PRIVATE_KEY, APIGW_PUBLIC_KEY);
HbfhMimpRefundNotifyV1 request = new HbfhMimpRefundNotifyV1();
request.setServiceUrl("https://gw.open.icbc.com.cn/api/hbfh/mimp/mixrefundnotify/V1");
HbfhMimpRefundNotifyV1Biz bizContent = new HbfhMimpRefundNotifyV1Biz();
bizContent.setHospitalId("0001"); //工行侧定义的医院编号
bizContent.setRefund_Type("MIX_REFUND"); //退款类型
request.setBizContent(bizContent);
try {
HbfhMimpRefundNotifyV1 response = client.execute(request,
"msg_id");
if (response.isSuccess() && response.getReturnCode() == 0) {
// 处理成功
System.out.println(JSONObject.toJSONString(response));
System.out.println(response.getResult());
} else {
// 失败
System.out.println(response.getReturnMsg());
}
} catch (IcbcApiException e) {
e.printStackTrace();
}8 请求示例
json
{
"refund_type":"MED_REFUND",
"hospital_id": "0001",
"cancel_serial_no": "1217752501201",
"refund_time": "2015-05-20T13:29:35+08:00",
"mix_trade_no": "202304022005169952975171534820",
"med_refund_total_fee": 4500,
"med_refund_gov_fee":4500,
"med_refund_self_fee":0,
"med_refund_other_fee":0,
"sub_mchid": "999706307"
}9 响应示例
json
{
"return_code": "0",
"return_msg": "微信已成功接收退款消息"
}10 异常示例
json
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"response_biz_content":{
"return_code":-500041,
"return_msg":"service proxy exception."
},
"sign":"ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE"
}11 返回码解释
| 返回码 | 返回说明 |
|---|---|
| 0 | 成功 |
| -31 | 响应请求转换失败 |
| -30 | 服务方响应状态错误 |
| 400011 | 参数非法,原因可能为app id为空、app id非法、签名为空、应用系统时间与API平台系统时间不在限定差值以内、时间戳非法 |
| 500018 | 访问的API不存在 |
| 500020 | 非法调用 |
| 400016 | app公钥未维护 |
| 400017 | 签名验证失败 |
| 400019 | 授权验证失败 |
| 500031 | 速率超限 |
| 500032 | 并发超限 |
| -500041 | 代理异常 |
| -500042 | 代理超时 |
| -500044 | 网关签名失败 |
| 500043 | 网关配置文件错误,无法从配置文件中读取配置 |
| 400051 | app id前缀错误,沙箱测试时app id必须添加sandboxie_前缀 |
| 500052 | 沙箱测试不支持UI类型的API |
| 500091 | 没有管理权限 |
| -500099 | 网关内部异常 |
| 5399 | 终端上送数据错 |
| -8999 | 方法未登记 |