listen(...)、input(...) 和 waitPay(...) 会阻塞当前插件运行,直到收到匹配事件、超时或用户发送退出口令。支付类插件建议把超时、取消和金额不匹配都显式处理。
listen(waitTime, recallTime?, scope?)
等待同一会话、同一账号下的下一条用户输入。超时返回空字符串 ""。
等待时间,单位毫秒。运行时会归一化:默认
60000 ms,最小 1000 ms,最大通常为 900000 ms。收到输入后延迟撤回用户消息的毫秒数。若第二个参数直接传
'group',SDK 会把它识别为 scope,并把 recallTime 置为 0。传
'group' 时,允许同群任意成员回答;不传时只等待当前用户。input(waitTime, recallTime?, scope?)
input(...) 是 listen(...) 的别名,参数和返回值一致。
input(...) 返回文本内容;媒体从 sender.getMediaItems() 读取。
waitPay(exitcode, timeout, amount?)
等待支付事件或退出口令。它会使用当前运行上下文里的 IM、账号、会话和用户来注册支付等待;如果支付配置不可用,会退化为 legacy 等待支付事件。
退出口令。等待期间用户发送完全相同文本时,方法返回该字符串并结束等待。传空字符串时表示不启用用户退出口令。
等待时间,单位毫秒。运行时会按输入等待上限归一化,通常最大
900000 ms。期望收款金额。SDK 会把它作为
expected_amount 发送给运行时;undefined、null 或空字符串不会发送该字段。amount 会改变什么
传入有效 amount 后,运行时会:
- 把金额写入支付等待元数据
ExpectedAmount。 - 在启用支付存储时,把金额写入支付记录的
expected_amount。 - 支付成功返回对象时,追加
expected_amount和amount_matched。 - 对强制支付宝转账链接场景,把转账链接金额设置为该期望金额;未传金额时使用默认
0.01。
amount 不会改变什么
- 超时仍返回字符串
"timeout"。 - 并发冲突仍返回字符串
"busy"。 - 用户发送
exitcode仍返回该退出口令字符串。 - 没有成功支付对象时,不会凭空返回
expected_amount或amount_matched。
返回值
- 超时
- 忙碌
- 退出口令
- 支付成功
收到的付款金额。运行时会兼容补充
Money 字段;如果事件只有 received_amount,会用它补 money / Money。兼容旧插件的大写金额字段,通常与
money 相同。支付事件中的实际收款金额。不是所有通道都会返回该字段。
仅当
amount 归一化后大于 0 时返回。表示本次等待期望收到的金额。实收金额与期望金额是否匹配。运行时按
money 与 expected_amount 比较,误差小于 0.001 视为匹配;缺少任一金额或金额小于等于 0 时为 false。等待支付流程生成或通道返回的订单号。启用支付配置时通常形如
pay_<hex>。支付通道交易号。是否存在取决于通道事件。
安全处理模板
常见问题
传入 amount 后返回体一定会变化吗?
传入 amount 后返回体一定会变化吗?
只有支付成功并返回对象时,才会看到
expected_amount 和 amount_matched。如果返回 "timeout"、"busy" 或退出口令字符串,返回体不变。amount 可以传字符串吗?
amount 可以传字符串吗?
可以。运行时会把数字、数字字符串、带
¥ / ¥ 前缀或逗号分隔的金额归一化为数字。JS helper 只要发现 amount 不是 undefined、null 或空字符串,就会发送 expected_amount;运行时无法解析或解析后小于等于 0 时,不会在成功对象中追加有效 expected_amount。amount 会自动拒绝金额不匹配的支付吗?
amount 会自动拒绝金额不匹配的支付吗?
不要这样假设。它会记录期望金额并在成功返回对象里给出
amount_matched。部分通道或下单方式可能用期望金额辅助匹配,但插件业务仍应在发货前检查 amount_matched。atWaitPay()
判断当前运行时是否存在等待支付流程。
| 方法 | 参数 | 返回 |
|---|---|---|
atWaitPay() | 无 | Promise<boolean> |
下一步
事件和媒体项
查看等待输入后如何读取用户上传文件。
支付插件权限和配置
查看 manifest header 和参数声明。