BaseApi.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace backend\models;
  3. use Yii;
  4. use yii\httpclient\Client;
  5. abstract class BaseApi
  6. {
  7. /**
  8. * @var string
  9. */
  10. public $baseUrl;
  11. /**
  12. * @var string
  13. */
  14. public $apiUrl;
  15. /**
  16. * @var string
  17. */
  18. public $apiSecret;
  19. /**
  20. * BaseApi constructor.
  21. */
  22. public function __construct()
  23. {
  24. $this->baseUrl = Yii::$app->params['xcrmServiceBaseUrl'];
  25. $this->apiSecret = Yii::$app->params['xcrmServiceApiSecret'];
  26. }
  27. /**
  28. * 发送GET请求
  29. * @param string $apiUrl
  30. * @param array $data
  31. * @return array|mixed
  32. */
  33. public function get($apiUrl, $data = [])
  34. {
  35. $client = new Client(['baseUrl' => $this->baseUrl]);
  36. $response = $client->get($apiUrl, $this->buildToken($data))->send();
  37. if ($response->getIsOk()) {
  38. return $response->getData();
  39. } else {
  40. return $this->returnArray(0, null, 'Api error: ' . $response->getStatusCode());
  41. }
  42. }
  43. /**
  44. * 发送POST请求
  45. * @param string $apiUrl
  46. * @param array $data
  47. * @return array|mixed
  48. */
  49. public function post($apiUrl, $data = [])
  50. {
  51. $client = new Client(['baseUrl' => $this->baseUrl]);
  52. $response = $client->post($apiUrl, $this->buildToken($data))->send();
  53. if ($response->getIsOk()) {
  54. return $response->getData();
  55. } else {
  56. return $this->returnArray(0, null, 'Api error: ' . $response->getStatusCode());
  57. }
  58. }
  59. /**
  60. * 发送PUT请求
  61. * @param string $apiUrl
  62. * @param array $data
  63. * @return array|mixed
  64. */
  65. public function put($apiUrl, $data = [])
  66. {
  67. $client = new Client(['baseUrl' => $this->baseUrl]);
  68. $response = $client->put($apiUrl, $this->buildToken($data))->send();
  69. if ($response->getIsOk()) {
  70. return $response->getData();
  71. } else {
  72. return $this->returnArray(0, null, 'Api error: ' . $response->getStatusCode());
  73. }
  74. }
  75. /**
  76. * 发送DELETE请求
  77. * @param string $apiUrl
  78. * @param array $data
  79. * @return array|mixed
  80. */
  81. public function delete($apiUrl, $data = [])
  82. {
  83. $client = new Client(['baseUrl' => $this->baseUrl]);
  84. $response = $client->delete($apiUrl, $this->buildToken($data))->send();
  85. if ($response->getIsOk()) {
  86. return $response->getData();
  87. } else {
  88. return $this->returnArray(0, null, 'Api error: ' . $response->getStatusCode());
  89. }
  90. }
  91. /**
  92. * 生成token
  93. * @param array $param
  94. * @return mixed
  95. */
  96. public function buildToken($param)
  97. {
  98. $secret = $this->apiSecret;
  99. ksort($param);//升序排序
  100. $strOauth = "";
  101. foreach ($param as $key => $val) {
  102. if ($key == 'token' || is_array($val) || $val === null) {
  103. continue;
  104. }
  105. $val = strval($val);
  106. $strOauth .= $key . '=' . $val . '&';
  107. }
  108. $strOauth = rtrim($strOauth, '&') . $secret;//加上密钥
  109. $param['token'] = md5($strOauth);
  110. return $param;
  111. }
  112. /**
  113. * 统一输出结果
  114. * @param int $code
  115. * @param array $data
  116. * @param string $msg
  117. * @return array
  118. */
  119. public function returnArray($code = 0, $data = null, $msg = '')
  120. {
  121. return ['code' => $code, 'data' => $data, 'message' => $msg];
  122. }
  123. }