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