LivePersonInc /
LiveEngageLaravel
| 1 | <?php |
||
| 2 | /** |
||
| 3 | * LiveEngageRequest class. |
||
| 4 | */ |
||
| 5 | |||
| 6 | namespace LivePersonInc\LiveEngageLaravel; |
||
| 7 | |||
| 8 | use LivePersonInc\LiveEngageLaravel\Facades\LiveEngageLaravel as LiveEngage; |
||
| 9 | use GuzzleHttp\Client; |
||
| 10 | use GuzzleHttp\HandlerStack; |
||
| 11 | use GuzzleHttp\Subscriber\Oauth\Oauth1; |
||
| 12 | use LivePersonInc\LiveEngageLaravel\Models\Payload; |
||
| 13 | use LivePersonInc\LiveEngageLaravel\Exceptions\LiveEngageException; |
||
| 14 | use LivePersonInc\LiveEngageLaravel\Exceptions\LoginFailure; |
||
| 15 | |||
| 16 | /** |
||
| 17 | * LiveEngageRequest class. |
||
| 18 | */ |
||
| 19 | class LiveEngageRequest |
||
| 20 | { |
||
| 21 | /** |
||
| 22 | * config |
||
| 23 | * |
||
| 24 | * @var mixed |
||
| 25 | * @access private |
||
| 26 | */ |
||
| 27 | private $config; |
||
| 28 | |||
| 29 | /** |
||
| 30 | * retry_limit |
||
| 31 | * |
||
| 32 | * (default value: 3) |
||
| 33 | * |
||
| 34 | * @var int |
||
| 35 | * @access private |
||
| 36 | */ |
||
| 37 | private $retry_limit = 3; |
||
|
0 ignored issues
–
show
introduced
by
Loading history...
|
|||
| 38 | /** |
||
| 39 | * retry_counter |
||
| 40 | * |
||
| 41 | * (default value: 0) |
||
| 42 | * |
||
| 43 | * @var int |
||
| 44 | * @access private |
||
| 45 | */ |
||
| 46 | private $retry_counter = 0; |
||
|
0 ignored issues
–
show
|
|||
| 47 | /** |
||
| 48 | * bearer |
||
| 49 | * |
||
| 50 | * @var mixed |
||
| 51 | * @access private |
||
| 52 | */ |
||
| 53 | private $bearer; |
||
| 54 | |||
| 55 | /** |
||
| 56 | * __construct function. |
||
| 57 | * |
||
| 58 | * @access public |
||
| 59 | * @param mixed $config |
||
| 60 | * @return void |
||
| 61 | */ |
||
| 62 | public function __construct($config) |
||
| 63 | { |
||
| 64 | $this->config = $config; // @codeCoverageIgnore |
||
| 65 | } |
||
| 66 | |||
| 67 | /** |
||
| 68 | * login function. |
||
| 69 | * |
||
| 70 | * @access public |
||
| 71 | * @param string $user (default: null) |
||
| 72 | * @param string $pass (default: null) |
||
| 73 | * @return object |
||
| 74 | */ |
||
| 75 | 1 | public function login($user = false, $pass = false) |
|
| 76 | { |
||
| 77 | /** @scrutinizer ignore-call */ |
||
| 78 | 1 | $le = LiveEngage::domain('agentVep'); |
|
| 79 | 1 | $domain = $le->domain; |
|
| 80 | 1 | $account = $le->account; |
|
| 81 | |||
| 82 | 1 | $consumer_key = config("{$this->config}.key"); |
|
| 83 | 1 | $consumer_secret = config("{$this->config}.secret"); |
|
| 84 | 1 | $token = config("{$this->config}.token"); |
|
| 85 | 1 | $secret = config("{$this->config}.token_secret"); |
|
| 86 | 1 | $username = config("{$this->config}.user_name"); |
|
| 87 | |||
| 88 | 1 | if ($user && $pass) { |
|
| 89 | $auth = [ |
||
| 90 | 'username' => $user, |
||
| 91 | 'password' => $pass |
||
| 92 | ]; |
||
| 93 | } else { |
||
| 94 | $auth = [ |
||
| 95 | 1 | 'username' => $username, |
|
| 96 | 1 | 'appKey' => $consumer_key, |
|
| 97 | 1 | 'secret' => $consumer_secret, |
|
| 98 | 1 | 'accessToken' => $token, |
|
| 99 | 1 | 'accessTokenSecret' => $secret, |
|
| 100 | ]; |
||
| 101 | } |
||
| 102 | |||
| 103 | 1 | $url = "https://{$domain}/api/account/{$account}/login?v=1.3"; |
|
| 104 | |||
| 105 | try { |
||
| 106 | 1 | $response = $this->V1($url, 'POST', $auth, true); |
|
| 107 | } catch (\GuzzleHttp\Exception\ServerException $e) { |
||
| 108 | throw $e; //new LoginFailure(); |
||
| 109 | } |
||
| 110 | |||
| 111 | 1 | $this->bearer = $response->bearer; |
|
| 112 | |||
| 113 | 1 | return $this; |
|
| 114 | } |
||
| 115 | |||
| 116 | /** |
||
| 117 | * V1 |
||
| 118 | * |
||
| 119 | * @access public |
||
| 120 | * @param string $url |
||
| 121 | * @param string $method |
||
| 122 | * @param array $payload (default: []) |
||
| 123 | * @param bool $noauth (default: false) |
||
| 124 | * @return mixed |
||
| 125 | */ |
||
| 126 | 1 | public function V1($url, $method, $payload = null, $noauth = false) |
|
| 127 | { |
||
| 128 | 1 | $client = $this->requestClient($noauth); |
|
| 129 | |||
| 130 | $args = [ |
||
| 131 | 1 | 'auth' => 'oauth', |
|
| 132 | 'headers' => [ |
||
| 133 | 'content-type' => 'application/json', |
||
| 134 | 'accept' => 'application/json' |
||
| 135 | ], |
||
| 136 | 1 | 'body' => json_encode($payload ?: []) |
|
| 137 | ]; |
||
| 138 | |||
| 139 | 1 | if ($noauth) unset($args['auth']); |
|
| 140 | |||
| 141 | // @codeCoverageIgnoreStart |
||
| 142 | try { |
||
| 143 | $res = $client->request($method, $url, $args); |
||
| 144 | $response = json_decode($res->getBody()); |
||
| 145 | } catch (\GuzzleHttp\Exception\ServerException $e) { |
||
| 146 | throw $e; |
||
| 147 | } catch (\GuzzleHttp\Exception\ClientException $e) { |
||
| 148 | $code = $e->getResponse()->getStatusCode(); |
||
| 149 | if ($code == 401) { |
||
| 150 | throw new LoginFailure(); |
||
| 151 | } else { |
||
| 152 | throw $e; |
||
| 153 | } |
||
| 154 | } catch (\Exception $e) { |
||
| 155 | throw $e; |
||
| 156 | } |
||
| 157 | // @codeCoverageIgnoreEnd |
||
| 158 | |||
| 159 | 1 | return $response; |
|
| 160 | } |
||
| 161 | |||
| 162 | /** |
||
| 163 | * V2 |
||
| 164 | * |
||
| 165 | * @access public |
||
| 166 | * @param mixed $url |
||
| 167 | * @param mixed $method |
||
| 168 | * @param mixed $payload (default: []) |
||
| 169 | * @param mixed $headers (default: []) |
||
| 170 | * @return mixed |
||
| 171 | */ |
||
| 172 | 1 | public function V2($url, $method, $payload = null, $headers = null) |
|
| 173 | { |
||
| 174 | 1 | if (!$this->bearer) $this->login(); |
|
| 175 | |||
| 176 | 1 | $client = new Client(); |
|
| 177 | $args = [ |
||
| 178 | 1 | 'headers' => array_merge([ |
|
| 179 | 1 | 'content-type' => 'application/json', |
|
| 180 | 1 | 'accept' => 'application/json', |
|
| 181 | 1 | 'Authorization' => 'Bearer ' . $this->bearer |
|
| 182 | 1 | ], $headers ?: []), |
|
| 183 | 1 | 'body' => json_encode($payload ?: []) |
|
| 184 | ]; |
||
| 185 | |||
| 186 | // @codeCoverageIgnoreStart |
||
| 187 | try { |
||
| 188 | $res = $client->request($method, $url, $args); |
||
| 189 | } catch (\Exception $e) { |
||
| 190 | throw $e; |
||
| 191 | } |
||
| 192 | // @codeCoverageIgnoreEnd |
||
| 193 | |||
| 194 | 1 | return json_decode($res->getBody()); |
|
| 195 | } |
||
| 196 | |||
| 197 | /** |
||
| 198 | * requestClient |
||
| 199 | * |
||
| 200 | * @access private |
||
| 201 | * @return \GuzzleHttp\Client |
||
| 202 | * @param bool $noauth (default: false) |
||
| 203 | */ |
||
| 204 | 1 | private function requestClient($noauth = false) |
|
| 205 | { |
||
| 206 | 1 | if ($noauth) { |
|
| 207 | return new Client(); |
||
| 208 | } |
||
| 209 | |||
| 210 | 1 | $consumer_key = config("{$this->config}.key"); |
|
| 211 | 1 | $consumer_secret = config("{$this->config}.secret"); |
|
| 212 | 1 | $token = config("{$this->config}.token"); |
|
| 213 | 1 | $secret = config("{$this->config}.token_secret"); |
|
| 214 | |||
| 215 | 1 | $stack = HandlerStack::create(); |
|
| 216 | 1 | $auth = new Oauth1([ |
|
| 217 | 1 | 'consumer_key' => $consumer_key, |
|
| 218 | 1 | 'consumer_secret' => $consumer_secret, |
|
| 219 | 1 | 'token' => $token, |
|
| 220 | 1 | 'token_secret' => $secret, |
|
| 221 | 1 | 'signature_method'=> Oauth1::SIGNATURE_METHOD_HMAC, |
|
| 222 | ]); |
||
| 223 | 1 | $stack->push($auth); |
|
| 224 | |||
| 225 | 1 | $client = new Client([ |
|
| 226 | 1 | 'handler' => $stack, |
|
| 227 | ]); |
||
| 228 | |||
| 229 | 1 | return $client; |
|
| 230 | } |
||
| 231 | } |