自动售货机支付对接是个坑洼地带,接口文档长、对接环节多、异常场景复杂,今天用大白话把整个链路讲清楚。
背景:自动售货机支付是整个商业闭环的核心。用户投了钱却没拿到货,或者扣了款却出故障,客诉量直接爆表。微信和支付宝都有专门面向物联网设备的支付接口,叫"JSAPI支付"和"协议支付",但文档分散在好几个地方,官方Demo也不够贴近自动售货机的实际场景。我来把整个对接流程梳理一遍。
核心内容:
一、前置准备:资质与签约
自动售货机接入微信和支付宝收款,前提是必须有商户号(企业资质),个人是无法申请的。微信支付要在商户平台开通"Native支付"或"JSAPI支付"场景;支付宝则需要开通"当面付"产品。另外,自动售货机属于特殊行业(无人零售),微信对这类商户的资质审核会稍严,需要提供设备照片和实际场景说明。签约完成之前不要开始技术对接,白做了还得重来。
二、支付流程设计:先冻结后扣款
自动售货机的标准支付流程不是直接扣款,而是"预授权冻结+确认扣款"两阶段。用户选商品、发起支付后,先冻结对应金额;机器检测到出货成功(货道传感器触发)后才真正扣款;如果用户取消或者机器出货失败,立即解冻。这套机制能有效避免资金纠纷,也是微信和支付宝官方推荐的做法。
三、回调通知的处理
支付完成后,微信和支付宝会向你的服务器发一个回调通知(notify_url)。这个接口是整个链路里最容易出问题的地方——必须返回success给平台,否则平台会重复发通知;必须做签名校验,拿到参数后用平台提供的密钥做MD5或RSA验签,防止伪造回调;必须做幂等处理,因为网络原因平台可能发多条相同通知,要用订单号做去重。
回调处理的顺序很重要:第一步验签、第二步查本地订单状态(已处理则直接返回success)、第三步更新订单状态、第四步返回success。有些开发者一上来就更新数据库,结果验签失败时数据已经脏了。
四、异常场景兜底机制
自动售货机实际运营中会遇到的异常场景:用户扫码后断电、机器出货卡货但已扣款、网络延迟导致回调超时。这些场景的兜底方案是"对账"。建议每天凌晨跑一次对账脚本,把平台侧的交易流水和本地订单记录对比,找出金额不一致的订单,主动退款或补发货。微信和支付宝都提供查询订单接口和退款接口,对账逻辑可以完全自动化。
总结:自动售货机支付对接的核心是三件事——签约资质先行、两阶段支付流程设计、回调通知安全处理。前置工作做扎实,后续开发才能顺。异常场景的对账机制是运营保障的最后一道防线,建议在技术方案阶段就定下来,别等上线了再补。