关于微信支付返回值,为什么会调用5次,请大神看下我哪里错了,只要一次就够啊

qq_16965193 2017-10-26 11:21:42
public static string notice_url()
{
string result = "";
string resultFromWx = getPostStr();
var res = System.Xml.Linq.XDocument.Parse(resultFromWx);

string patha1 = System.Web.HttpRuntime.BinDirectory;
System.IO.StreamWriter loga1 = new System.IO.StreamWriter(patha1 + "SUOYOU.txt", true);
loga1.WriteLine(res);
loga1.Close();

if (res.Element("xml").Element("return_code").Value == "SUCCESS")
{
if (res.Element("xml").Element("result_code").Value == "SUCCESS")
{
string attach = res.Element("xml").Element("attach").Value;
string total_fee_str = res.Element("xml").Element("total_fee").Value;

//存入数据库
DalHelper dbHelper = new DalHelper();
int ss = dbHelper.AjaxInserttotal_fee(System.Convert.ToString(total_fee_str), attach);
if (ss > 0)
{
//告诉微信我知道了,不要再给我发消息了,否则微信会8连击的反馈支付信息
WxPayData Res = new WxPayData();
Res.SetValue("return_code", "SUCCESS");
Res.SetValue("return_msg", "OK");
result = Res.ToXml();


string patha = System.Web.HttpRuntime.BinDirectory;
System.IO.StreamWriter loga = new System.IO.StreamWriter(patha + "resultInfo.txt", true);
loga.WriteLine(result);
loga.Close();
}
}
}
return result;


result 的结果:
<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>

但是微信还是调用我的方法 5次
...全文
1174 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
游北亮 2018-07-26
  • 打赏
  • 举报
回复
我们也有这个问题,微信支付会回调好几次。
原因就是我们在5秒内没有及时响应微信,导致微信认为我们的接口挂了,从而按一定规律进行重试回调。

解决方法很简单,微信回调你的时候,把微信给的数据扔到MQ里,然后立即返回成功信息给微信。
再开一个job进程,去接收MQ数据慢慢处理。

btw:即使微信真的回调多次,你根据支付主键,做一个缓存就好了,缓存存在就抛弃这次微信回调,
这种简单的幂等处理,你是一定要考虑的,网络异常千奇百怪,不考虑的话,问题非常非常难排查
SportSky666 2018-07-26
  • 打赏
  • 举报
回复
一般的话是3次就好了,这个调8次可能是你有什么数据没有返回给微信,这个是正常现象,没问题的,
showlin 2018-07-21
  • 打赏
  • 举报
回复
重复调用不重复调用的,姑且可以放一边,幂等原则,了解一下?
Crq2323 2018-07-20
  • 打赏
  • 举报
回复
引用 15 楼 sp1234 的回复:
确保你的代码在 2、3 秒内一定执行完(response 输出给微信平台)。如果几秒钟不返回,微信是会重复调用几次的!

15楼正解,我的是因为打了断点调试,现在取消断点,回调正常了!
lescper2011 2017-11-13
  • 打赏
  • 举报
回复
你的结果没有正确返回,服务端没有接受到你的处理结果,你看下哪里有问题或者说处理有问题
ying1234 2017-11-13
  • 打赏
  • 举报
回复
引用 19 楼 chb345536638 的回复:
其实不用管对方调用你几次,你自己要做接口幂等性,之前做支付宝支付也是,对方有时候会调用我接口多次
是的,一定要考虑,有的时候第3方自已也搞不清楚为什么会回调多次,我也遇到过,对方的确收到了我返的成功信息,结果还是多调了一次,最后问急了,对方说是为了业务的可靠性,故意多调了一次,你只能无语,一定要把多次回调当成正常用情况来处理。保证你自已的业务逻辑不出问题。
ying1234 2017-11-13
  • 打赏
  • 举报
回复
引用 18 楼 ying1234 的回复:
象充值这种回调,一般对方的机制是如果你不给回应,或回应失败,隔一段时间对方会再次回调的,隔多少时间,回调多少次,不同第三方机制是不一样的,你做之前要问清楚。
是的,一定要考虑,有的时候第3方自已也搞不清楚为什么会回调多次,我也遇到过,对方的确收到了我返的成功信息,结果还是多调了一次,最后问急了,对方说是为了业务的可靠性,故意多调了一次,你只能无语,一定要把多次回调当成正常用情况来处理。保证你自已的业务逻辑不出问题。
  • 打赏
  • 举报
回复
其实不用管对方调用你几次,你自己要做接口幂等性,之前做支付宝支付也是,对方有时候会调用我接口多次
ying1234 2017-11-13
  • 打赏
  • 举报
回复
象充值这种回调,一般对方的机制是如果你不给回应,或回应失败,隔一段时间对方会再次回调的,隔多少时间,回调多少次,不同第三方机制是不一样的,你做之前要问清楚。
ying1234 2017-11-13
  • 打赏
  • 举报
回复
这种情况,先看看你代码里有没有把result返回给微信,还有的一个问题就是,要搞清楚微信有没有要求回调后,你要在几秒内给回应?有些第三方的接口是有这样要求的,只给你3秒时间,3秒时间不给回应,对方就认为这次通知失败了,会再发起一次通知,不过象你说调了5次,好象不太象是这样的原因,你处理回调,返回结果给微信,再慢也不会慢成这样吧?还是看看你的代码问题。还有,你处理你充值回调逻辑时,一定要考虑这种多次回调的情况,不能一个订单多次回调了,你重复处理(比如说重复加虚拟货币)
raymond_geng 2017-11-05
  • 打赏
  • 举报
回复
关注 我也即将要做微信支付
  • 打赏
  • 举报
回复
你贴的代码,只不过是把一个 xml 字符串写到了(赋值到了) result 变量而已,根本看不出你的服务响应人家微信平台请求时的效率问题。建议你从大局出发去调试,搞懂微信的机制,不要只知道抠这一点点代码。
  • 打赏
  • 举报
回复
确保你的代码在 2、3 秒内一定执行完(response 输出给微信平台)。如果几秒钟不返回,微信是会重复调用几次的!
qq_16965193 2017-10-26
  • 打赏
  • 举报
回复
没人么?!
dengchenlu 2017-10-26
  • 打赏
  • 举报
回复
你可以在return前面输出一个日志看看 result的值,说不定没有进if呢
qq_16965193 2017-10-26
  • 打赏
  • 举报
回复
引用 11 楼 hanjun0612 的回复:
[quote=引用 10 楼 qq_16965193 的回复:] [quote=引用 9 楼 hanjun0612 的回复:] [quote=引用 8 楼 qq_16965193 的回复:] 没有啊 怎么可能会重复提交呢。。。app提交过来的。
我意思是你程序内部,看看可能存在重复提交的问题吗,或者是跳转了某个方法重复调用了等等的问题[/quote] 没有重复的! [/quote] 如果你坚信你的代码没有问题,那就打电话给微信客服问问吧[/quote] 这也可以吗 还能打电话 我试试
正怒月神 版主 2017-10-26
  • 打赏
  • 举报
回复
引用 10 楼 qq_16965193 的回复:
[quote=引用 9 楼 hanjun0612 的回复:] [quote=引用 8 楼 qq_16965193 的回复:] 没有啊 怎么可能会重复提交呢。。。app提交过来的。
我意思是你程序内部,看看可能存在重复提交的问题吗,或者是跳转了某个方法重复调用了等等的问题[/quote] 没有重复的! [/quote] 如果你坚信你的代码没有问题,那就打电话给微信客服问问吧
qq_16965193 2017-10-26
  • 打赏
  • 举报
回复
引用 9 楼 hanjun0612 的回复:
[quote=引用 8 楼 qq_16965193 的回复:] 没有啊 怎么可能会重复提交呢。。。app提交过来的。
我意思是你程序内部,看看可能存在重复提交的问题吗,或者是跳转了某个方法重复调用了等等的问题[/quote] 没有重复的!
正怒月神 版主 2017-10-26
  • 打赏
  • 举报
回复
引用 8 楼 qq_16965193 的回复:
没有啊 怎么可能会重复提交呢。。。app提交过来的。
我意思是你程序内部,看看可能存在重复提交的问题吗,或者是跳转了某个方法重复调用了等等的问题
qq_16965193 2017-10-26
  • 打赏
  • 举报
回复
引用 6 楼 hanjun0612 的回复:
[quote=引用 5 楼 qq_16965193 的回复:] 5 次 我是没有再去等他了。。。不知道多少次 返回和不返回 他就是重复调用我的方法。。。 这搞的我很难受!。。。 你们的方法我都试过 不起作用啊。。。还有没有别的方法!· 在线等啊 急。。。。。
那我觉得,你应该先看看自己的代码,哪里是不是一直有提交之类的问题。 查询一下订单,是不是重复了很多个[/quote] 没有啊 怎么可能会重复提交呢。。。app提交过来的。
加载更多回复(6)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧