HttpRequestUtil.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace XiTaiYouPay\util;
  3. /**
  4. * http请求工具类
  5. */
  6. class HttpRequestUtil
  7. {
  8. /**
  9. * TODO:这里设置代理机器,只有需要代理的时候才设置,不需要代理,请设置为0.0.0.0和0
  10. * 本例程通过curl使用HTTP POST方法,此处可修改代理服务器,
  11. * 默认CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0,此时不开启代理(如有需要才设置)
  12. * @var unknown_type
  13. */
  14. const CURL_PROXY_HOST = "0.0.0.0";
  15. const CURL_PROXY_PORT = 8080;
  16. /**
  17. * POST请求
  18. * @param $data
  19. * @return mixed
  20. * @throws Exception
  21. */
  22. public static function sendPost($url, $data, $sign)
  23. {
  24. // 设置header头
  25. $header = array();
  26. $header[0] = "signature: ".$sign;
  27. $header[1] = "Content-type: application/json";
  28. $curl = curl_init();
  29. //设置超时
  30. curl_setopt($curl, CURLOPT_TIMEOUT, 20);
  31. //如果有配置代理这里就设置代理
  32. if(self::CURL_PROXY_HOST != "0.0.0.0" && self::CURL_PROXY_PORT != 0){
  33. curl_setopt($curl,CURLOPT_PROXY, self::CURL_PROXY_HOST);
  34. curl_setopt($curl,CURLOPT_PROXYPORT, self::CURL_PROXY_PORT);
  35. }
  36. curl_setopt($curl,CURLOPT_URL, $url);
  37. //不校验SSL证书
  38. curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
  39. curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);
  40. //设置header
  41. curl_setopt($curl, CURLOPT_HEADER, TRUE);
  42. curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  43. //要求结果为字符串且输出到屏幕上
  44. curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
  45. /**
  46. * TODO: 如果需要证书请求,开启以下代码
  47. * 设置证书
  48. * 使用证书:cert 与 key 分别属于两个.pem文件
  49. * 证书文件请放入服务器的非web目录下
  50. */
  51. // curl_setopt($curl,CURLOPT_SSLCERTTYPE,'PEM');
  52. // curl_setopt($curl,CURLOPT_SSLCERT, PayConfig::SSLCERT_PATH);
  53. // curl_setopt($curl,CURLOPT_SSLKEYTYPE,'PEM');
  54. // curl_setopt($curl,CURLOPT_SSLKEY, PayConfig::SSLKEY_PATH);
  55. //post提交方式
  56. curl_setopt($curl, CURLOPT_POST, TRUE);
  57. curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  58. //运行curl
  59. $result = curl_exec($curl);
  60. //返回结果处理
  61. if($result){
  62. list($header, $body) = explode("\r\n\r\n", $result, 2);
  63. $headers = explode("\r\n", $header);
  64. $headList = array();
  65. foreach ($headers as $head) {
  66. $value = explode(':', $head);
  67. if (count($value) > 1) {
  68. $headList[$value[0]] = $value[1];
  69. }
  70. }
  71. curl_close($curl);
  72. $resp_res = array();
  73. $resp_res["signature"] = trim($headList["signature"]);
  74. $resp_res["responseData"] = $body;
  75. return $resp_res;
  76. } else {
  77. $error = curl_errno($curl);
  78. curl_close($curl);
  79. throw new Exception("curl出错,错误码:$error");
  80. }
  81. }
  82. }