Task.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace Middleware\Lib;
  3. use Dever;
  4. class Task
  5. {
  6. # 执行某个业务接口
  7. public function run_api()
  8. {
  9. $channel_id = 1;
  10. $api_id = 1;
  11. $channel = Dever::db('middleware/channel')->find($channel_id);
  12. $channel_api = Dever::db('middleware/channel_api')->find($api_id);
  13. $url = $channel['host'] . $channel_api['uri'];
  14. $param = array();
  15. $header = $body = false;
  16. $method = 'get';
  17. $json = false;
  18. if ($channel_api['method'] == -1) {
  19. $channel_api['method'] = $channel['method'];
  20. $channel_api['post_method'] = $channel['post_method'];
  21. }
  22. if ($channel_api['post_method'] == 2) {
  23. $method = 'file';
  24. } elseif ($channel_api['method'] == 2) {
  25. $method = 'post';
  26. }
  27. if ($channel_api['post_method'] == 3) {
  28. $json = true;
  29. }
  30. if ($channel['type']) {
  31. $type = explode(',', $channel['type']);
  32. if (in_array(1, $type)) {
  33. # 请求体
  34. $this->request($body, 'request_body', array('channel_id' => $channel['id']), $channel, $channel_api);
  35. }
  36. if (in_array(2, $type)) {
  37. # 请求头
  38. $this->request($header, 'request_header', array('channel_id' => $channel['id']), $channel, $channel_api);
  39. }
  40. }
  41. if (!$body) {
  42. $body = $this->body($channel, $channel_api);
  43. }
  44. # 如果是ssl 这里需要处理一下
  45. $log['url'] = $url;
  46. $log['body'] = $body;
  47. $log['method'] = $method;
  48. $log['json'] = $json;
  49. $log['header'] = $header;
  50. print_r($log);die;
  51. //Dever::log($log, 'middleware');
  52. $response = Dever::curl($url, $body, $method, $json, $header);
  53. }
  54. public function value($data, $channel, $channel_api = array())
  55. {
  56. $value = $data['default'];
  57. if (strstr($value, 'Dever')) {
  58. $value = '$value = '.$value.';';
  59. eval($value);
  60. } elseif ($value == '{timestamp}') {
  61. $value = time();
  62. } elseif ($value == '{appkey}') {
  63. $value = $channel['appkey'];
  64. } elseif ($value == '{signature}') {
  65. //$value = $channel['signature'];//待处理
  66. } elseif ($value == '{api_request}' && $channel_api) {
  67. $value = $this->body($channel, $channel_api);
  68. }
  69. if ($data['type'] == 1) {
  70. $value = (float) $value;
  71. } elseif ($data['type'] == 2) {
  72. $value = (string) $value;
  73. } elseif ($data['type'] == 3 && is_array($value)) {
  74. $value = Dever::json_encode($value);
  75. }
  76. return $value;
  77. }
  78. public function request(&$data, $table, $where, $channel, $channel_api = array())
  79. {
  80. $request_body = Dever::db('middleware/channel_' . $table)->select($where);
  81. if ($request_body) {
  82. foreach ($request_body as $k => $v) {
  83. $data[$v['key']] = $this->value($v, $channel, $channel_api);
  84. }
  85. }
  86. }
  87. public function body($channel, $channel_api)
  88. {
  89. $body = array();
  90. $this->request($body, 'api_request', array('api_id' => $channel_api['id']), $channel);
  91. if (!$body) {
  92. $body = '';
  93. }
  94. return $body;
  95. }
  96. }