var paramter = new Parameters();
Senparc.Weixin.TenPay.V3.RequestHandler packageReqHandler = new Senparc.Weixin.TenPay.V3.RequestHandler(null);
var timeStamp = TenPayV3Util.GetTimestamp();
var nonceStr = TenPayV3Util.GetNoncestr();
//设置package订单参数
packageReqHandler.SetParameter("appid", paramter.appid); //公众账号ID
packageReqHandler.SetParameter("mch_id", paramter.mchid); //商户号
packageReqHandler.SetParameter("out_trade_no", "AF0000000179"); //填入商家订单号
//packageReqHandler.SetParameter("transaction_id", "4200000568202004283369673010"); //填入微信订单号
packageReqHandler.SetParameter("out_refund_no", "224138540220170502163706139412");//填入退款订单号
packageReqHandler.SetParameter("total_fee", "1"); //填入总金额
packageReqHandler.SetParameter("refund_fee", "1"); //填入退款金额
packageReqHandler.SetParameter("op_user_id", paramter.mchid); //操作员Id,默认就是商户号
packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串
string sign = packageReqHandler.CreateMd5Sign("key", paramter.key);
packageReqHandler.SetParameter("sign", sign); //签名
//退款需要post的数据
string data = packageReqHandler.ParseXML();
//退款接口地址
string url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
//本地或者服务器的证书位置(证书在微信支付申请成功发来的通知邮件中)
string cert = @"E:\cert\apiclient_cert.p12";
//私钥(在安装证书时设置)
string password = paramter.mchid;
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
//调用证书
X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
#region 发起post请求
HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
webrequest.ClientCertificates.Add(cer);
webrequest.Method = "post";
byte[] postdatabyte = Encoding.UTF8.GetBytes(data);
webrequest.ContentLength = postdatabyte.Length;
Stream stream;
stream = webrequest.GetRequestStream();
stream.Write(postdatabyte, 0, postdatabyte.Length);
stream.Close();
HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
string responseContent = streamReader.ReadToEnd();
#endregion
RefundResult result = new RefundResult(responseContent);
// var res = XDocument.Parse(responseContent);
//string openid = res.Element("xml").Element("out_refund_no").Value;
return Content("申请成功:<br>" + HttpUtility.HtmlEncode(responseContent));