字段名
变量名
必填
类型
示例值
描述
公众账号ID
appid
是
String(32)
wx8888888888888888
微信分配的公众账号ID
商户号
mch_id
是
String(32)
1900000109
微信支付分配的商户号
设备号
device_info
否
String(32)
013467007045764
商户自定义的终端设备号,如门店编号、设备的ID等
随机字符串
nonce_str
是
String(32)
5K8264ILTKCH16CQ2502SI8ZNMTM67VS
随机字符串,不长于32位。推荐随机数生成算法
签名
sign
是
String(32)
C380BEC2BFD727A4B6845133519F3AD6
微信订单号
transaction_id
否
String(28)
1217752501201407033233368018
微信订单号
商户订单号
out_trade_no
是
String(32)
1217752501201407033233368018
商户系统内部的订单号
商户退款单号
out_refund_no
否
String(32)
1217752501201407033233368018
商户退款单号
微信退款单号
refund_id
否
String(28)
1217752501201407033233368018
微信退款单号
refund_id、out_refund_no、out_trade_no、transaction_id四个参数必填一个,如果同时存在优先级为:
refund_id>out_refund_no>transaction_id>out_trade_no
返回数据
字段名
变量名
必填
类型
示例值
描述
返回状态码
return_code
是
String(16)
SUCCESS
SUCCESS/FAIL
返回信息
return_msg
否
String(128)
签名失败
返回信息,如非空,为错误原因
签名失败
参数格式校验错误
以下字段在return_code为SUCCESS的时候有返回
字段名
变量名
必填
类型
示例值
描述
业务结果
result_code
是
String(16)
SUCCESS
SUCCESS/FAIL
SUCCESS退款申请接收成功,结果通过退款查询接口查询
FAIL
错误码
err_code
是
String(32)
SYSTEMERROR
错误码详见第6节
错误描述
err_code_des
是
String(32)
系统错误
结果信息描述
公众账号ID
appid
否
String(32)
wx8888888888888888
微信分配的公众账号ID
商户号
mch_id
是
String(32)
1900000109
微信支付分配的商户号
设备号
device_info
是
String(32)
013467007045764
微信支付分配的终端设备号,与下单一致
随机字符串
nonce_str
是
String(28)
5K8264ILTKCH16CQ2502SI8ZNMTM67VS
随机字符串,不长于32位
签名
sign
是
String(32)
C380BEC2BFD727A4B6845133519F3AD6
签名,详见签名算法
微信订单号
transaction_id
是
String(32)
1217752501201407033233368018
微信订单号
商户订单号
out_trade_no
是
String(32)
1217752501201407033233368018
商户系统内部的订单号
订单总金额
total_fee
是
Int
100
订单总金额,单位为分,只能为整数,详见支付金额
订单金额货币种类
fee_type
否
String(8)
CNY
订单金额货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
现金支付金额
cash_fee
是
Int
100
现金支付金额,单位为分,只能为整数,详见支付金额
货币种类
cash_fee_type
否
String(8)
CNY
货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
退款金额
refund_fee
是
Int
100
退款总金额,单位为分,可以做部分退款
代金券或立减优惠退款金额
coupon_refund_fee
否
Int
100
代金券或立减优惠退款金额=订单金额-现金退款金额,注意:满立减金额不会退回
退款笔数
refund_count
是
Int
1
退款记录数
商户退款单号
out_refund_no_$n
是
String(32)
1217752501201407033233368018
商户退款单号
微信退款单号
refund_id_$n
是
String(28)
1217752501201407033233368018
微信退款单号
退款渠道
refund_channel_$n
否
String(16)
ORIGINAL
ORIGINAL—原路退款
BALANCE—退回到余额
退款金额
refund_fee_$n
是
Int
100
退款总金额,单位为分,可以做部分退款
货币种类
fee_type_$n
否
String(8)
CNY
货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
代金券或立减优惠退款金额
coupon_refund_fee_$n
否
Int
100
代金券或立减优惠退款金额<=退款金额,退款金额-代金券或立减优惠退款金额为现金,说明详见代金券或立减优惠
代金券或立减优惠使用数量
coupon_refund_count_$n
否
Int
1
代金券或立减优惠使用数量 ,$n为下标,从1开始编号
代金券或立减优惠批次ID
coupon_refund_batch_id_$n_$m
否
String(20)
100
批次ID ,$n为下标,$m为下标,从1开始编号
代金券或立减优惠ID
coupon_refund_id_$n_$m
否
String(20)
10000
代金券或立减优惠ID, $n为下标,$m为下标,从1开始编号
单个代金券或立减优惠支付金额
coupon_refund_fee_$n_$m
否
Int
100
单个代金券或立减优惠支付金额, $n为下标,$m为下标,从1开始编号
退款状态
refund_status_$n
是
String(16)
SUCCESS
退款状态:
SUCCESS—退款成功
FAIL—退款失败
PROCESSING—退款处理中
NOTSURE—未确定,需要商户原退款单号重新发起
CHANGE—转入代发,退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,资金回流到商户的现金帐号,需要商户人工干预,通过线下或者财付通转账的方式进行退款。
后台代码:
///
/// 查询退款
///
///
///
public JsonResult RefundQuery(TRADE_Model trade)
{
string nonceStr = Senparc.Weixin.MP.TenPayLibV3.TenPayV3Util.GetNoncestr();
Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null);
packageReqHandler.SetKey(Key);
packageReqHandler.SetParameter("appid", AppId);
packageReqHandler.SetParameter("mch_id", MchId);
packageReqHandler.SetParameter("nonce_str", nonceStr);
//packageReqHandler.SetParameter("transaction_id", "");//微信订单号
packageReqHandler.SetParameter("out_trade_no", trade.TRADE_NO);//商户系统内部的订单号
//packageReqHandler.SetParameter("out_refund_no", "");//商户退款单号
//packageReqHandler.SetParameter("refund_id", "");//微信退款单号
//注意:refund_id、out_refund_no、out_trade_no、transaction_id四个参数必填一个,如果同时存在优先级为:refund_id>out_refund_no>transaction_id>out_trade_no
string querysign = packageReqHandler.CreateMd5Sign("key", Key);
packageReqHandler.SetParameter("sign", querysign); //签名
string data = packageReqHandler.ParseXML();
var result = Senparc.Weixin.MP.AdvancedAPIs.TenPayV3.RefundQuery(data);
var res = System.Xml.Linq.XDocument.Parse(result);
string return_code = res.Element("xml").Element("return_code").Value;
Hashtable hashtable = new Hashtable();
return Json(hashtable);
}