LewaimaiHttp.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. <?php
  2. use HttpQueue;
  3. use LewaimaiRequestApi;
  4. use Yii;
  5. class LewaimaiHttp
  6. {
  7. //POST请求
  8. //参数1是请求的url
  9. //参数2是发送的数据的数组
  10. //参数3是其他POST选项
  11. public static function POST($url, array $post = array(), array $options = array())
  12. {
  13. $defaults = array(
  14. CURLOPT_POST => 1,
  15. CURLOPT_HEADER => 0,
  16. CURLOPT_URL => $url,
  17. CURLOPT_FRESH_CONNECT => 1,
  18. CURLOPT_RETURNTRANSFER => 1,
  19. CURLOPT_FORBID_REUSE => 1,
  20. CURLOPT_TIMEOUT => 30,
  21. CURLOPT_POSTFIELDS => http_build_query($post),
  22. CURLOPT_SSLVERSION => 1,
  23. CURLOPT_SSL_VERIFYPEER => 0,
  24. CURLOPT_SSL_VERIFYHOST => 2,
  25. );
  26. $ch = curl_init();
  27. curl_setopt_array($ch, ($options + $defaults));
  28. $result = curl_exec($ch);
  29. if ($result === false) {
  30. Yii::log("POST ERROR:".curl_error($ch));
  31. }
  32. curl_close($ch);
  33. return $result;
  34. }
  35. //GET请求
  36. //参数1是请求的url
  37. //参数2是发送的数据的数组
  38. //参数3是其他GET选项
  39. public static function GET($url, array $get = array(), array $options = array())
  40. {
  41. $defaults = array(
  42. CURLOPT_URL => $url.(strpos($url, '?') === false ? '?' : '').http_build_query($get),
  43. CURLOPT_HEADER => 0,
  44. CURLOPT_RETURNTRANSFER => true,
  45. CURLOPT_TIMEOUT => 4,
  46. CURLOPT_SSLVERSION => 1,
  47. CURLOPT_SSL_VERIFYPEER => 0,
  48. CURLOPT_SSL_VERIFYHOST => 2,
  49. );
  50. $ch = curl_init();
  51. curl_setopt_array($ch, ($options + $defaults));
  52. $result = curl_exec($ch);
  53. if ($result === false) {
  54. Yii::log("GET ERROR:".curl_error($ch));
  55. }
  56. curl_close($ch);
  57. return $result;
  58. }
  59. public static function LESHUA_GET($url, array $get = array(), array $options = array())
  60. {
  61. $defaults = array(
  62. CURLOPT_URL => $url.(strpos($url, '?') === false ? '?' : '').http_build_query($get),
  63. CURLOPT_HEADER => false,
  64. CURLOPT_RETURNTRANSFER => true,
  65. CURLOPT_TIMEOUT => 10,
  66. CURLOPT_SSLVERSION => 1,
  67. CURLOPT_VERBOSE => 1,
  68. CURLOPT_SSL_VERIFYPEER => false,
  69. CURLOPT_SSL_VERIFYHOST => false,
  70. CURLOPT_CAINFO => getcwd().'/protected/files/leshua/yeahka_ca.crt',
  71. CURLOPT_SSLCERT => getcwd().'/protected/files/leshua/leshua_apiclient_cert.pem',
  72. CURLOPT_SSLCERTPASSWD => 'lewaimai@yeahka.com',
  73. CURLOPT_SSLCERTTYPE => 'PEM',
  74. CURLOPT_SSLKEY => getcwd().'/protected/files/leshua/leshua_apiclient_key.pem',
  75. CURLOPT_SSLKEYPASSWD => 'lewaimai@yeahka.com',
  76. CURLOPT_SSLKEYTYPE => 'PEM',
  77. );
  78. $ch = curl_init();
  79. curl_setopt_array($ch, ($options + $defaults));
  80. $result = curl_exec($ch);
  81. if ($result === false) {
  82. Yii::log("GET ERROR:".curl_error($ch));
  83. }
  84. curl_close($ch);
  85. return $result;
  86. }
  87. //异步POST
  88. public static function POST_ASYNC($url, array $post = array(), array $options = array())
  89. {
  90. /*
  91. $defaults = array(
  92. CURLOPT_POST => 1,
  93. CURLOPT_HEADER => 0,
  94. CURLOPT_URL => $url,
  95. CURLOPT_FRESH_CONNECT => 1,
  96. CURLOPT_RETURNTRANSFER => 1,
  97. CURLOPT_FORBID_REUSE => 1,
  98. CURLOPT_TIMEOUT => 4,
  99. CURLOPT_POSTFIELDS => http_build_query($post),
  100. CURLOPT_SSLVERSION => 1,
  101. CURLOPT_SSL_VERIFYPEER => 0,
  102. CURLOPT_SSL_VERIFYHOST => 2
  103. );
  104. $ch = curl_init();
  105. curl_setopt_array($ch, ($options + $defaults));
  106. $result = curl_exec($ch);
  107. if ($result === false)
  108. {
  109. Yii::log("POST ERROR:" . curl_error($ch));
  110. }
  111. curl_close($ch);
  112. return $result;
  113. */
  114. $argument = json_encode($post);
  115. $optionsargument = json_encode($options);
  116. $model = new HttpQueue();
  117. $model->url = $url;
  118. $model->argument = $argument;
  119. $model->optionsargument = $optionsargument;
  120. $model->type = 0;
  121. $model->last_time = date('Y-m-d H:i:s');
  122. $result = $model->save();
  123. return $result;
  124. }
  125. //异步GET
  126. public static function GET_ASYNC($url, array $get = array(), array $options = array())
  127. {
  128. /*
  129. $defaults = array(
  130. CURLOPT_URL => $url . (strpos($url, '?') === FALSE ? '?' : '') . http_build_query($get),
  131. CURLOPT_HEADER => 0,
  132. CURLOPT_RETURNTRANSFER => TRUE,
  133. CURLOPT_TIMEOUT => 4,
  134. CURLOPT_SSLVERSION => 1,
  135. CURLOPT_SSL_VERIFYPEER => 0,
  136. CURLOPT_SSL_VERIFYHOST => 2
  137. );
  138. $ch = curl_init();
  139. curl_setopt_array($ch, ($options + $defaults));
  140. $result = curl_exec($ch);
  141. if ($result === false)
  142. {
  143. Yii::log("GET ERROR:" . curl_error($ch));
  144. }
  145. curl_close($ch);
  146. return $result;
  147. */
  148. $argument = json_encode($get);
  149. $optionsargument = json_encode($options);
  150. $model = new HttpQueue();
  151. $model->url = $url;
  152. $model->argument = $argument;
  153. $model->optionsargument = $optionsargument;
  154. $model->type = 1;
  155. $model->last_time = date('Y-m-d H:i:s');
  156. $result = $model->save();
  157. return $result;
  158. }
  159. public static function POSTJSON($url, $json)
  160. {
  161. return self::POST($url, array(), array(CURLOPT_POSTFIELDS => $json));
  162. }
  163. //发送短信
  164. public static function SendSMSMessage($phone, $content)
  165. {
  166. $content = str_replace('【', '(', $content);
  167. $content = str_replace('】', ')', $content);
  168. $content = $content."【乐外卖】";
  169. $content = iconv("utf-8", "gb2312//TRANSLIT//IGNORE", $content);
  170. $flag = 0;
  171. //要post的数据
  172. $argv = array(
  173. 'sn' => 'SDK-JMR-010-00033', ////替换成您自己的序列号
  174. 'pwd' => strtoupper(md5('SDK-JMR-010-00033'.'893025')), //此处密码需要加密 加密方式为 md5(sn+password) 32位大写
  175. 'mobile' => $phone,//手机号 多个用英文的逗号隔开 post理论没有长度限制.推荐群发一次小于等于10000个手机号
  176. 'content' => $content,//短信内容
  177. 'ext' => '',
  178. 'stime' => '',//定时时间 格式为2011-6-29 11:09:21
  179. 'rrid' => '',
  180. );
  181. //构造要post的字符串
  182. $params = "";
  183. foreach ($argv as $key => $value) {
  184. if ($flag != 0) {
  185. $params .= "&";
  186. $flag = 1;
  187. }
  188. $params .= $key."=";
  189. $params .= urlencode($value);
  190. $flag = 1;
  191. }
  192. $length = strlen($params);
  193. //创建socket连接
  194. $fp = fsockopen("sdk2.entinfo.cn", 8060, $errno, $errstr, 10) or exit($errstr."--->".$errno);
  195. //构造post请求的头
  196. $header = "POST /webservice.asmx/mt HTTP/1.1\r\n";
  197. $header .= "Host:sdk2.entinfo.cn\r\n";
  198. $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
  199. $header .= "Content-Length: ".$length."\r\n";
  200. $header .= "Connection: Close\r\n\r\n";
  201. //添加post的字符串
  202. $header .= $params."\r\n";
  203. //发送post的数据
  204. fputs($fp, $header);
  205. $inheader = 1;
  206. while (!feof($fp)) {
  207. $line = fgets($fp, 1024); //去除请求包的头只显示页面的返回数据
  208. if ($inheader && ($line == "\n" || $line == "\r\n")) {
  209. $inheader = 0;
  210. }
  211. if ($inheader == 0) {
  212. // echo $line;
  213. }
  214. }
  215. //<string xmlns="http://tempuri.org/">-5</string>
  216. $line = str_replace("<string xmlns=\"http://tempuri.org/\">", "", $line);
  217. $line = str_replace("</string>", "", $line);
  218. $result = explode("-", $line);
  219. // echo $line."-------------";
  220. if (count($result) > 1) {
  221. Yii::log(
  222. '发送短信失败,手机号码:'.$phone.' 发送内容:'.$content."\n返回值为:".$line.',请查看webservice返回值对照表'
  223. );
  224. return false;
  225. } else {
  226. //Yii::log('发送成功 返回值为:'.$line);
  227. return true;
  228. }
  229. }
  230. /*
  231. * 发送模板短信
  232. */
  233. public static function SendTemplateSMS($phone, $content, $tid = 0)
  234. {
  235. $paramArray = array();
  236. $paramArray["phone"] = $phone;
  237. $paramArray["content"] = $content;
  238. $paramArray["tid"] = $tid;
  239. $retArray = LewaimaiRequestApi::SendCommon("/sms/sendtpsms", $paramArray);
  240. if (!$retArray) {
  241. return "网络或服务器错误";
  242. }
  243. if ($retArray["errcode"] == 0) {
  244. return true;
  245. } else {
  246. return $retArray["errmsg"];
  247. }
  248. }
  249. }