WhyCan Forum(哇酷开发者社区)

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn

您尚未登录。

#1 2020-09-14 23:24:59

pythinker
会员
注册时间: 2019-02-12
累计积分: 186

微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7

微信的服务器发送数据告诉本机支付成功了:

<xml>
  <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
  <attach><![CDATA[支付测试]]></attach>
  <bank_type><![CDATA[CFT]]></bank_type>
  <fee_type><![CDATA[CNY]]></fee_type>
  <is_subscribe><![CDATA[Y]]></is_subscribe>
  <mch_id><![CDATA[10000100]]></mch_id>
  <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
  <openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>
  <out_trade_no><![CDATA[1409811653]]></out_trade_no>
  <result_code><![CDATA[SUCCESS]]></result_code>
  <return_code><![CDATA[SUCCESS]]></return_code>
  <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
  <time_end><![CDATA[20140903131540]]></time_end>
  <total_fee>1</total_fee>
  <coupon_fee><![CDATA[10]]></coupon_fee>
  <coupon_count><![CDATA[1]]></coupon_count>
  <coupon_type><![CDATA[CASH]]></coupon_type>
  <coupon_id><![CDATA[10000]]></coupon_id>
  <trade_type><![CDATA[JSAPI]]></trade_type>
  <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
</xml>

本机回应以下数据:

<xml>
  <return_code><![CDATA[SUCCESS]]></return_code>
  <return_msg><![CDATA[OK]]></return_msg>
</xml>

如果本机不回, 那么微信服务器会继续再发几次, 但是我感觉这个回应数据什么信息都不用带, 要是有很多订单, 怎么知道是回应哪个订单?

离线

#2 2020-09-14 23:37:58

pythinker
会员
注册时间: 2019-02-12
累计积分: 186

Re: 微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理

我一直纳闷, 为什么不回应 交易流水Id信息?

<xml>
  <return_code><![CDATA[SUCCESS]]></return_code>
  <return_msg><![CDATA[OK]]></return_msg>
  <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
</xml>

离线

#3 2020-09-17 23:38:21

manhere
会员
注册时间: 2019-06-22
累计积分: 13

Re: 微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理

微信服务器端发给notify地址里面包含了 out_trade_no ,这个是你自编的业务订单号,需要你根据result_code,return_code来相应更新你自己数据库里该订单号纪录的状态,并【同步】返回相应结论状态给微信服务器。

离线

#4 2020-09-17 23:45:19

pythinker
会员
注册时间: 2019-02-12
累计积分: 186

Re: 微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理

manhere 说:

微信服务器端发给notify地址里面包含了 out_trade_no ,这个是你自编的业务订单号,需要你根据result_code,return_code来相应更新你自己数据库里该订单号纪录的状态,并【同步】返回相应结论状态给微信服务器。

问题是微信服务器怎么知道我回应的是哪一单呢?

离线

#5 2020-09-17 23:51:19

manhere
会员
注册时间: 2019-06-22
累计积分: 13

Re: 微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理

pythinker 说:
manhere 说:

微信服务器端发给notify地址里面包含了 out_trade_no ,这个是你自编的业务订单号,需要你根据result_code,return_code来相应更新你自己数据库里该订单号纪录的状态,并【同步】返回相应结论状态给微信服务器。

问题是微信服务器怎么知道我回应的是哪一单呢?

它带参(out_trade_no等等)post给你的notify地址,你返回相应的状态回来,必然能知道返回的就是针对这个out_trade_no啊。

离线

#6 2020-09-18 00:01:05

pythinker
会员
注册时间: 2019-02-12
累计积分: 186

Re: 微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理

manhere 说:
pythinker 说:

问题是微信服务器怎么知道我回应的是哪一单呢?

它带参(out_trade_no等等)post给你的notify地址,你返回相应的状态回来,必然能知道返回的就是针对这个out_trade_no啊。

感谢回复, 可是http/https是无状态协议, 如果回复的消息内容不携带out_trade_no, 微信服务器根本不知道回复的是哪条消息?

离线

#7 2020-09-18 00:39:03

manhere
会员
注册时间: 2019-06-22
累计积分: 13

Re: 微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理

pythinker 说:
manhere 说:

它带参(out_trade_no等等)post给你的notify地址,你返回相应的状态回来,必然能知道返回的就是针对这个out_trade_no啊。

感谢回复, 可是http/https是无状态协议, 如果回复的消息内容不携带out_trade_no, 微信服务器根本不知道回复的是哪条消息?

HTTP的无状态应该是指对于交互场景或者说你的具体业务上下文没有记忆能力(这也是为什么要依赖Cookie、Session等机制标识用户),但每一个单次请求是有明确的发起方响应方的。

离线

#8 2020-09-18 08:06:18

armstrong
会员
注册时间: 2019-04-10
累计积分: 123

Re: 微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理

楼主理解错误吧。
两个http请求之间是没有记忆的;但是同一个http请求和应答是成对的。也就是http总是一个request对应一个response,而且是在同一个TCP连接里。

离线

#9 2020-09-18 08:30:05

pythinker
会员
注册时间: 2019-02-12
累计积分: 186

Re: 微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理

armstrong 说:

楼主理解错误吧。
两个http请求之间是没有记忆的;但是同一个http请求和应答是成对的。也就是http总是一个request对应一个response,而且是在同一个TCP连接里。

大佬早上好,感谢提醒,晚点我用抓包工具确定一下是不是在同一TCP连接里面。

离线

#10 2020-09-19 16:47:44

smartcar
会员
注册时间: 2018-02-19
累计积分: 684

Re: 微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理

armstrong 说:

楼主理解错误吧。
两个http请求之间是没有记忆的;但是同一个http请求和应答是成对的。也就是http总是一个request对应一个response,而且是在同一个TCP连接里。

赞成,就是同一个TCP连接(该连接并没有断开),所以服务器知道订单号。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB