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

微信JSAPI支付  申請退款

 

接口地址

接口連接:https://api.mch.weixin.qq.com/secapi/pay/refundphp

是否須要證書

請求須要雙向證書。 詳見證書使用web

請求參數

字段名 變量名 必填 類型 示例值 描述
公衆帳號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) 商品已售完

若商戶傳入,會在下發給用戶的退款消息中體現退款緣由api

注意:若訂單退款金額≤1元,且屬於部分退款,則不會在退款消息中體現退款緣由服務器

退款資金來源 refund_account String(30) REFUND_SOURCE_RECHARGE_FUNDS

僅針對老資金流商戶使用微信

REFUND_SOURCE_UNSETTLED_FUNDS---未結算資金退款(默認使用未結算資金退款)app

REFUND_SOURCE_RECHARGE_FUNDS---可用餘額退款異步

退款結果通知url notify_url String(256) https://weixin.qq.com/notify/

異步接收微信支付退款結果通知的回調地址,通知URL必須爲外網可訪問的url,不容許帶參數post

若是參數中傳了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;
        }

注意:

  若是報:基本帳戶餘額不足,請充值後從新發起   ,那就是基本帳戶餘額不足, 充個一塊錢就行了

相關文章
相關標籤/搜索