微信JSAPI支付 申請退款
介面地址
介面鏈接:https://api.mch.weixin.qq.com/secapi/pay/refund
是否需要證書
請求需要雙向證書, 詳見證書使用
請求引數
| 欄位名 | 變數名 | 必填 | 型別 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 公眾賬號ID | appid | 是 | String(32) | wx8888888888888888 | 微信分配的公眾賬號ID(企業號corpid即為此appId) |
| 商戶號 | mch_id | 是 | String(32) | 1900000109 | 微信支付分配的商戶號 |
| 隨機字串 | nonce_str | 是 | String(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 隨機字串,不長于32位,推薦亂數生成演算法 |
| 簽名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 簽名,詳見簽名生成演算法 |
| 簽名型別 | sign_type | 否 | String(32) | HMAC-SHA256 | 簽名型別,目前支持HMAC-SHA256和MD5,默認為MD5 |
| 微信訂單號 | transaction_id | 二選一 | String(32) | 1217752501201407033233368018 | 微信生成的訂單號,在支付通知中有回傳 |
| 商戶訂單號 | out_trade_no | String(32) | 1217752501201407033233368018 | 商戶系統內部訂單號,要求32個字符內,只能是數字、大小寫字母_-|*@ ,且在同一個商戶號下唯一, transaction_id、out_trade_no二選一,如果同時存在優先級:transaction_id> out_trade_no |
|
| 商戶退款單號 | out_refund_no | 是 | String(64) | 1217752501201407033233368018 | 商戶系統內部的退款單號,商戶系統內部唯一,只能是數字、大小寫字母_-|*@ ,同一退款單號多次請求只退一筆, |
| 訂單金額 | total_fee | 是 | Int | 100 | 訂單總金額,單位為分,只能為整數,詳見支付金額 |
| 退款金額 | refund_fee | 是 | Int | 100 | 退款總金額,訂單總金額,單位為分,只能為整數,詳見支付金額 |
| 退款貨幣種類 | refund_fee_type | 否 | String(8) | CNY | 退款貨幣型別,需與支付一致,或者不填,符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值串列詳見貨幣型別 |
| 退款原因 | refund_desc | 否 | String(80) | 商品已售完 |
若商戶傳入,會在下發給用戶的退款訊息中體現退款原因 注意:若訂單退款金額≤1元,且屬于部分退款,則不會在退款訊息中體現退款原因 |
| 退款資金來源 | refund_account | 否 | String(30) | REFUND_SOURCE_RECHARGE_FUNDS |
僅針對老資金流商戶使用 REFUND_SOURCE_UNSETTLED_FUNDS---未結算資金退款(默認使用未結算資金退款) REFUND_SOURCE_RECHARGE_FUNDS---可用余額退款 |
| 退款結果通知url | notify_url | 否 | String(256) | https://weixin.qq.com/notify/ |
異步接收微信支付退款結果通知的回呼地址,通知URL必須為外網可訪問的url,不允許帶引數 如果引數中傳了notify_url,則商戶平臺上配置的回呼地址將不會生效, |
public string GetWxGZHPayRefund(){ //構造請求引數 RequestHandler packageReqHandler = new RequestHandler(); #region 構造請求引數 packageReqHandler.SetParameter("appid", WxPayConfig.appid);//APPID packageReqHandler.SetParameter("mch_id", WxPayConfig.mchid);//商戶號 packageReqHandler.SetParameter("nonce_str", TenPayV3Util.GetNoncestr());//隨機串 packageReqHandler.SetParameter("out_refund_no", out_refund_no); packageReqHandler.SetParameter("out_trade_no", out_trade_no);//訂單號 packageReqHandler.SetParameter("refund_fee", (int)(Convert.ToDecimal(refund_fee) * 100) + ""); packageReqHandler.SetParameter("total_fee", (int)(Convert.ToDecimal(total_fee) * 100) + ""); //金額,以分為單位 packageReqHandler.SetParameter("transaction_id", transaction_id); packageReqHandler.SetParameter("sign", packageReqHandler.CreateMd5Sign("key", WxPayConfig.key));//商戶API密鑰(簽名) // #endregion //將引數轉為xml字串 string data = https://www.cnblogs.com/xiaobing-R/p/packageReqHandler.ParseXML(); //發起post異步請求,獲取回傳的內容 //本地或者服務器的證書位置(證書在微信支付申請成功發來的通知郵件中) string cert = @"D:\WSHH\apiclient_cert.p12"; //私鑰(在安裝證書時設定) string password = WxPayConfig.mchid; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); //呼叫證書 X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet); #region 發起post請求 HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(WxPayConfig.refund_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 var res = System.Xml.Linq.XDocument.Parse(responseContent); string return_code = res.Element("xml").Element("return_code").Value; Hashtable hashtable = new Hashtable(); hashtable.Add("return_code", return_code); return dicResult; } private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { if (errors == SslPolicyErrors.None) return true; return false; }
注意:
如果報:基本賬戶余額不足,請充值后重新發起 ,那就是基本賬戶余額不足, 充個一塊錢就好了
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/33243.html
標籤:.NET Core
上一篇:vue+.netcore可支持業務代碼擴展的開發框架 VOL.Vue 2.0版本發布
下一篇:分享一個集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo+SkyWalking的微服務開發框架
