在.net core上,Web网站调用微信支付-统一下单接口(xml传参)一直返回错误:mch_id参数格式错误

Posted gilbert

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在.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发起请求返回错误,后续查找资料、分析总结。

 

以上是关于在.net core上,Web网站调用微信支付-统一下单接口(xml传参)一直返回错误:mch_id参数格式错误的主要内容,如果未能解决你的问题,请参考以下文章

2021-07-30 .NET高级班 123-直播项目专题(微信支付对接)

Asp.net Core 微信小程序支付

微信:微信扫码支付调用统一下单接口网站支付 + springmvc

微信:微信扫码支付调用统一下单接口网站支付 + springmvc

微信扫码支付+Asp.Net MVC

小5聊.net core2.1对接微信支付开发时自己挖