diff --git a/includes/class-integration.php b/includes/class-integration.php index a31ce80725c5aa7e93866a1386bb9e85df3be486..22c4c95d0aefa33bde034868b8601aaa8e84e0d9 100644 --- a/includes/class-integration.php +++ b/includes/class-integration.php @@ -42,10 +42,10 @@ abstract class Integration extends Singleton } if ($proto === 'rpc') { - $data = $this->rpc_payload($payload); - } else { - $data = $payload; - } + $data = $this->rpc_payload($url, $payload); + } else { + $data = $payload; + } if (empty($uploads)) { $response = Wpct_Http_Client::post($url, $data); } else { @@ -182,20 +182,47 @@ abstract class Integration extends Singleton return $setting; } - private function rpc_payload($payload) + private function rpc_payload($url, $payload) { + $session_id = time(); $setting = Settings::get_setting('wpct-erp-forms', 'rpc-api'); + $res = Wpct_Http_Client::post($url, [ + 'jsonrpc' => '2.0', + 'method' => 'call', + 'id' => $session_id, + 'params' => [ + 'service' => 'common', + 'method' => 'login', + 'args' => [ + $setting['database'], + $setting['user'], + $setting['password'] + ] + ] + ]); + + if (!$res) { + throw new Exception('Error while establish RPC session'); + } + + $login = (array) json_decode($res['body'], true); + $user_id = $login['result']; + + if (isset($payload['submission_id'])) { + unset($payload['submission_id']); + } + return [ 'jsonrpc' => '2.0', 'method' => 'call', - 'id' => time(), + 'id' => $session_id, 'params' => [ 'service' => 'object', 'method' => 'execute', 'args' => [ $setting['database'], - $setting['user'], + $user_id, $setting['password'], $setting['model'], 'create',