Mt4Api.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <?php
  2. namespace common\lib;
  3. use common\helpers\Utils;
  4. class Mt4Api {
  5. /*
  6. define('T_PAGE_ENCODING', 'windows-1251'); // Web: Page encoding
  7. define('T_SMTP_SERVER', 'mail.mycompany.com'); // SMTP: Server
  8. define('T_SMTP_LOGIN', 'login'); // SMTP: Login
  9. define('T_SMTP_PASSWORD', 'password'); // SMTP: Password
  10. define('T_SMTP_FROM', 'hello@mycompany.com'); // SMTP: From
  11. define('T_SMTP_FROM_NAME','Mr. Hello'); // SMTP: From Name
  12. define('T_MT4_HOST', '114.55.37.146'); // MetaTrader: Server
  13. define('T_MT4_PORT', 443); // MetaTrader: Port
  14. define('T_PLUGIN_MASTER', 'password'); // Plugin: Master Password
  15. define('T_MYSQL_SERVER', '114.55.37.146'); // MySQL: Server
  16. define('T_MYSQL_LOGIN', 'root'); // MySQL: Login
  17. define('T_MYSQL_PASSWORD','QOFX@dmin2016'); // MySQL: Password
  18. define('T_MYSQL_DB_NAME', 'mt4'); // MySQL: Database
  19. */
  20. protected $realip = '103.29.142.69';
  21. protected $demoip = '47.52.153.85';
  22. /*
  23. public function Group($group){
  24. switch($group){
  25. case 'demoforex': $ret=1; break;
  26. case 'demoforex-usd': $ret=2; break;
  27. case 'demoforex-eur': $ret=3; break;
  28. case 'demoforex-jpy': $ret=4; break;
  29. default: $ret=0; break;
  30. }
  31. return($ret);
  32. }
  33. */
  34. public function MQ_Query($query,$real = 0 ){
  35. $ret='error';
  36. //---- open socket
  37. if( $real ){
  38. $ptr=@fsockopen($this->realip,'443',$errno,$errstr,5);
  39. }else{
  40. $ptr=@fsockopen($this->demoip,'443',$errno,$errstr,5);
  41. }
  42. //---- check connection
  43. if($ptr){
  44. //---- send request
  45. if(fputs($ptr,"W$query\nQUIT\n")!=FALSE){
  46. //---- clear default answer
  47. $ret='';
  48. //---- receive answer
  49. while(!feof($ptr)) {
  50. $line=fgets($ptr,128);
  51. if($line=="end\r\n") break;
  52. $ret.= $line;
  53. }
  54. }
  55. fclose($ptr);
  56. }
  57. //---- return answer
  58. return $ret;
  59. }
  60. public function addAccount($data, $real = 0){
  61. //字段:
  62. //INVESTOR STATUS ZIPCODE ID SEND_REPORTS PHONE_PASSWORD 属性不明
  63. $data['MASTER'] = 'password';
  64. $data['IP'] = isset($data['IP']) && trim($data['IP']) != '' ? trim($data['IP']) : Utils::getClientIp();
  65. $data['GROUP'] = isset($data['GROUP']) ? trim($data['GROUP']) : '';
  66. $data['NAME'] = isset($data['NAME']) ? trim($data['NAME']) : '';
  67. $data['PASSWORD'] = isset($data['PASSWORD']) ? trim($data['PASSWORD']) : '';
  68. $data['INVESTOR'] = isset($data['INVESTOR']) ? trim($data['INVESTOR']) : '';
  69. $data['EMAIL'] = isset($data['EMAIL']) ? trim($data['EMAIL']) : '';
  70. $data['COUNTRY'] = isset($data['COUNTRY']) ? trim($data['COUNTRY']) : 'China';
  71. $data['STATE'] = isset($data['STATE']) ? trim($data['STATE']) : '';
  72. $data['CITY'] = isset($data['CITY']) ? trim($data['CITY']) : '';
  73. $data['ADDRESS'] = isset($data['ADDRESS']) ? trim($data['ADDRESS']) : '';
  74. $data['PHONE'] = isset($data['PHONE']) ? trim($data['PHONE']) : '';
  75. $data['PHONE_PASSWORD'] = isset($data['PHONE_PASSWORD']) ? trim($data['PHONE_PASSWORD']) : '';
  76. $data['STATUS'] = '';
  77. $data['ZIPCODE'] = isset($data['ZIPCODE']) ? trim($data['ZIPCODE']) : '';
  78. $data['ID'] = isset($data['ID']) ? trim($data['ID']) : '';
  79. $data['LEVERAGE'] = isset($data['LEVERAGE']) ? trim($data['LEVERAGE']) : '';
  80. $data['AGENT'] = 0;
  81. $data['SEND_REPORTS'] = 1;
  82. $data['DEPOSIT'] = '';
  83. if ($real == 1) {
  84. $data['COMMENT'] = 'XCBVARSTDUSD';
  85. $data['LOGIN'] = isset($data['LOGIN']) ? $data['LOGIN'] : '';
  86. } else {
  87. $data['GROUP'] = 1;
  88. $data['COMMENT'] = 'demoforex';
  89. $data['LEVERAGE'] = 100;
  90. $data['DEPOSIT'] = 100000;
  91. $data['LOGIN'] = '';
  92. }
  93. /* $query = 'NEWACCOUNT MASTER=password|IP='.$ip.'|GROUP='.$data['accounttype'].'|NAME='.$data['username'].'|PASSWORD='.$data['password'].
  94. '|INVESTOR=|EMAIL='.$data['email'].'|COUNTRY=hk|STATE=hk|CITY=hk|ADDRESS=hk|COMMENT='.$comment.'|PHONE='.$data['phone'].
  95. '|PHONE_PASSWORD=|STATUS=resident|ZIPCODE=000000|ID=10|LEVERAGE='.$leverage.'|AGENT='.$data['agent'].
  96. '|SEND_REPORTS=1|DEPOSIT='.$deposit; 2016-5-24 7:30修改*/
  97. //$data['username'] = iconv("utf-8", "gbk", $data['username']);
  98. /*
  99. $query = 'NEWACCOUNT MASTER=password|IP='.$data['ip'].'|GROUP='.$group.'|NAME='.$data['username'].'|PASSWORD='.$data['password'].
  100. '|INVESTOR='.$data['investor'].'|EMAIL='.$data['email'].'|COUNTRY=hk|STATE=hk|CITY=hk|ADDRESS=hk|COMMENT='.$comment.'|PHONE=15814419156
  101. |PHONE_PASSWORD='.$data['phone_password'].'|STATUS=resident|ZIPCODE=000000|ID=10|LEVERAGE='.$leverage.'|AGENT=1|SEND_REPORTS=1|DEPOSIT='.$deposit;
  102. */
  103. /*
  104. $data['username'] = iconv("utf-8", "gbk", $data['username']);
  105. $query = 'NEWACCOUNT MASTER=xcoq123|IP='.$data['ip'].'|GROUP=1|NAME='.$data['username'].'|PASSWORD='.$data['password'].
  106. '|INVESTOR=|EMAIL=email|COUNTRY=China|STATE=hk|CITY=hk|ADDRESS=hk|COMMENT='.$comment.'|PHONE=+8613659856084
  107. |PHONE_PASSWORD=|STATUS=resident|ZIPCODE=123|ID=10|LEVERAGE='.$leverage.'|AGENT=123|SEND_REPORTS=1|DEPOSIT='.$deposit;
  108. echo $query;
  109. echo '<br>';
  110. echo '<br>';
  111. */
  112. $data['NAME'] = iconv("utf-8", "gbk", $data['NAME']);
  113. //--- prepare query
  114. $query="NEWACCOUNT MASTER={$data['MASTER']}|IP={$data['IP']}|GROUP={$data['GROUP']}|NAME={$data['NAME']}|".
  115. "PASSWORD={$data['PASSWORD']}|INVESTOR={$data['INVESTOR']}|EMAIL={$data['EMAIL']}|COUNTRY={$data['COUNTRY']}|".
  116. "STATE={$data['STATE']}|CITY={$data['CITY']}|ADDRESS={$data['ADDRESS']}|COMMENT={$data['COMMENT']}|".
  117. "PHONE={$data['PHONE']}|PHONE_PASSWORD={$data['PHONE_PASSWORD']}|STATUS={$data['STATUS']}|ZIPCODE={$data['ZIPCODE']}|".
  118. "ID={$data['ID']}|LEVERAGE={$data['LEVERAGE']}|AGENT={$data['AGENT']}|SEND_REPORTS={$data['SEND_REPORTS']}|".
  119. "DEPOSIT={$data['DEPOSIT']}|LOGIN={$data['LOGIN']}";
  120. //--- send request
  121. //echo $query;die;
  122. $ret = $this->MQ_Query($query,$real);
  123. $info = $this->qgstr($ret);
  124. return $info;
  125. }
  126. //处理api返回的信息 如: OK LOGIN=50010 or ERROR IP is blocked. Please wait 60 secs and try again.
  127. protected function qgstr($str)
  128. {
  129. if( strstr($str, 'OK')){
  130. $tmp = explode('=', $str);
  131. $login = str_replace('\r\n', '', $tmp[1]);
  132. return array('Ret'=>0, 'Obj'=> array('Login' => $login));
  133. }else{
  134. return array('Ret'=>1, 'str'=>$str);
  135. }
  136. }
  137. }