商户处理后同步返回给微信的结果示例:<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>
webapi项目,Global 文件中已经设置了xmlformatter 的 UseXmlSerializer 属性为true.
微信支付回调请求headers内容很少,Content-Type:text/xml.
/// <summary>
/// 微信支付回调响应实体
/// </summary>
[XmlRoot("xml")]
public class WxPayResult
{
/// <summary>
/// 实体属性
/// </summary>
[XmlIgnore]
public string return_code { get; set; }
/// <summary>
/// xml元素
/// </summary>
[XmlElement("return_code")]
public XmlNode Code
{
get
{
return new XmlDocument().CreateCDataSection(return_code);
}
set
{
return_code = value.InnerText;
}
}
}
回调处理函数不做任何处理,直接返回成功.
public IHttpActionResult Test()
{
var resp = new WxPayResult()
{
return_code = "SUCCESS"
};
return Ok(resp);
}
自己调试返回结果为:<xml xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><return_code><![CDATA[SUCCESS]]></return_code></xml>
但是微信支付不识别,总是重复推送支付回调结果.
回调处理函数用另一种写法
public HttpResponseMessage Test()
{
var xml= "<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>";
var resp = Request.CreateResponse(HttpStatusCode.OK, xml, "text/xml");
return resp;
}
返回结果同上.
微信支付还是不识别,重复推送支付结果
我这样弄的,控制器处
return new HttpResponseMessage { Content = new StringContent("要返回给微信的内容", Encoding.GetEncoding("UTF-8"), "text/plain") };
webapi删除了默认的xmlformatter,GlobalConfiguration.Configuration.Formatters.XmlFormatter.自定义实现的格式化器里面,输出流时直接用了Encoding.UTF8 默认编码,这样会生成BOM头,导致微信服务器不识别,应该 new System.Text.UTF8Encoding(false),指定不生成BOM标识.
你自己调一下.看下返回值先
我返回给微信服务器的就是这个:
<xml xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><return_code><![CDATA[SUCCESS]]></return_code></xml>
比官方的示例多了xml的命名空间
<xml><return_code><![CDATA[SUCCESS]]></return_code></return_msg></xml>
@shangsharon: 你怎么查看到的结果?
@吴瑞祥: 模拟请求的啊
@shangsharon: 你返回值用string.然后直接return xml;看看