电话
400 9058 355
企业付款到零钱无异步回调,必须调用gettransferinfo接口主动查询结果;配置notify_url无效,需用相同证书发起带签名的HTTPS GET请求轮询partner_trade_no。
微信企业付款(paymch)的「企业付款到零钱」功能,根本不提供异步回调通知。这是最常被误解的一点——很多开发者按公众号支付或JSAPI支付的经验,去配置 notify_url,结果死活收不到请求,日志里也查不到任何访问记录。
微信官方文档明确说明:企业付款到零钱 的结果必须通过主动调用 gettransferinfo 接口查询,而不是依赖回调。所谓“回调”是误传,或是把其他支付场景(如服务商模式下的某些子商户付款)混淆了。
notify_url 在企业付款接口中完全不生效,微信服务器不会发起任何 POST 请求gettransferinfo 查询必须在调用 transfers 发起付款后,用返回的 partner_trade_no 主动轮询查询结果。这是唯一可靠方式。
注意:gettransferinfo 是 HTTPS GET 请求,需带签名,且必须使用与付款相同的证书(apiclient_cert.pem 和 apiclient_key.pem)。
https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo?partner_trade_no=xxx&nonce_str=xxx&sign=xxx
sign 必须按微信签名规则生成(参数排序 + 拼接 + MD5 + 转大写),不能漏掉 appid 和 mch_id
simplexml_load_string() 解析,重点看 status(Success/Failed)、reason(失败原因)、payment_time(成功时间)$xml = <<XML; SUCCESS OK SUCCESS 1234567890 Success 2025-01-01 12:00:00
极少数情况下,开发者声称收到了企业付款的“回调”,通常有以下几种真实原因:
spbill_create_ip 或 sub_mch_id 场景),而服务商后台配置了代付结果通知,但这不是微信官方接口行为,而是服务商自行实现的 HTTP 推送gettransferinfo 后自动触发你写的 onTransferComplete 回调函数)jsapi 支付的 notify_url 配置混在一起,导致支付成功的回调被当成付款回调处理别每次手写签名和 cURL。直接封装成函数,重点处理证书路径、超时、错误码和重试逻辑。
file_get_contents('apiclient_cert.pem') 在 CLI 下容易失败,推荐 curl_setopt($ch, CURLOPT_SSLCERT, '/full/path/to/apiclient_cert.pem')
CURLOPT_SSLKEY、CURLOPT_SSLCERTTYPE(PEM)、CURLOPT_TIMEOUT(建议 ≤10s)500,需检查 curl_errno() 和 curl_error(),不要只判 return_code
status=Pending 的情况,必须继续轮询;status=Failed 时,reason 字段才真正有用,比如“余额不足”“用户已注销”真正的难点不在“怎么写回调”,而在“怎么设计轮询状态机”——尤其是并发付款、失败重试、幂等更新数据库这几块,稍不注意就会出现重复入账或状态丢失。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...