Pay Session 无法触发 payment card 信息收集
结论
"capture" => "payment-card-number" 确实用于触发银行卡号收集,上述 PHP 调用方式也没有问题。如果更新 Pay Session 时没有报错,但通话中毫无反应,callback URL 也一直没有收到请求,那么问题出在 Twilio 服务端,并非 Pay Session 的创建或更新逻辑。
这个问题需要 Twilio Support 从平台侧处理,仅调整这两段 PHP 代码无法解决。
正常流程
先为正在进行的通话创建 Pay Session:
$sid = getenv("TWILIO_ACCOUNT_SID");
$token = getenv("TWILIO_AUTH_TOKEN");
$twilio = new Client($sid, $token);
$payment = $twilio
->calls("MyCallSid")
->payments
->create(
"abcde",
"https://www.mycallbackurl.com"
);
然后使用创建操作返回的 Pay Session SID 更新该资源,并指定需要收集的字段:
$twilio
->calls("MyCallSid")
->payments("MyPaySessionId")
->update(
"asdfqwer",
"https://www.mycallbackurl.com",
[
"capture" => "payment-card-number",
]
);
如果账户能力、支付连接器配置和通话状态都符合要求,这次更新应当启动 payment-card-number 收集流程。实际播放的提示语和交互方式可能受 Pay Session 配置、支付连接器及 Twilio 平台行为影响,不能只根据某段固定的“通用提示语”是否播放来判断调用是否成功。
排查步骤
如果更新请求成功,但通话没有任何反应,可以依次检查:
MyCallSid对应的通话是否仍处于可交互状态。MyPaySessionId是否为当前通话下创建的 Pay Session SID,而非其他资源 ID。- 创建和更新请求是否使用了同一个 Twilio Account 或 Subaccount。
- Pay Connector 是否配置正确,传入的标识符是否与账户配置一致。
- callback URL 能否通过公网 HTTPS 访问,是否受到鉴权、WAF 或网络规则的拦截。
- 服务端日志是否保留了 Twilio 请求 SID、Call SID、Pay Session SID、请求时间及 API 响应内容。
- Twilio Console 中是否有对应请求和通话的调试日志。
如果 API 没有报错,Pay Session 也可以正常创建和取消,但 capture 更新既未触发通话交互,也没有产生 callback,请将相关 SID、时间戳和最小复现代码提交给 Twilio Support。这种情况可能是平台故障,本案例最终也由 Twilio 确认为服务端问题。
注意事项
callback URL 没有收到请求,并不一定说明 PHP SDK 未发出更新请求。回调通常要等后续收集流程产生事件后才会触发。如果该流程根本没有在 Twilio 侧启动,也就不会产生回调。
不要在应用日志中记录完整卡号、有效期、CVV、DTMF 输入或其他敏感支付数据。排查时只保留资源 SID、请求时间、状态码和脱敏后的响应信息,并遵守适用的 PCI DSS 要求。
备注:内容仅供参考。
