一、問題描述
在調用統一下單接口時,報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發起請求返回錯誤,后續查找資料、分析總結。