/// <summary> /// 退款 /// </summary> /// <param name="info"></param> /// <returns></returns> public override bool Refund(PaylineEntity info) { string url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; var requsetParams = new SortedDictionary <string, string>(); requsetParams.Add("total_fee", Math.Abs(info.Amount * 100).Convert <int>().ToString()); requsetParams.Add("refund_fee", Math.Abs(info.Amount * 100).Convert <int>().ToString()); requsetParams.Add("out_refund_no", info.Number); requsetParams.Add("transaction_id", info.OutNumber); requsetParams.Add("appid", AppId); requsetParams.Add("mch_id", MchId); requsetParams.Add("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));//随机字符串 requsetParams.Add("sign", MakeSign(requsetParams, MchKey)); string xml = ToRequestXml(requsetParams); var webRequest = (HttpWebRequest)WebRequestHelper.CreateWebRequestWithCertificate(url, CertPath, MchId); string response = WebRequestHelper.SendPostRequest(webRequest, Encoding.UTF8, xml); var result = FromResponseXml(response); LogHelper.AddEcho(new EchoEntity { Method = "Beeant.Repository.Services.Finance.WechatPaylineRepository.Refund", Request = xml, Response = result.SerializeJson(), Remark = "", Url = HttpContext.Current.Request.Url.ToString(), Key = info.Number, SaveType = SaveType.Add }); if (result == null || !result.ContainsKey("return_code") || result["return_code"] != "SUCCESS") { return(false); } info.Status = PaylineStatusType.Success; info.OutNumber = result.ContainsKey("refund_id") ? result["refund_id"] : ""; return(true); }