$rocket]); $params = $rocket->getParams(); $config = get_provider_config('jsb', $params); $payload = $rocket->getPayload(); if (empty($payload) || $payload->isEmpty()) { throw new InvalidParamsException(Exception::PARAMS_NECESSARY_PARAMS_MISSING, '参数异常: 缺少支付必要参数。可能插件用错顺序,应该先使用 `业务插件`'); } $privateCertPath = $config['mch_secret_cert_path'] ?? ''; if (empty($privateCertPath)) { throw new InvalidConfigException(Exception::CONFIG_JSB_INVALID, '配置异常: 缺少配置参数 -- [mch_secret_cert_path]'); } $rocket->mergePayload([ 'signType' => 'RSA', 'sign' => $this->getSignature(get_private_cert($privateCertPath), $payload), ]); Logger::info('[Jsb][AddPayloadSignPlugin] 插件装载完毕', ['rocket' => $rocket]); return $next($rocket); } protected function getSignature(string $pkey, Collection $payload): string { $content = $payload->sortKeys()->toString(); openssl_sign($content, $signature, $pkey); return base64_encode($signature); } }