在.net core上,Web網站調用微信支付-統一下單接口(xml傳參)一直返回錯誤:mch_id參數格式錯誤


 

這是 微信支付-統一下單 接口文檔 

 

一、問題描述

在調用統一下單接口時,報mch_id參數格式錯誤,但商戶ID確實是10位數字正確的,可就是一直報這個錯誤

返回的錯誤xml如下:

 

 

二、排錯過程

1、多次對比官網xml格式,確認生成的xml是否有誤

2、檢查生成的xml是否帶有空格、字段是否拼寫有誤,檢查生成的xml是否有缺少或多字符

官方的xml:

 

 

 

我開發過程中生成的xml:

 

 

對比發現,我生成的xml參數比官方的參數多了CDATA等着字符,但CDATA標簽是用於說明數據不被XML解析器解析的,不應該會影響xml的結構。

 

后來發現,就算我把生成的xml參數中的必須的字段從xml中移除,再去調用接口,發現還是返回一樣的錯誤。

考慮過后,我在想:是不是發起請求的代碼有誤。

於是我嘗試修改發起請求的代碼,原使用HttpClient發起請求,改為WebRequest,發現接口正確返回數據。

三、錯誤原因及解決方案

由此我分析錯誤原因是我在.net core上使用HttpClient發起請求,卻沒有正確返回,不知怎么還返回了意料之外的錯誤(異常)

HttpClient示例代碼是:

var response = await httpClient.PostAsXmlAsync(url, xml);

 

嘗試使用WebRequest之后,接口正常返回數據。

 

使用WebRequest發起請求,示例代碼是:

var bytes = (xml== null) ? new byte[0] : Encoding.UTF8.GetBytes(xml);

using (var ms = new MemoryStream())
{
    ms.Write(bytes, 0, bytes.Length);
    ms.Seek(0, SeekOrigin.Begin);

    var request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "POST";

    .....后續代碼省略.....

 

}

 

目前我先用WebRequest實現代碼,至於為什么HttpClient發起請求返回錯誤,后續查找資料、分析總結。

 


免責聲明!

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



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