Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 277
0.00% covered (danger)
0.00%
0 / 16
CRAP
0.00% covered (danger)
0.00%
0 / 1
InstancyService
0.00% covered (danger)
0.00%
0 / 277
0.00% covered (danger)
0.00%
0 / 16
6006
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 createUser
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 1
156
 updateUser
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
182
 userFieldData
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
2
 paymentTypes
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
2
 updateMemebrship
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
90
 renewMemebrship
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
90
 membershipDetails
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
2
 userMembershipDetails
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
2
 GenerateSessionID
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
6
 authenticateUser
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
42
 createInstancyUserViaHttp
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
2
 validateUser
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 1
110
 createUserInstancy
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
42
 callInstacncyApi
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 1
12
 makeUrl
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Http\Services;
4
5use Illuminate\Http\Request;
6use App\Http\Models\Auth\User;
7use Illuminate\Support\Facades\Http;
8
9class InstancyService
10{
11    private $astr_key;
12
13    private $parameters;
14
15    private $url;
16
17    private $action;
18
19    private $site_group_id;
20
21    private $isProd;
22
23    public function __construct()
24    {
25        $this->astr_key = env('ASTRKEY');
26        $this->url = env('INSTANCYURL');
27        $this->site_group_id = env('SITE_GROUP_ID');
28        $this->parameters = [];
29        $this->action = '';
30        $this->isProd = env('APP_ENV') === 'production';
31    }
32
33    /**
34     * Function to create a instancy user
35     */
36    public function createUser(object $request)
37    {
38        $this->action = 'CreateUser';
39        $parametersArray = [
40            'Request' => [
41                '@SiteID' => '388',
42                'UserDetails' => [
43                    '#GroupID' => $this->site_group_id,
44                    '#First_Name' => (isset($request->First_Name)) ? $request->First_Name : '',
45                    '#Gender' => (isset($request->Gender)) ? $request->Gender : '',
46                    '#Last_Name' => (isset($request->Last_Name)) ? $request->Last_Name : '',
47                    '#User_name' => (isset($request->User_name)) ? $request->User_name : '',
48                    '#Email' => (isset($request->Email)) ? $request->Email : '',
49                    '#Password' => (isset($request->Password)) ? $request->Password : '',
50                    '#Mobile_Number' => (isset($request->Mobile_Number)) ? $request->Mobile_Number : '',
51                    '#Job_title' => (isset($request->Job_title)) ? $request->Job_title : '',
52                    '#Company_Name' => (isset($request->Company_Name)) ? $request->Company_Name : '',
53                    '#MembershipDurationID' => (isset($request->MembershipDurationID)) ? $request->MembershipDurationID : 30,
54                    '#PaymentType' => (isset($request->PaymentType)) ? $request->PaymentType : '',
55                ],
56            ],
57        ];
58
59        $xml = new ArrayToXML();
60        $this->parameters = $xml->buildXML($parametersArray);
61
62        return $this->callInstacncyApi();
63    }
64
65    /**
66     * Function to update a instancy user
67     */
68    public function updateUser(Request $request)
69    {
70        $this->action = 'UpdateUser';
71        $parametersArray = [
72            'Request' => [
73                '@SiteID' => $this->site_group_id,
74                'UserDetails' => [
75                    '#UserID' => $request->UserID, // 3043 for manojpatel
76                    '#GroupID' => $this->site_group_id,
77                    '#First_Name' => (isset($request->First_Name)) ? $request->First_Name : '',
78                    '#Gender' => (isset($request->Gender)) ? $request->Gender : '',
79                    '#Last_Name' => (isset($request->Last_Name)) ? $request->Last_Name : '',
80                    '#User_name' => (isset($request->User_name)) ? $request->User_name : '',
81                    '#Email' => (isset($request->Email)) ? $request->Email : '',
82                    '#Password' => (isset($request->Password)) ? $request->Password : '',
83                    '#Mobile_Number' => (isset($request->Mobile_Number)) ? $request->Mobile_Number : '',
84                    '#Job_title' => (isset($request->Job_title)) ? $request->Job_title : '',
85                    '#Company_Name' => (isset($request->Company_Name)) ? $request->Company_Name : '',
86                    '#MembershipDurationID' => (isset($request->MembershipDurationID)) ? $request->MembershipDurationID : 30,
87                    '#PaymentType' => (isset($request->PaymentType)) ? $request->PaymentType : '',
88                    '#Status' => (isset($request->Status)) ? $request->Status : '',
89                ],
90            ],
91        ];
92
93        $xml = new ArrayToXML();
94        $this->parameters = $xml->buildXML($parametersArray);
95
96        return $this->callInstacncyApi();
97    }
98
99    /**
100     * function to get the user fields details
101     */
102    public function userFieldData(Request $request)
103    {
104        $this->action = 'UserFieldsData';
105        $parametersArray = [
106            'Request' => [
107                '@SiteID' => $this->site_group_id,
108
109            ],
110            'UserFieldsData' => [],
111        ];
112
113        $xml = new ArrayToXML();
114        $this->parameters = $xml->buildXML($parametersArray);
115
116        return $this->callInstacncyApi();
117    }
118
119    /**
120     * function to get the payment types
121     */
122    public function paymentTypes(Request $request)
123    {
124        $this->action = 'PaymentTypes';
125        $parametersArray = [
126            'Request' => [
127                '@SiteID' => $this->site_group_id,
128            ],
129            'PaymentTypes' => [],
130        ];
131
132        $xml = new ArrayToXML();
133        $this->parameters = $xml->buildXML($parametersArray);
134
135        return $this->callInstacncyApi();
136    }
137
138    /**
139     * Function to update a instancy user
140     */
141    public function updateMemebrship(Request $request)
142    {
143        $this->action = 'UpdateMemebrship';
144        $parametersArray = [
145            'Request' => [
146                '@SiteID' => $this->site_group_id,
147                'UpdateMemebrship' => [
148                    '#MembershipID' => $request->MembershipID, // 3043 for manojpatel
149                    '#DurationName' => $request->DurationName,
150                    '#UserID' => (isset($request->UserID)) ? $request->UserID : '',
151                    '#ExpiryDate' => (isset($request->ExpiryDate)) ? $request->ExpiryDate : '',
152                    '#MembershipDurationID' => (isset($request->MembershipDurationID)) ? $request->MembershipDurationID : '',
153                    '#RecurringProfileID' => (isset($request->RecurringProfileID)) ? $request->RecurringProfileID : '',
154                    '#Paymentmode' => (isset($request->Paymentmode)) ? $request->Paymentmode : '',
155                    '#Notes' => (isset($request->Notes)) ? $request->Notes : '',
156                    '#StartDate' => (isset($request->StartDate)) ? $request->StartDate : '',
157                    '#Amount' => (isset($request->Amount)) ? $request->Amount : '',
158                ],
159            ],
160        ];
161
162        $xml = new ArrayToXML();
163        $this->parameters = $xml->buildXML($parametersArray);
164
165        return $this->callInstacncyApi();
166    }
167
168    /**
169     * Function to renew a instancy membership for the user
170     */
171    public function renewMemebrship(Request $request)
172    {
173        $this->action = 'RenewMemebrship';
174        $parametersArray = [
175            'Request' => [
176                '@SiteID' => $this->site_group_id,
177                'RenewMemebrship' => [
178                    '#MembershipID' => $request->MembershipID, // 3043 for manojpatel
179                    '#DurationName' => $request->DurationName,
180                    '#UserID' => (isset($request->UserID)) ? $request->UserID : '',
181                    '#ExpiryDate' => (isset($request->ExpiryDate)) ? $request->ExpiryDate : '',
182                    '#MembershipDurationID' => (isset($request->MembershipDurationID)) ? $request->MembershipDurationID : '',
183                    '#RecurringProfileID' => (isset($request->RecurringProfileID)) ? $request->RecurringProfileID : '',
184                    '#Paymentmode' => (isset($request->Paymentmode)) ? $request->Paymentmode : '',
185                    '#Notes' => (isset($request->Notes)) ? $request->Notes : '',
186                    '#StartDate' => (isset($request->StartDate)) ? $request->StartDate : '',
187                    '#Amount' => (isset($request->Amount)) ? $request->Amount : '',
188                ],
189            ],
190        ];
191
192        $xml = new ArrayToXML();
193        $this->parameters = $xml->buildXML($parametersArray);
194
195        return $this->callInstacncyApi();
196    }
197
198    /**
199     * function to get the membership details
200     */
201    public function membershipDetails(Request $request)
202    {
203        $this->action = 'MembershipDetails';
204        $parametersArray = [
205            'Request' => [
206                '@SiteID' => $this->site_group_id,
207            ],
208            'MembershipDetails' => [],
209        ];
210
211        $xml = new ArrayToXML();
212        $this->parameters = $xml->buildXML($parametersArray);
213
214        return $this->callInstacncyApi();
215    }
216
217    /**
218     * function to get the user membership details
219     */
220    public function userMembershipDetails(Request $request)
221    {
222        $this->action = 'UserMembershipDetails';
223        $parametersArray = [
224            'Request' => [
225                '@SiteID' => $this->site_group_id,
226            ],
227            'UserMembershipDetails' => [
228                'UserID' => $request->UserID,
229            ],
230        ];
231
232        $xml = new ArrayToXML();
233        $this->parameters = $xml->buildXML($parametersArray);
234
235        return $this->callInstacncyApi();
236    }
237
238    public function GenerateSessionID($email)
239    {
240        $astrKey = $this->isProd ? 'B6F95CD1-600A-421F-9528-39DF7130ABE0' : '7CD8EDD1-3495-4232-9C63-0238B0FA0C8C';
241        
242        $curl = curl_init();
243        curl_setopt_array($curl, [
244            CURLOPT_URL => 'https://ondemand-master-admin.vengreso.com/instancyservice.asmx/AuthenticateUser',
245            CURLOPT_RETURNTRANSFER => true,
246            CURLOPT_ENCODING => '',
247            CURLOPT_MAXREDIRS => 10,
248            CURLOPT_TIMEOUT => 0,
249            CURLOPT_FOLLOWLOCATION => true,
250            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
251            CURLOPT_CUSTOMREQUEST => 'POST',
252            CURLOPT_POSTFIELDS => 'astrKey='.$astrKey.'&astrXML=%3C%3Fxml%20version%3D\'1.0\'%20encoding%3D\'iso-8859-1\'%3F%3E%3CInstancyWrapper%3E%3CRequest%20SiteID%3D\'374\'%3E%3CUserDetails%3E%20%3CUserID%3E%3C!%5BCDATA%5B-1%5D%5D%3E%3C%2FUserID%3E%3CEmail%3E%3C!%5BCDATA%5B'.$email.'%5D%5D%3E%3C%2FEmail%3E%3CPassword%3E%3C!%5BCDATA%5B17%245I%24jaFq%40%5D%5D%3E%3C%2FPassword%3E%3C%2FUserDetails%3E%3C%2FRequest%3E%3C%2FInstancyWrapper%3E', CURLOPT_HTTPHEADER => [
253                'Content-Type: application/x-www-form-urlencoded',
254                'Cookie: ASP.NET_SessionId=fuhbkztcn41q4vteeipt5jmr',
255            ],
256        ]);
257        $response = curl_exec($curl);
258        curl_close($curl);
259
260        return $response;
261    }
262
263    /**
264     * Function to renew a instancy membership for the user
265     */
266    public function authenticateUser(Request $request)
267    {
268        $email = urlencode($request['Email']);
269        $response = $this->GenerateSessionID($email);
270
271        if (str_contains($response, 'Invalid User ID') || str_contains($response, 'Invalid Client ID') || str_contains($response, 'There is no row')
272        || str_contains($response, 'Error')
273        ) {
274            $user = User::where('email', $request['Email'])->first();
275            $First_Name = $user['first_name'];
276            $Last_Name = $user['last_name'];
277
278            $curl = curl_init();
279            curl_setopt_array($curl, [
280                CURLOPT_URL => 'https://ondemand-admin.vengreso.com/InstancyService.asmx/CreateUser',
281                CURLOPT_RETURNTRANSFER => true,
282                CURLOPT_ENCODING => '',
283                CURLOPT_MAXREDIRS => 10,
284                CURLOPT_TIMEOUT => 0,
285                CURLOPT_FOLLOWLOCATION => true,
286                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
287                CURLOPT_CUSTOMREQUEST => 'POST',
288                CURLOPT_POSTFIELDS => 'astrKey=22A9838A-2196-47ED-8126-4321B7A07EF1&astrXML=%3C%3Fxml%20version%3D\'1.0\'%20encoding%3D\'iso-8859-1\'%3F%3E%3CInstancyWrapper%3E%3CRequest%20SiteID%3D\'388\'%3E%3CUserDetails%3E%3CGroupID%3E%3C!%5BCDATA%5B388%5D%5D%3E%3C%2FGroupID%3E%3CFirst_Name%3E%3C!%5BCDATA%5B'.$First_Name.'%5D%5D%3E%3C%2FFirst_Name%3E%3CGender%3E%3C!%5BCDATA%5B1%5D%5D%3E%3C%2FGender%3E%3CLast_Name%3E%3C!%5BCDATA%5B'.$Last_Name.'%5D%5D%3E%3C%2FLast_Name%3E%3CUser_name%3E%3C!%5BCDATA%5B'.$email.'%5D%5D%3E%3C%2FUser_name%3E%3CEmail%3E%3C!%5BCDATA%5B'.$email.'%5D%5D%3E%3C%2FEmail%3E%3CPassword%3E%3C!%5BCDATA%5B17$5I$jaFq@%5D%5D%3E%3C%2FPassword%3E%3CMobile_Number%3E%3C!%5BCDATA%5B12344433%5D%5D%3E%3C%2FMobile_Number%3E%3CJob_title%3EManager%3C%2FJob_title%3E%3CCompany_Name%3Eve%3C%2FCompany_Name%3E%3CMembershipDurationID%3E%3C!%5BCDATA%5B30%5D%5D%3E%3C%2FMembershipDurationID%3E%3CPaymentType%3E%3C!%5BCDATA%5BCredit%20Card%5D%5D%3E%3C%2FPaymentType%3E%20%0A%3C%2FUserDetails%3E%3C%2FRequest%3E%3C%2FInstancyWrapper%3E',
289                CURLOPT_HTTPHEADER => [
290                    'Content-Type: application/x-www-form-urlencoded',
291                    'Cookie: ASP.NET_SessionId=z1kdzfdinrjc01n3poj2ast3',
292                ],
293            ]);
294
295            $responseCreate = curl_exec($curl);
296            curl_close($curl);
297
298            if (str_contains($responseCreate, 'Success')) {
299                $response = $this->GenerateSessionID($email);
300                return $response;
301            }
302            return $responseCreate;
303        } else {
304            return $response;
305        }
306    }
307
308    /**
309     * Create Instancy User
310     *
311     *
312     * @return mixed
313     */
314    public function createInstancyUserViaHttp(string $email)
315    {
316        $user = User::where('email', $email)->first();
317        $First_Name = $user['first_name'];
318        $Last_Name = $user['last_name'];
319
320        $curl = curl_init();
321
322        curl_setopt_array($curl, [
323            CURLOPT_URL => 'https://ondemand-admin.vengreso.com/InstancyService.asmx/CreateUser',
324            CURLOPT_RETURNTRANSFER => true,
325            CURLOPT_ENCODING => '',
326            CURLOPT_MAXREDIRS => 10,
327            CURLOPT_TIMEOUT => 0,
328            CURLOPT_FOLLOWLOCATION => true,
329            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
330            CURLOPT_CUSTOMREQUEST => 'POST',
331            CURLOPT_POSTFIELDS => 'astrKey=22A9838A-2196-47ED-8126-4321B7A07EF1&astrXML=%3C%3Fxml%20version%3D\'1.0\'%20encoding%3D\'iso-8859-1\'%3F%3E%3CInstancyWrapper%3E%3CRequest%20SiteID%3D\'388\'%3E%3CUserDetails%3E%3CGroupID%3E%3C!%5BCDATA%5B388%5D%5D%3E%3C%2FGroupID%3E%3CFirst_Name%3E%3C!%5BCDATA%5B'.$First_Name.'%5D%5D%3E%3C%2FFirst_Name%3E%3CGender%3E%3C!%5BCDATA%5B1%5D%5D%3E%3C%2FGender%3E%3CLast_Name%3E%3C!%5BCDATA%5B'.$Last_Name.'%5D%5D%3E%3C%2FLast_Name%3E%3CUser_name%3E%3C!%5BCDATA%5B'.$email.'%5D%5D%3E%3C%2FUser_name%3E%3CEmail%3E%3C!%5BCDATA%5B'.$email.'%5D%5D%3E%3C%2FEmail%3E%3CPassword%3E%3C!%5BCDATA%5B17$5I$jaFq@%5D%5D%3E%3C%2FPassword%3E%3CMobile_Number%3E%3C!%5BCDATA%5B12344433%5D%5D%3E%3C%2FMobile_Number%3E%3CJob_title%3EManager%3C%2FJob_title%3E%3CCompany_Name%3Eve%3C%2FCompany_Name%3E%3CMembershipDurationID%3E%3C!%5BCDATA%5B30%5D%5D%3E%3C%2FMembershipDurationID%3E%3CPaymentType%3E%3C!%5BCDATA%5BCredit%20Card%5D%5D%3E%3C%2FPaymentType%3E%20%0A%3C%2FUserDetails%3E%3C%2FRequest%3E%3C%2FInstancyWrapper%3E',
332            CURLOPT_HTTPHEADER => [
333                'Content-Type: application/x-www-form-urlencoded',
334                'Cookie: ASP.NET_SessionId=z1kdzfdinrjc01n3poj2ast3',
335            ],
336        ]);
337
338        $response = curl_exec($curl);
339        curl_close($curl);
340
341        return $response;
342    }
343
344    /**
345     * Determine if the user has been created on Instancy
346     */
347    public function validateUser(Request $request): bool
348    {
349        $email = urlencode($request['Email']);
350        $response = $this->GenerateSessionID($email);
351
352        if (str_contains($response, 'Invalid User ID') || str_contains($response, 'Invalid Client ID') || str_contains($response, 'There is no row')
353        || str_contains($response, 'Error')
354        ) {
355            return false;
356        }
357
358        $astrKey = $this->isProd ? 'B6F95CD1-600A-421F-9528-39DF7130ABE0' : '7CD8EDD1-3495-4232-9C63-0238B0FA0C8C';
359
360        $curl = curl_init();
361        curl_setopt_array($curl, [
362            CURLOPT_URL => 'https://ondemand-master-admin.vengreso.com/instancyservice.asmx/GetUserInfoByEmailForAllSites',
363            CURLOPT_RETURNTRANSFER => true,
364            CURLOPT_ENCODING => '',
365            CURLOPT_MAXREDIRS => 10,
366            CURLOPT_TIMEOUT => 0,
367            CURLOPT_FOLLOWLOCATION => true,
368            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
369            CURLOPT_CUSTOMREQUEST => 'POST',
370            CURLOPT_POSTFIELDS => 'astrKey='.$astrKey.'&astrXML=%3C%3Fxml%20version%3D\'1.0\'%20encoding%3D\'iso-8859-1\'%3F%3E%3CInstancyWrapper%3E%3CRequest%20SiteID%3D\'374\'%3E%3CUserDetails%3E%20%3CUserID%3E%3C!%5BCDATA%5B-1%5D%5D%3E%3C%2FUserID%3E%3CEmail%3E%3C!%5BCDATA%5B'.$email.'%5D%5D%3E%3C%2FEmail%3E%3CPassword%3E%3C!%5BCDATA%5B17%245I%24jaFq%40%5D%5D%3E%3C%2FPassword%3E%3C%2FUserDetails%3E%3C%2FRequest%3E%3C%2FInstancyWrapper%3E', CURLOPT_HTTPHEADER => [
371                'Content-Type: application/x-www-form-urlencoded',
372                'Cookie: ASP.NET_SessionId=fuhbkztcn41q4vteeipt5jmr',
373            ],
374        ]);
375        $response = curl_exec($curl);
376        curl_close($curl);
377
378        if (str_contains($response, 'Invalid User ID') || str_contains($response, 'Invalid Client ID') || str_contains($response, 'There is no row')
379        || str_contains($response, 'Error')
380        ) {
381            return false;
382        }
383
384        return true;
385    }
386
387    public function createUserInstancy($request)
388    {
389        $this->action = 'CreateUser';
390        $parametersArray = [
391            'Request' => [
392                '@SiteID' => '388',
393                'UserDetails' => [
394                    '#First_Name' => (isset($request['First_Name'])) ? $request['First_Name'] : '',
395                    '#Last_Name' => (isset($request['Last_Name'])) ? $request['Last_Name'] : '',
396                    '#User_name' => (isset($request['User_name'])) ? $request['User_name'] : '',
397                    '#Email' => (isset($request['Email'])) ? $request['Email'] : '',
398                    '#Password' => (isset($request['Password'])) ? $request['Password'] : '',
399
400                ],
401            ],
402        ];
403
404        $xml = new ArrayToXML();
405        $this->parameters = $xml->buildXML($parametersArray);
406
407        return $this->callInstacncyApi();
408    }
409
410    /**
411     * Call the common api call through the curl
412     */
413    public function callInstacncyApi()
414    {
415        $url = $this->makeUrl();
416        $params = [
417            'astrKey' => $this->astr_key,
418            'astrXML' => $this->parameters,
419        ];
420
421        $curl = curl_init($url);
422        curl_setopt($curl, CURLOPT_POST, true);
423        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
424        curl_setopt($curl, CURLOPT_HTTPHEADER, [
425            'Content-Type: application/json',
426        ]);
427        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
428        $curlResponse = curl_exec($curl);
429        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
430        curl_close($curl);
431
432        $processed = json_decode($curlResponse, true);
433
434        $xml_data = (isset($processed['d'])) ? $processed['d'] : '';
435        $array = '';
436        if ($xml_data) {
437            $xml = simplexml_load_string($xml_data, 'SimpleXMLElement', LIBXML_NOCDATA);
438            $json = json_encode($xml);
439            $array = json_decode($json, true);
440        }
441
442        return $array;
443    }
444
445    /**
446     * Function to make the api url with action
447     */
448    public function makeUrl()
449    {
450        $url = $this->url.'/'.$this->action;
451
452        return $url;
453    }
454}