微信服务商收付通PHP对接关键点:二级商户进件需v3接口+平台证书验签;合单支付须显式开启profit_sharing并配置receivers;回调需签名验证+AES解密;对账要核三类流水,退款由平台发起且金额受限。

微信服务商收付通PHP框架对接(进阶)关键点
直接上手PHP对接微信服务商收付通,重点不在“能不能调通”,而在于权限链路清晰、证书签名可靠、分账逻辑可控、回调验签严谨。以下按实际开发中高频卡点展开。
二级商户进件必须走v3接口+平台证书验签
不能用旧版v2接口或手动填表。平台需以自身商户号(mchid)调用 POST /v3/ecommerce/applyments/ 提交子商户资质。
- 请求头必须含
Authorization: WECHATPAY2-SHA256-RSA2048签名,且签名基于平台私钥 + 平台证书序列号 + 时间戳 + 随机串生成 - body 中
business_license_copy是营业执照图片的 base64 编码(不是文件路径),需先上传至微信侧媒体资源接口获取 media_id,再填入 - 返回
applyment_id后,需轮询GET /v3/ecommerce/applyments/{applyment_id}获取审核结果,状态为APPROVED才算成功进件
合单支付与分账冻结必须显式控制
电商场景下多店铺订单合并支付,资金默认进入各子商户账户但处于冻结态——这不是自动行为,而是靠下单时主动开启并配置。
解析微信公众号文章,提取标题、作者、正文、图片等信息。用户发送链接(mp.weixin.qq.com)时触发,自动提取内容并可保存至飞书表格。
- 统一下单接口(
v3/pay/transactions/native或v3/pay/transactions/jsapi)中,profit_sharing必须设为true -
amount下的total是用户实付总金额(单位分),receivers数组中每个元素指定一个子商户号(account)、分账金额(amount)和类型(type=“MERCHANT_ID”) - 若需账期管理(如确认收货后才解冻),不能依赖分账自动解冻,而应使用
v3/ecommerce/fundflows/unfreeze接口主动解冻指定子商户的冻结资金
回调通知必须双重校验:签名 + 平台证书解密
微信支付v3回调返回的是 AES-256-GCM 加密的 JSON,仅验签名不够,必须用平台证书公钥解密后才能读取业务字段。
立即学习“PHP免费学习笔记(深入)”;
- 收到回调后,先解析
WECHATPAY-SIGNATURE头,用平台私钥验证签名有效性 - 再用
wechatpay-serial头匹配本地缓存的平台证书,调用 SDK 的decryptNotification方法解密resource字段 - 解密后检查
event_type是否为TRANSACTION.SUCCESS,再提取out_trade_no和transaction_id做幂等处理 - 务必在响应中返回 HTTP 200,且 body 为空(不能带任何字符,包括空格),否则微信会重复推送
对账与异常资金处理要闭环
平台级结算涉及多级账户,对账不是查一笔单,而是核三类流水:平台主账户、子商户冻结资金、已解冻资金。
- 每日调用
v3/bill/tradebill下载交易账单,注意传参bill_date和tar_type=zip,解压后按sub_mch_id拆分归集 - 发现子商户有未解冻资金但业务已完结,需主动调
v3/ecommerce/fundflows/unfreeze;若解冻失败,需记录日志并人工介入 - 退款必须由平台发起(
v3/refunds/domestic),且sub_mch_id必须与原订单一致,退款金额不能超过该子商户原始分账金额


















