public WeiXinRefundResponse Refund(WeiXinRefundRequest request) { SortedDictionary <String, String> param = new SortedDictionary <String, String>(); String noncestr = CommonUtil.CreateNoncestr(); param.Add("appid", appid); param.Add("mch_id", Config.PartnerId); param.Add("nonce_str", noncestr); if (isSubCommercial) { if (Config.IsMiniAppPay) { param.Add("sub_appid", Config.AppId); } param.Add("sub_mch_id", Config.SubPartnerId); } param.Add("out_trade_no", request.OutTradeNO); param.Add("transaction_id", request.TransactionID); param.Add("out_refund_no", request.RefundNO); param.Add("total_fee", request.PayAmount.ToString()); param.Add("refund_fee", request.RefundPayAmount.ToString()); String tmpPackageStr = CommonUtil.CreateLinkString(param); String signValue = CommonUtil.Sign(tmpPackageStr, Config.PartnerKey).ToLower(); param.Add("sign", signValue); X509Certificate2 cert = new X509Certificate2(Config.CertFilePath, Config.PartnerId, X509KeyStorageFlags.MachineKeySet); String tmpRes = HttpRequestUtil.Send("POST", RefundUrl, CommonUtil.ArrayToXml(param), 60, cert); var tmpResult = XmlToDic(tmpRes); WeiXinRefundResponse res = new WeiXinRefundResponse(); if (tmpResult["return_code"] == Fail) { return(new WeiXinRefundResponse { RetCode = Fail, RetMsg = tmpResult["return_msg"] }); } var tmpSignResult = CommonUtil.FilterPara(tmpResult); if (!IsMD5Sign(tmpSignResult, tmpResult["sign"])) { return(new WeiXinRefundResponse { RetCode = Fail, RetMsg = "签名验证失败" }); } if (tmpResult["result_code"] == Fail) { var errMsg = ""; if (!tmpResult.TryGetValue("err_code_des", out errMsg)) { errMsg = GetErrMsg(tmpResult["err_code"]); } return(new WeiXinRefundResponse { RetCode = Fail, RetMsg = errMsg }); } return(new WeiXinRefundResponse { RetCode = "0", RefundTime = DateTime.Now, OrderNO = tmpResult["out_trade_no"], TransactionID = tmpResult["transaction_id"], RefundNO = tmpResult["out_refund_no"], RefundId = tmpResult["refund_id"], RefundAmount = decimal.Parse(tmpResult["refund_fee"]) / 100 }); }
public override RefundResponse Refund(RefundRequest request) { WeiXinRefundRequest tmp = request as WeiXinRefundRequest; return(weixin.Refund(tmp)); }