微信支付-JSAPI支付V3-退款申請


接口地址

接口鏈接:https://api.mch.weixin.qq.com/secapi/pay/refund

是否需要證書

請求需要雙向證書。

請求參數

字段名

變量名

必填

類型

示例值

描述

公眾賬號ID

appid

String(32)

wx8888888888888888

微信分配的公眾賬號ID

商戶號

mch_id

String(32)

1900000109

微信支付分配的商戶號

設備號

device_info

String(32)

013467007045764

終端設備號

隨機字符串

nonce_str

String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

隨機字符串,不長於32位。推薦隨機數生成算法

簽名

sign

String(32)

C380BEC2BFD727A4B6845133519F3AD6

簽名,詳見簽名生成算法

微信訂單號

transaction_id

String(28)

1217752501201407033233368018

微信訂單號

商戶訂單號

out_trade_no

String(32)

1217752501201407033233368018

商戶系統內部的訂單號,

transaction_id、out_trade_no二選一,如果同時存在優先級:transaction_id> out_trade_no

商戶退款單號

out_refund_no

String(32)

1217752501201407033233368018

商戶系統內部的退款單號,商戶系統內部唯一,同一退款單號多次請求只退一筆

總金額

total_fee

Int

100

訂單總金額,單位為分,只能為整數,詳見支付金額

退款金額

refund_fee

Int

100

退款總金額,訂單總金額,單位為分,只能為整數,詳見支付金額

貨幣種類

refund_fee_type

String(8)

CNY

貨幣類型,符合ISO 4217標准的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型

操作員

op_user_id

String(32)

1900000109

操作員帳號, 默認為商戶號

返回結果

字段名

變量名

必填

類型

示例值

描述

返回狀態碼

return_code

String(16)

SUCCESS

SUCCESS/FAIL

返回信息

return_msg

String(128)

簽名失敗

 

返回信息,如非空,為錯誤原因

簽名失敗

參數格式校驗錯誤

以下字段在return_code為SUCCESS的時候有返回

字段名

變量名

必填

類型

示例值

描述

業務結果

result_code

String(16)

SUCCESS

SUCCESS/FAIL

SUCCESS退款申請接收成功,結果通過退款查詢接口查詢

FAIL 提交業務失敗

錯誤代碼

err_code

String(32)

SYSTEMERROR

列表詳見第6節

錯誤代碼描述

err_code_des

String(128)

系統超時

結果信息描述

公眾賬號ID

appid

String(32)

wx8888888888888888

微信分配的公眾賬號ID

商戶號

mch_id

String(32)

1900000109

微信支付分配的商戶號

設備號

device_info

String(32)

013467007045764

微信支付分配的終端設備號,與下單一致

隨機字符串

nonce_str

String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

隨機字符串,不長於32位

簽名

sign

String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

簽名,詳見簽名算法

微信訂單號

transaction_id

String(28)

1217752501201407033233368018

微信訂單號

商戶訂單號

out_trade_no

String(32)

1217752501201407033233368018

商戶系統內部的訂單號

商戶退款單號

out_refund_no

String(32)

1217752501201407033233368018

商戶退款單號

微信退款單號

refund_id

String(28)

1217752501201407033233368018

微信退款單號

退款渠道

refund_channel

String(16)

ORIGINAL

ORIGINAL—原路退款

BALANCE—退回到余額

退款金額

refund_fee

Int

100

退款總金額,單位為分,可以做部分退款

訂單總金額

total_fee

Int

100

訂單總金額,單位為分,只能為整數,詳見支付金額

訂單金額貨幣種類

fee_type

String(8)

CNY

訂單金額貨幣類型,符合ISO 4217標准的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型

現金支付金額

cash_fee

Int

100

現金支付金額,單位為分,只能為整數,詳見支付金額

現金退款金額

cash_refund_fee

Int

100

現金退款金額,單位為分,只能為整數,詳見支付金額

代金券或立減優惠退款金額

coupon_refund_fee

Int

100

代金券或立減優惠退款金額=訂單金額-現金退款金額,注意:立減優惠金額不會退回

代金券或立減優惠使用數量

coupon_refund_count

Int

1

代金券或立減優惠使用數量

代金券或立減優惠ID

coupon_refund_id

String(20)

10000 

代金券或立減優惠ID

 

后台代碼:

/// <summary>
        /// 退款申請接口
        /// </summary>
        /// <returns></returns>
        public JsonResult Refund(TRADE_Model trade)
        {
            string nonceStr = Senparc.Weixin.MP.TenPayLibV3.TenPayV3Util.GetNoncestr();

            Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null);

            //設置package訂單參數
            packageReqHandler.SetParameter("appid", AppId);          //公眾賬號ID
            packageReqHandler.SetParameter("mch_id", MchId);          //商戶號
            packageReqHandler.SetParameter("out_trade_no", trade.TRADE_NO);                 //填入商家訂單號
            packageReqHandler.SetParameter("out_refund_no", "");                //填入退款訂單號
            packageReqHandler.SetParameter("total_fee", "");               //填入總金額
            packageReqHandler.SetParameter("refund_fee", "");               //填入退款金額
            packageReqHandler.SetParameter("op_user_id", MchId);   //操作員Id,默認就是商戶號
            packageReqHandler.SetParameter("nonce_str", nonceStr);              //隨機字符串

            string sign = packageReqHandler.CreateMd5Sign("key", Key);

            packageReqHandler.SetParameter("sign", sign);                        //簽名

            //退款需要post的數據
            string data = packageReqHandler.ParseXML();

            //退款接口地址
            string url = "https://api.mch.weixin.qq.com/secapi/pay/refund";

            //本地或者服務器的證書位置(證書在微信支付申請成功發來的通知郵件中)
            string cert = @"D:\apiclient_cert.p12";

            //私鑰(在安裝證書時設置)
            string password = "";

            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

            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 Json(hashtable);
        }

          private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
          {
              if (errors == SslPolicyErrors.None)
                   return true;
              return false;
          }

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM