微信退款(在.net core 用http方式請求)

来源:https://www.cnblogs.com/xiaobing-R/archive/2020/05/11/12841797.html
-Advertisement-
Play Games

微信JSAPI支付 申請退款 介面地址 介面鏈接:https://api.mch.weixin.qq.com/secapi/pay/refund 是否需要證書 請求需要雙向證書。 詳見證書使用 請求參數 欄位名變數名必填類型示例值描述 公眾賬號ID appid 是 String(32) wx8888 ...


微信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 = 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;
        }

註意:

  如果報:基本賬戶餘額不足,請充值後重新發起   ,那就是基本賬戶餘額不足, 充個一塊錢就好了

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • FAE parse : 一成不變 FAE Value : interp的最終轉讓值 numV: value closureV: param FAE(或value,或function) pair list DefrdSub : 傳達environment 以前WAE中使用的DefrdSub只用於wit ...
  • 一、基礎知識 1.1、簡介 Log4Net是一個開源日誌框架,它的功能很強大,可以將日誌分為不同的等級,以不同的格式輸出到不同的存儲介質中,比如:資料庫、txt文件、記憶體緩衝區、郵件、控制台、ANSI終端、遠程接收端等等。 Log4Net將日誌分為五個級別,從高到低分別是:FATAL(致命錯誤)、E ...
  • 視頻:https://www.bilibili.com/video/BV15x411x7WN?p=6 功能點:表格分組,彙總。 結果圖: 操作步驟: 分組實現:設置GroupIndex 表格分數彙總:設置GridView的ShowFooter=true。設置分數列的彙總方式。 在分組裡實現彙總功能: ...
  • 集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的微服務開發框架 Github源代碼地址 https://github.com/PeyShine/Demo.MicroServer Apollo配置 ...
  • 最近看了一下開源項目asp.net katana,感覺公開的介面非常的簡潔優雅,channel 9 說是受到node.js的啟發設計的,Katana是一個比較老的項目,現在已經整合到asp.net core中。 從github克隆下來的項目,這個博客專門是從代碼角度去理解katana項目,所以本篇隨 ...
  • 0.前言 在上一篇中初略的介紹了一下SQL的基本寫法,這一篇開始我們正式步入C 操作資料庫的範圍。通過這一系列的內容,我想大家能對於資料庫交互有了一定的認識和基礎。閑話不多說,先給大家介紹一個C 操作資料庫的方式。 1. ADO.NET的介紹 在ADO.NET出現之前,C 連接資料庫有很多種方式,各 ...
  • 問題描述:jQuery回調函數高版本3.3.1不相容問題 jQuery-3.3.1不能執行回調函數,使用jQuery-1.7.1可以 Ajax.BeginForm方法及參數。真的是不相容嗎?會不會是其他原因?這個好坑,調了好久 使用jQuery-3.3.1登錄成功後指向路由為/Login/UserL ...
  • 2020-05-11 10:29:03 今天就來說一下我的主界面是怎麼寫的吧,首先我使用的父窗體的方法,這樣可以在操作的時候更加的方便,而且有些東西是可以很容易操作的,而且父窗體可以省去一些不必要的麻煩。 主要是最下麵的狀態欄的設置, 登錄賬號設置——>當用戶登陸之後會有一個登錄的賬號,主要是為了方 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...