目前进行适配支付宝小程序支付时候,通过optional 设置了product_code参数,收银台付款码付款时候,发现也会提交这个参数。
原因:当前 SDK 的 Factory 在进程内只初始化一次,且可选参数会合并到后续请求而不自动清空;Swoole 常驻进程下,小程序请求后的参数会串到后续收银付款码请求。(/vendor/alipaysdk/easysdk/php/src/Kernel/Factory.php:58、/vendor/alipaysdk/easysdk/php/src/Kernel/EasySDKKernel.php:401)
1. Factory::setOptions() 只首次建 kernel、之后不再重建:
public static function setOptions($config) {
if (!(self::$instance instanceof self)) { // ← 只有首次才 new,kernel 只建一次
self::$instance = new self($config);
}
return self::$instance;
}2. optionalBizParams 注入后永不清除(private,只有 injectBizParam 写入,无任何 clear)。
根治方案:支付调用不共用全局 kernel
问题的本质是 Factory::payment() 全局单例 + kernel 可变状态不清除。最干净的根治:每次支付宝调用用独立的 EasySDKKernel + Payment(不走 Factory 全局单例),各调用参数互不污染。这一改同时解决:

