בקשה מימות המשיח בקשר למעבר לשרתי Private
-
מה אתם רוצים ? שתוכלו לשלוח בGET לדף שבו אתם נמצאים ערך וזה ישים בכתובת מה שצריך?
-
@שמואל בדיוק! יש סיכוי לכזה דבר??
-
-
אני שיחקתי עם המחלקה של @חוקר ככה:
הורדתי את :
const URL = 'https://www.call2all.co.il/ym/api/';והוספתי בפונקציית הבנייה
__constructאת השורות הבאות:
global $private; $this -> url = 'https://'.$private.'.call2all.co.il/ym/api/';אחר כך החלפתי כל מקום שהיה
self::URLב:
$this -> url
-
אני עכשיו מצאתי פתרון אחר.
במקום השורה:const URL = 'https://www.call2all.co.il/ym/api/';כתבתי
private $URLFirst = 'https://www.call2all.co.il/ym/api/';ואת פונקציית הבנייה שיניתי שתקבל עוד משתנה, ככה:
public function __construct($user_name, $password, $private = false)והוספתי תנאי בתחילת הפונקציה:
if($private) $this -> URLFirst = 'https://private.call2all.co.il/ym/api/';וכמובן אח"כ בשני המקומות שהופיע:
self::URLהחלפתי ל:
$this -> URLFirstובסה"כ המחלקה נראית כך:
class connecting_to_yemot_api { public $token; private $URLFirst = 'https://www.call2all.co.il/ym/api/'; public function __construct($user_name, $password, $private = false) { if($private) $this -> URLFirst = 'https://private.call2all.co.il/ym/api/'; $body = array('username' => $user_name, 'password' => $password); $body = http_build_query($body); $opts = array('http' => array( 'method' => 'POST', 'header' => "Content-Type: application/x-www-form-urlencoded", 'content' => $body, 'follow_location' => false) ); $context = stream_context_create($opts); $url = $this -> URLFirst.'Login'; $result = file_get_contents($url, FALSE, $context); $result = json_decode($result); if($result -> responseStatus == 'OK') { $this -> token = $result -> token; return TRUE; } else { throw new Exception('שם המשתמש או הסיסמא של המערכת שגויים'); } } public function __destruct() { $this -> connecting('Logout'); } public function connecting($action, $body = array()) { $delimiter = '----'.uniqid(); $body['token'] = $this -> token; $body = BodyPost::Get($body, $delimiter); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-Type: multipart/form-data; boundary='.$delimiter, 'content' => $body, 'follow_location' => false ) ); $context = stream_context_create($opts); $url = $this -> URLFirst.$action; $result = file_get_contents($url, FALSE, $context); $headers = $this -> parseHeaders($http_response_header); if($headers['Content-Type'][0] == 'application/json') { return json_decode($result); } else { return $result; } } private function parseHeaders($headers) { // פונקציה שמקבלת מערך של שורות הכותרות // הפונקציה מפרקת את קבצי הקוקי לתת-מערך נפרד // מערך הכותרות $head = array(); foreach( $headers as $k=>$v ) { $t = explode( ':', $v, 2 ); if( isset( $t[1] ) ) { if($t[0] == 'Set-Cookie') { $CookiesArr = array(); $cookies = explode( ';', $t[1]); foreach($cookies as $cookie) { $c = explode( '=', $cookie); if( isset( $c[1] ) ) { $CookiesArr[ trim($c[0]) ] = trim( $c[1] ); } else { $CookiesArr[] = trim( $c[0] ); } } $head[ trim($t[0]) ] = $CookiesArr; } elseif($t[0] == 'Content-Type') { $arr = array(); $children = explode( ';', $t[1]); foreach($children as $child) { $c = explode( '=', $child); if( isset( $c[1] ) ) { $arr[ trim($c[0]) ] = trim( $c[1] ); } else { $arr[] = trim( $c[0] ); } } $head[ trim($t[0]) ] = $arr; } else { $head[ trim($t[0]) ] = trim( $t[1] ); } } else { $head[] = $v; if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) ) { $head['reponse_code'] = intval($out[1]); } } } return $head; } }לא בדקתי את זה על שרת פרייבט כי אין לי, אבל על השרת הרגיל זה עובד, אין סיבה לכאורה שלא יעבוד גם על פרייבט.
-
אני מצאתי פתרון אחר.
פשוט
defineבתחילת הקובץ של הURL.
אם שולחים (GET) ערךSetSite=privateזה פונה לפריווטכמובן עשיתי בערך URL:
const URL = URL;בדקתי בשתי השרתים וזה עובד.
וככה זה נראה:
<?php $SetSite = $_GET["SetSite"]; if ($SetSite == NULL) { define("URL", "https://www.call2all.co.il/ym/api/"); } if ($SetSite == "private") { define("URL", "https://private.call2all.co.il/ym/api/"); } class BodyPost { // part "multipart/form-data" public static function PartPost($name, $val) { $body = 'Content-Disposition: form-data; name="' . $name . '"'; // check instance of oFile if($val instanceof oFile) { $file = $val->Name(); $mime = $val->Mime(); $cont = $val->Content(); $body .= '; filename="' . $file . '"' . "\r\n"; $body .= 'Content-Type: ' . $mime ."\r\n\r\n"; $body .= $cont."\r\n"; } else $body .= "\r\n\r\n".$val."\r\n"; return $body; } public static function Get(array $post, $delimiter = '-------------0123456789') { if(is_array($post) && !empty($post)) { $bool = true; //foreach($post as $val) if($val instanceof oFile) {$bool = true; break; }; if($bool) { $ret = ''; foreach($post as $name=>$val) $ret .= '--' . $delimiter. "\r\n". self::PartPost($name, $val); $ret .= "--" . $delimiter . "--\r\n"; } else $ret = http_build_query($post); } else throw new \Exception('Error input param!'); return $ret; } } class oFile { private $name; private $mime; private $content; public function __construct($name, $mime=null, $content=null) { if(is_null($content)) { $info = pathinfo($name); // check is exist and readable file if(!empty($info['basename']) && is_readable($name)) { $this->name = $info['basename']; // get MIME $this->mime = mime_content_type($name); // load file $content = file_get_contents($name); if($content!==false) { $this->content = $content; } else { throw new Exception('Don`t get content - "'.$name.'"'); } } else { throw new Exception('Error param'); } } else { $this->name = $name; if(is_null($mime)) $mime = mime_content_type($name); $this->mime = $mime; $this->content = $content; }; } public function Name() { return $this->name; } public function Mime() { return $this->mime; } public function Content() { return $this->content; } } class connecting_to_yemot_api { public $token; const URL = URL; public function __construct($user_name, $password) { $body = array('username' => $user_name, 'password' => $password); $body = http_build_query($body); $opts = array('http' => array( 'method' => 'POST', 'header' => "Content-Type: application/x-www-form-urlencoded", 'content' => $body, 'follow_location' => false) ); $context = stream_context_create($opts); $url = self::URL.'Login'; $result = file_get_contents($url, FALSE, $context); $result = json_decode($result); if($result -> responseStatus == 'OK') { $this -> token = $result -> token; return TRUE; } else { throw new Exception('שם המשתמש או הסיסמא של המערכת שגויים'); } } public function __destruct() { $this -> connecting('Logout'); } public function connecting($action, $body = array()) { $delimiter = '----'.uniqid(); $body['token'] = $this -> token; $body = BodyPost::Get($body, $delimiter); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-Type: multipart/form-data; boundary='.$delimiter, 'content' => $body, 'follow_location' => false ) ); $context = stream_context_create($opts); $url = self::URL.$action; $result = file_get_contents($url, FALSE, $context); $headers = $this -> parseHeaders($http_response_header); if($headers['Content-Type'][0] == 'application/json') { return json_decode($result); } else { return $result; } } private function parseHeaders($headers) { // פונקציה שמקבלת מערך של שורות הכותרות // הפונקציה מפרקת את קבצי הקוקי לתת-מערך נפרד // מערך הכותרות $head = array(); foreach( $headers as $k=>$v ) { $t = explode( ':', $v, 2 ); if( isset( $t[1] ) ) { if($t[0] == 'Set-Cookie') { $CookiesArr = array(); $cookies = explode( ';', $t[1]); foreach($cookies as $cookie) { $c = explode( '=', $cookie); if( isset( $c[1] ) ) { $CookiesArr[ trim($c[0]) ] = trim( $c[1] ); } else { $CookiesArr[] = trim( $c[0] ); } } $head[ trim($t[0]) ] = $CookiesArr; } elseif($t[0] == 'Content-Type') { $arr = array(); $children = explode( ';', $t[1]); foreach($children as $child) { $c = explode( '=', $child); if( isset( $c[1] ) ) { $arr[ trim($c[0]) ] = trim( $c[1] ); } else { $arr[] = trim( $c[0] ); } } $head[ trim($t[0]) ] = $arr; } else { $head[ trim($t[0]) ] = trim( $t[1] ); } } else { $head[] = $v; if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) ) { $head['reponse_code'] = intval($out[1]); } } } return $head; } }את המחלקה לקחתי מ https://freeivr.co.il/oldforum/viewtopic.php?t=2780
-
@שמואל לכאורה אתה צודק, אני ניסיתי בהתחלה להכיל את הערך של
const URLעםמשתנהוזה לא עבד, כיconstהואקבועולא יכול לקבל ערך שלמשתנה, אבל אין סיבה לכאורה שהוא לא יקבל ערך שלקבועכמו שעשית -
@שואל-ברצינות נכון. גם אני נתקלתי בזה. לא נכנס שם משתנה בשום צורה. אז עשיתי ככה...
-
@שמואל עשיתי בדיקה על אחת המחלקות ולא עובד:
<?php /*================יצירת אובייקט(מופע) חדש====================*/ $con = new connecting_to_yemot_api('0*********', '1212'); /*================קבלת מספר היחידות====================*/ $a = $con -> connecting('GetSession'); print_r($a); /*===============================================================*/ $SetSite = $_GET["SetSite"]; if ($SetSite == NULL) { define("URL", "https://www.call2all.co.il/ym/api/"); } if ($SetSite == "private") { define("URL", "https://private.call2all.co.il/ym/api/"); } class BodyPost { // part "multipart/form-data" public static function PartPost($name, $val) { $body = 'Content-Disposition: form-data; name="' . $name . '"'; // check instance of oFile if($val instanceof oFile) { $file = $val->Name(); $mime = $val->Mime(); $cont = $val->Content(); $body .= '; filename="' . $file . '"' . "\r\n"; $body .= 'Content-Type: ' . $mime ."\r\n\r\n"; $body .= $cont."\r\n"; } else $body .= "\r\n\r\n".$val."\r\n"; return $body; } public static function Get(array $post, $delimiter = '-------------0123456789') { if(is_array($post) && !empty($post)) { $bool = true; //foreach($post as $val) if($val instanceof oFile) {$bool = true; break; }; if($bool) { $ret = ''; foreach($post as $name=>$val) $ret .= '--' . $delimiter. "\r\n". self::PartPost($name, $val); $ret .= "--" . $delimiter . "--\r\n"; } else $ret = http_build_query($post); } else throw new \Exception('Error input param!'); return $ret; } } class oFile { private $name; private $mime; private $content; public function __construct($name, $mime=null, $content=null) { if(is_null($content)) { $info = pathinfo($name); // check is exist and readable file if(!empty($info['basename']) && is_readable($name)) { $this->name = $info['basename']; // get MIME $this->mime = mime_content_type($name); // load file $content = file_get_contents($name); if($content!==false) { $this->content = $content; } else { throw new Exception('Don`t get content - "'.$name.'"'); } } else { throw new Exception('Error param'); } } else { $this->name = $name; if(is_null($mime)) $mime = mime_content_type($name); $this->mime = $mime; $this->content = $content; }; } public function Name() { return $this->name; } public function Mime() { return $this->mime; } public function Content() { return $this->content; } } class connecting_to_yemot_api { public $token; const URL = URL; public function __construct($user_name, $password) { $body = array('username' => $user_name, 'password' => $password); $body = http_build_query($body); $opts = array('http' => array( 'method' => 'POST', 'header' => "Content-Type: application/x-www-form-urlencoded", 'content' => $body, 'follow_location' => false) ); $context = stream_context_create($opts); $url = self::URL.'Login'; $result = file_get_contents($url, FALSE, $context); $result = json_decode($result); if($result -> responseStatus == 'OK') { $this -> token = $result -> token; return TRUE; } else { throw new Exception('שם המשתמש או הסיסמא של המערכת שגויים'); } } public function __destruct() { $this -> connecting('Logout'); } public function connecting($action, $body = array()) { $delimiter = '----'.uniqid(); $body['token'] = $this -> token; $body = BodyPost::Get($body, $delimiter); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-Type: multipart/form-data; boundary='.$delimiter, 'content' => $body, 'follow_location' => false ) ); $context = stream_context_create($opts); $url = self::URL.$action; $result = file_get_contents($url, FALSE, $context); $headers = $this -> parseHeaders($http_response_header); if($headers['Content-Type'][0] == 'application/json') { return json_decode($result); } else { return $result; } } private function parseHeaders($headers) { // פונקציה שמקבלת מערך של שורות הכותרות // הפונקציה מפרקת את קבצי הקוקי לתת-מערך נפרד // מערך הכותרות $head = array(); foreach( $headers as $k=>$v ) { $t = explode( ':', $v, 2 ); if( isset( $t[1] ) ) { if($t[0] == 'Set-Cookie') { $CookiesArr = array(); $cookies = explode( ';', $t[1]); foreach($cookies as $cookie) { $c = explode( '=', $cookie); if( isset( $c[1] ) ) { $CookiesArr[ trim($c[0]) ] = trim( $c[1] ); } else { $CookiesArr[] = trim( $c[0] ); } } $head[ trim($t[0]) ] = $CookiesArr; } elseif($t[0] == 'Content-Type') { $arr = array(); $children = explode( ';', $t[1]); foreach($children as $child) { $c = explode( '=', $child); if( isset( $c[1] ) ) { $arr[ trim($c[0]) ] = trim( $c[1] ); } else { $arr[] = trim( $c[0] ); } } $head[ trim($t[0]) ] = $arr; } else { $head[ trim($t[0]) ] = trim( $t[1] ); } } else { $head[] = $v; if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) ) { $head['reponse_code'] = intval($out[1]); } } } return $head; } } ?>הרצתי בדפדפן את הכתובת ולא קורה כלום.
אם אני מריץ עם המחלקה הרגילה זה עובד מצויין. -
פוסט זה נמחק! -
@ממפ אתה לא יכול לשים את
$con = new connecting_to_yemot_api('077777', '8888');לפני המחלקה....
המחלקה אמורה להיות למעלה.
לנוחות אפשר לשים אותה אפילו בקובץ נפרד
-
@dudu מה אמור להתקבל במשתנה private כדי שהשרת יפנה אותו לכתובת הנכונה?
-
@ממפ true
-
@dudu
יש סכוי להסבר יותר? בשרת הרגיל זה עובד.
ניסתי לבדוק את זה על שרת פרייבט ולא עובד..
הוספתי את זה לבדיקה (ניסיתי גם בלי זה..)$private = true; -
@ממפ עם איזה מחלקה אתה עובד? איך קוד העתקת?
-
@ממפ אמר בבקשה מימות המשיח בקשר למעבר לשרתי Private:
@dudu
יש סכוי להסבר יותר? בשרת הרגיל זה עובד.
ניסתי לבדוק את זה על שרת פרייבט ולא עובד..
הוספתי את זה לבדיקה (ניסיתי גם בלי זה..)$private = true;אם אתה מתכוון למה שאני עשיתי, אז הערך של
$privateצריך להיות
wwwאוprivateבהתאם לשרת -
@שמואל בדקתי עכשיו שוב עם מה שאתה עשית, והסתדרתי. תודה רבה.
באמת מעניין שעם המחלקה של מאזין נלהב זה עובד גם אם אני כותב את
$con = new connecting_to_yemot_api('077777', '8888');
בהתחלה.. -
-
@ממפ אתה אמור פשוט לכתוב ככה:
$con = new connecting_to_yemot_api('077777', '8888', true);
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות