TestService.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. <?php
  2. namespace App\Service;
  3. use App\Model\RecordTable;
  4. use Illuminate\Support\Facades\Cache;
  5. use Illuminate\Support\Facades\Config;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Log;
  8. class TestService extends Service
  9. {
  10. public function testdwy($data){
  11. if(empty($data['url']) || empty($data['post']) || empty($data['header'])) return [false,'API请求参数不能为空'];
  12. $url = $data['url'];
  13. // $oldUrl = config('ip.zslf');
  14. // $newUrl = config('ip.zslfip');
  15. // $url = str_replace($oldUrl, $newUrl, $url);
  16. $post = $data['post'];
  17. $header = $data['header'];
  18. $json = json_encode($post);
  19. $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',$json);
  20. $json = str_replace('"loginBindingParameters":[]','"loginBindingParameters":{}',$json);
  21. list($status, $result) = $this->post_helper($url,$json, $header, 40,'LFMY');
  22. if(! $status) return [false, $result];
  23. return [true, $result];
  24. }
  25. public function testdwyget($data){
  26. if(empty($data['url']) || empty($data['header'])) return [false,'API请求参数不能为空'];
  27. $url = $data['url'];
  28. // $oldUrl = config('ip.zslf');
  29. // $newUrl = config('ip.zslfip');
  30. // $url = str_replace($oldUrl, $newUrl, $url);
  31. $header = $data['header'];
  32. list($status,$result) = $this->get_helper($url,$header);
  33. if(! $status) return [false, $result];
  34. return [true, $result];
  35. }
  36. public function testdwyput($data){
  37. if(empty($data['url']) || empty($data['post']) || empty($data['header'])) return [false,'API请求参数不能为空'];
  38. $url = $data['url'];
  39. // $oldUrl = config('ip.zslf');
  40. // $newUrl = config('ip.zslfip');
  41. // $url = str_replace($oldUrl, $newUrl, $url);
  42. $post = $data['post'];
  43. $header = $data['header'];
  44. $json = json_encode($post);
  45. $json = str_replace('"workflowSearchBean":{}','"workflowSearchBean":[]',json_encode($post));
  46. $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',json_encode($post));
  47. list($status, $result) = $this->put_helper($url,$json, $header,40);
  48. if(! $status) return [false, $result];
  49. return [true, $result];
  50. }
  51. //-----------------------------------朗峰u8-----
  52. public function getToken($common_array){
  53. list($status, $msg) = $this->SetU8($common_array);
  54. if(! $status) return [false , $msg];
  55. $host = $msg;
  56. $key = "lf_u8_long_token_demo_" . $common_array['site'] . '_' . $common_array['database'];
  57. if(! Cache::has($key)){
  58. $url = $host . "/api/System/GetToken";
  59. $date = date("Y-m-d");
  60. $json = [
  61. "U8DbName"=> $common_array['database'],
  62. "sUserId"=> "demo",
  63. "sPassword"=> "DEMO",
  64. "LoginDateTime"=> $date,
  65. "bPersist"=> true
  66. ];
  67. $header = ['Content-Type:application/json'];
  68. list($status, $result) = $this->post_helper($url,json_encode($json), $header, 30, $common_array['title'] . "获取token");
  69. if(! $status) return [false, $result];
  70. if(! isset($result['code'])) return [false, '获取用友登录信息失败,请重新操作'];
  71. if($result['code'] != 0) return [false, $result['msg']];
  72. $token = $result['data']['Token'] ?? "";
  73. Cache::forever($key, $token);
  74. }else{
  75. $token = Cache::get($key);
  76. }
  77. return [true, [$host, $token]];
  78. }
  79. public function salesOrderGet($data, $common_array){
  80. list($status, $msg) = $this->getToken($common_array);
  81. if(! $status) return [false, $msg];
  82. list($host, $token) = $msg;
  83. $today = (new \DateTime())->setTime(0, 0, 0)->format('Y-m-d H:i:s') . '.000';
  84. $fourDaysAgo = (new \DateTime())->sub(new \DateInterval('P4D'))->setTime(0, 0, 0)->format('Y-m-d H:i:s') . '.000';
  85. $page = $data['pageSize'] ?? 10;
  86. $version = $data['version'] ?? 0;
  87. $start_time = $data['start_time'] ?? $today;
  88. $end_time = $data['end_time'] ?? $today;
  89. $order_number = $data['order_number'] ?? '';
  90. $header = ["Authorization: {$token}",'Content-Type:application/json'];
  91. $url = $host . "/api/System/SqlQuery";
  92. $json = [
  93. 'customSQLFileName' => "U8SQL",
  94. 'customSQLPath' => 'U8API/SO_SOMain/Get',
  95. 'paramObj' => [
  96. "@pagesize" => $page,
  97. "@where" => "AND m.dDate >= '$start_time' AND m.dDate <= '$end_time'",
  98. "@code" => $order_number,
  99. "@version" => $version,
  100. ]
  101. ];
  102. $json = json_encode($json);
  103. list($status, $result) = $this->post_helper($url,$json, $header, 60, $common_array['title'] . '获取销售订单');
  104. if(! $status) return [false, $result];
  105. if(! isset($result['code'])) return [false, '拉取销售订单失败,请重新拉取'];
  106. if($result['code'] != 0) return [false, $result['msg']];
  107. if(empty($result['data'])) return [true, []];
  108. $r_data = $result['data'];
  109. $return = $this->returnOrders($common_array, $r_data, $msg);
  110. return [true, $return];
  111. }
  112. private function returnOrders($common_array, $r_data, $msg){
  113. $site = $common_array['site'];
  114. $title = $common_array['title'];
  115. $return = [];
  116. if($site == 'LFMY'){
  117. foreach ($r_data as $value){
  118. list($status, $detail) = $this->getSalesDetail($value, $msg, $title);
  119. if(! $status) return [false, $detail];
  120. $return_detail = [];
  121. $total_qty = $money = 0;
  122. foreach ($detail as $d_value){
  123. $return_detail[] = [
  124. 'item_no' => $d_value['irowno'],
  125. 'material_code' => $d_value['cinvcode'],
  126. 'brand_name' => $d_value['cdefine28'] ?? '',
  127. 'safe' => $d_value['cdefine29'] ?? '',
  128. 'decor' => $d_value['cdefine30'] ?? '',
  129. 'craft_type_code' => $d_value['cdefine31'] ?? '',
  130. 'decor_b' => $d_value['cdefine32'] ?? '',
  131. 'craft_type_code_b' => $d_value['cdefine33'] ?? '',
  132. 'unit' => $d_value['cinvm_unit'],
  133. 'price' => $d_value['itaxunitprice'] ?? 0,
  134. 'not_tax_price' => $d_value['itaxunitprice'] ?? 0,
  135. 'tax_price' => $d_value['itaxunitprice'] ?? 0,
  136. 'qty' => $d_value['iquantity'],
  137. 'money' => $d_value['isum'] ?? 0,
  138. 'tax_amount' => $d_value['isum'] ?? 0,
  139. 'total_tax_amount' => $d_value['isum'] ?? 0,
  140. 'tax_rate' => $d_value['itaxrate'] ?? 0,
  141. 'expected_delivery_date' => date('Y-m-d',strtotime($d_value['dpredate'])),
  142. 'remark' => $d_value['cmemo'] ?? '',
  143. ];
  144. $t = $d_value['isum'] ?? 0;
  145. $total_qty = bcadd($total_qty,$d_value['iquantity'],3);
  146. $money = bcadd($money,$t,3);
  147. }
  148. $return[] = [
  149. 'no' => $value['csocode'],
  150. 'order_date' => date("Y-m-d",strtotime($value['ddate'])),
  151. 'customer' => $value['ccuscode'] ?? '',
  152. 'salesman' => $value['cpersoncode'] ?? '',
  153. 'sale_department' => $value['cdepcode'] ?? '',
  154. 'total_qty' => $total_qty,
  155. 'total_money' => $money,
  156. 'remark' => $value['cmemo'] ?? '',
  157. 'version' => $value['version'],
  158. 'detail' => $return_detail,
  159. ];
  160. }
  161. }elseif ($site == 'HCLT'){
  162. foreach ($r_data as $value){
  163. list($status, $detail) = $this->getSalesDetail($value, $msg, $title);
  164. if(! $status) return [false, $detail];
  165. $return_detail = [];
  166. $total_qty = $money = 0;
  167. foreach ($detail as $d_value){
  168. $return_detail[] = [
  169. 'material_code' => $d_value['cinvcode'] ?? '',
  170. 'specs' => $d_value['cinvstd'] ?? '',
  171. 'unit' => $d_value['cinvm_unit'] ?? '',
  172. 'qty' => $d_value['iquantity'],
  173. 'not_tax_price' => $d_value['iunitprice'] ?? 0,
  174. 'tax_price' => $d_value['itaxunitprice'] ?? 0,
  175. 'not_tax_amount' => $d_value['imoney'] ?? 0,
  176. 'tax_amount' => $d_value['itax'] ?? 0,
  177. 'total_tax_amount' => $d_value['isum'] ?? 0,
  178. 'tax_rate' => $d_value['itaxrate'] ?? 0,
  179. 'expected_delivery_date' => date('Y-m-d',strtotime($d_value['dpredate'])),
  180. 'customer_brand' => $d_value['cfree1'] ?? '',
  181. 'color' => $d_value['cfree2'] ?? '',
  182. 'plan_no' => $d_value['cdefine22'] ?? '',
  183. 'contract_no' => $d_value['cdefine23'] ?? '',
  184. 'technical_require' => $d_value['cdefine28'] ?? '',
  185. 'quality_require' => $d_value['cdefine29'] ?? '',
  186. 'package_require' => $d_value['cdefine30'] ?? '',
  187. 'shipping_mark' => $d_value['cdefine31'] ?? '',
  188. ];
  189. $t = $d_value['isum'] ?? 0;
  190. $total_qty = bcadd($total_qty,$d_value['iquantity'],3);
  191. $money = bcadd($money,$t,3);
  192. }
  193. $return[] = [
  194. 'no' => $value['csocode'],
  195. 'order_date' => date("Y-m-d",strtotime($value['ddate'])),
  196. 'customer' => $value['ccuscode'] ?? '',
  197. 'salesman' => $value['cpersoncode'] ?? '',
  198. 'sale_department' => $value['cdepcode'] ?? '',
  199. 'total_qty' => $total_qty,
  200. 'total_money' => $money,
  201. 'remark' => $value['cmemo'] ?? '',
  202. 'version' => $value['version'],
  203. 'detail' => $return_detail,
  204. ];
  205. }
  206. }elseif ($site == 'JLWM'){
  207. foreach ($r_data as $value){
  208. list($status, $detail) = $this->getSalesDetail($value, $msg, $title);
  209. if(! $status) return [false, $detail];
  210. $return_detail = [];
  211. $total_qty = $money = 0;
  212. foreach ($detail as $d_value){
  213. $return_detail[] = [
  214. 'material_code' => $d_value['cinvcode'] ?? '',
  215. 'contract_no' => $d_value['cdefine23'] ?? '',
  216. 'specs' => $d_value['cinvstd'] ?? '',
  217. 'unit' => $d_value['cinvm_unit'] ?? '',
  218. 'qty' => $d_value['iquantity'] ?? '',
  219. 'not_tax_price' => $d_value['iunitprice'] ?? 0,
  220. 'tax_price' => $d_value['itaxunitprice'] ?? 0,
  221. 'not_tax_amount' => $d_value['imoney'] ?? 0,
  222. 'tax_amount' => $d_value['itax'] ?? 0,
  223. 'total_tax_amount' => $d_value['isum'] ?? 0,
  224. 'tax_rate' => $d_value['itaxrate'] ?? 0,
  225. 'expected_delivery_date' => date('Y-m-d',strtotime($d_value['dpredate'])),
  226. 'customer_model' => $d_value['cfree4'] ?? '',
  227. 'length' => $d_value['cfree1'] ?? '',
  228. 'width' => $d_value['cfree2'] ?? '',
  229. 'thickness' => $d_value['cfree3'] ?? '',
  230. 'color_or_model' => $d_value['cdefine28'] ?? '',
  231. ];
  232. $t = $d_value['isum'] ?? 0;
  233. $total_qty = bcadd($total_qty,$d_value['iquantity'],3);
  234. $money = bcadd($money,$t,3);
  235. }
  236. $return[] = [
  237. 'no' => $value['csocode'],
  238. 'order_date' => date("Y-m-d",strtotime($value['ddate'])),
  239. 'customer' => $value['ccuscode'] ?? '',
  240. 'salesman' => $value['cpersoncode'] ?? '',
  241. 'sale_department' => $value['cdepcode'] ?? '',
  242. 'total_qty' => $total_qty,
  243. 'total_money' => $money,
  244. 'remark' => $value['cmemo'] ?? '',
  245. 'version' => $value['version'],
  246. 'detail' => $return_detail,
  247. ];
  248. }
  249. }
  250. return $return;
  251. }
  252. private function SetU8($common_array){
  253. // $api_host = env('API_HOST');
  254. // if(empty($api_host)) return [false, '用友对外域名不存在'];
  255. // $api_port = env('API_PORT');
  256. // if(empty($api_port)) return [false, '用友对外域名端口不存在'];
  257. $api_host = $common_array['api_host'];
  258. $api_port = $common_array['api_port'];
  259. //映射ip是否通畅
  260. $bool = $this->isDomainAvailable($api_host);
  261. if(! $bool) return [false, '用友对外域名不可达'];
  262. $host = $api_host . ":" . $api_port;
  263. return [true, $host];
  264. }
  265. private function getSalesDetail($sale_order, $msg, $title){
  266. list($host, $token) = $msg;
  267. $header = ["Authorization: {$token}",'Content-Type:application/json'];;
  268. $url = $host . "/api/System/SqlQuery2";
  269. $json = [
  270. "customSQLFileName"=> "U8SQL",
  271. "customSQLPath"=> "U8API/SO_SOMain/GetWithDetail",
  272. "paramObj"=> [
  273. "@code"=> $sale_order["csocode"]
  274. ]
  275. ];
  276. list($status, $result) = $this->post_helper($url, json_encode($json), $header, 30, $title . '获取销售订单详情');
  277. if(! $status) return [false, $result];
  278. if(! isset($result['code'])) return [false, '拉取销售订单详情失败,请重新拉取'];
  279. if($result['code'] != 0) return [false, $result['msg']];
  280. return [true, $result['data']['DataTable1']];
  281. }
  282. public function materialAddU8($data,$common_array){
  283. list($status, $msg) = $this->getToken($common_array);
  284. if(! $status) return [false, $msg];
  285. list($host, $token) = $msg;
  286. $title = $common_array['title'];
  287. if(empty($data['iHead'])) return [false, '领料单表头信息不能为空'];
  288. if(empty($data['iBody'])) return [false, '领料单表体信息不能为空'];
  289. $header = ["Authorization: {$token}",'Content-Type:application/json'];
  290. $url = $host . "/api/MaterialRequest/Add";
  291. $json[] = [
  292. "Inum" => "MaterialRequest",
  293. "data" =>[
  294. "iHead" => $data['iHead'],
  295. "iBody" => $data['iBody'],
  296. ],
  297. ];
  298. $json_str = json_encode($json);
  299. list($status, $result) = $this->post_helper($url, $json_str, $header, 60, $title . '生成领料申请单');
  300. if(! $status) return [false, $result];
  301. if(! isset($result['code'])) return [false, '生成领料申请单失败,请重新操作'];
  302. if($result['code'] != 0) return [false, $result['msg']];
  303. return [true, $result['data']];
  304. }
  305. public function productInAddU8($data,$common_array){
  306. list($status, $msg) = $this->getToken($common_array);
  307. if(! $status) return [false, $msg];
  308. list($host, $token) = $msg;
  309. $title = $common_array['title'];
  310. if(empty($data['iHead'])) return [false, '产成品入库单单表头信息不能为空'];
  311. if(empty($data['iBody'])) return [false, '产成品入库单表体信息不能为空'];
  312. $header = ["Authorization: {$token}",'Content-Type:application/json'];;
  313. $url = $host . "/api/ProductIn/Add";
  314. $json[] = [
  315. "Inum" => "ProductIn",
  316. "data" =>[
  317. "iHead" => $data['iHead'],
  318. "iBody" => $data['iBody'],
  319. ],
  320. ];
  321. list($status, $result) = $this->post_helper($url, json_encode($json), $header, 60, $title . '生成产成品入库单');
  322. if(! $status) return [false, $result];
  323. if(! isset($result['code'])) return [false, '生成产成品入库单失败,请重新操作'];
  324. if($result['code'] != 0) return [false, $result['msg']];
  325. return [true, $result['data']];
  326. }
  327. public function dispatchAddU8($data,$common_array){
  328. list($status, $msg) = $this->getToken($common_array);
  329. if(! $status) return [false, $msg];
  330. list($host, $token) = $msg;
  331. $title = $common_array['title'];
  332. if(empty($data['iHead'])) return [false, '发货单单表头信息不能为空'];
  333. if(empty($data['iBody'])) return [false, '发货单表体信息不能为空'];
  334. foreach ($data['iBody'] as $key => $value){
  335. $data['iBody'][$key] = $this->fillYonyouDispatchDetail($value);
  336. }
  337. $header = ["Authorization: {$token}",'Content-Type:application/json'];;
  338. $url = $host . "/api/Dispatch/Add";
  339. $json[] = [
  340. "Inum" => "DispatchList",
  341. "data" =>[
  342. "iHead" => $data['iHead'],
  343. "iBody" => $data['iBody'],
  344. ]
  345. ];
  346. list($status, $result) = $this->post_helper($url, json_encode($json), $header, 60, $title . '生成发货单');
  347. if(! $status) return [false, $result];
  348. if(! isset($result['code'])) return [false, '生成发货单失败,请重新操作'];
  349. if($result['code'] != 0) return [false, $result['msg']];
  350. return [true, $result['data']];
  351. }
  352. public function recordList($data){
  353. $model = RecordTable::where('del_time',0)
  354. ->select('msg','data','type','crt_time','return_data')
  355. ->orderBy('id','desc');
  356. if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) $model->whereBetween('crt_time',[$data['crt_time'][0],$data['crt_time'][1]]);
  357. if(! empty($data['type'])) $model->where('type',$data['type']);
  358. if(! empty($data['site'])) $model->where('site',$data['site']);
  359. $list = $this->limit($model,'',$data);
  360. $list = $this->fillData($list);
  361. return [true,$list];
  362. }
  363. private function fillData($data){
  364. if(empty($data['data'])) return $data;
  365. foreach ($data['data'] as $key => $value){
  366. $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
  367. $data['data'][$key]['type_name'] = RecordTable::$type[$value['type']] ?? '';
  368. }
  369. return $data;
  370. }
  371. /**
  372. * 补全用友发货单子表金额字段(含换算率)
  373. * 输入示例:
  374. * [
  375. * 'iQuantity' => 1, // 输入单位数量
  376. * 'iunitprice' => 10, // 无税单价(按主计量单位)
  377. * 'iTaxRate' => 0, // 税率
  378. * 'iInvExchRate' => 12 // 换算率(1箱=12个)
  379. * ]
  380. */
  381. function fillYonyouDispatchDetail(array $item)
  382. {
  383. $qty = floatval($item['iQuantity']);
  384. $price = floatval($item['iunitprice']);
  385. $rate = floatval($item['iTaxRate']);
  386. $exchRate = floatval($item['iInvExchRate']);
  387. // 实际参与金额计算的基本数量(用友内部用这个)
  388. $qtyBase = $qty * $exchRate;
  389. // 税率
  390. $taxRate = $rate / 100;
  391. // 原币(人民币)
  392. $imoney = round($qtyBase * $price, 2);
  393. $itax = round($imoney * $taxRate, 2);
  394. $iSum = round($imoney + $itax, 2);
  395. $itaxunitprice = round($price * (1 + $taxRate), 6);
  396. // 本币 = 原币
  397. return array_merge($item, [
  398. 'imoney' => $imoney,
  399. 'itax' => $itax,
  400. 'iSum' => $iSum,
  401. 'itaxunitprice' => $itaxunitprice,
  402. 'idiscount' => 0,
  403. 'inatunitprice' => $price,
  404. 'inatmoney' => $imoney,
  405. 'inattax' => $itax,
  406. 'inatsum' => $iSum,
  407. 'inatdiscount' => 0,
  408. ]);
  409. }
  410. //-----------------------------------朗峰u8-----
  411. public function post_helper($url, $data, $header = [], $timeout = 20, $title = ""){
  412. Log::channel('apiLog')->info($title . 'POST', ["api" => $url , "param" => json_decode($data,true) ,"header" => $header]);
  413. $ch = curl_init();
  414. curl_setopt($ch, CURLOPT_URL, $url);
  415. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  416. curl_setopt($ch, CURLOPT_ENCODING, '');
  417. curl_setopt($ch, CURLOPT_POST, 1);
  418. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  419. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  420. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  421. curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  422. if(!is_null($data)) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  423. $r = curl_exec($ch);
  424. if ($r === false) {
  425. // 获取错误号
  426. $errorNumber = curl_errno($ch);
  427. // 获取错误信息
  428. $errorMessage = curl_error($ch);
  429. $message = "cURL Error #{$errorNumber}: {$errorMessage}";
  430. Log::channel('apiLog')->info($title . 'POST结果', ["message" => $message ]);
  431. return [false, $message];
  432. }
  433. curl_close($ch);
  434. Log::channel('apiLog')->info($title . 'POST结果', ["message" => json_decode($r, true) ]);
  435. return [true, json_decode($r, true)];
  436. }
  437. public function get_helper($url,$header=[],$timeout = 20){
  438. $ch = curl_init();
  439. curl_setopt_array($ch, array(
  440. CURLOPT_URL => $url,
  441. CURLOPT_RETURNTRANSFER => true,
  442. CURLOPT_ENCODING => '',
  443. CURLOPT_MAXREDIRS => 10,
  444. CURLOPT_TIMEOUT => $timeout,
  445. CURLOPT_FOLLOWLOCATION => true,
  446. CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  447. CURLOPT_CUSTOMREQUEST => 'GET',
  448. CURLOPT_SSL_VERIFYPEER => false,
  449. CURLOPT_HTTPHEADER => $header,
  450. ));
  451. $r = curl_exec($ch);
  452. if ($r === false) {
  453. // 获取错误号
  454. $errorNumber = curl_errno($ch);
  455. // 获取错误信息
  456. $errorMessage = curl_error($ch);
  457. $message = "cURL Error #{$errorNumber}: {$errorMessage}";
  458. Log::channel('apiLog')->info('朗峰GET结果', ["message" => $message]);
  459. return [false, $message];
  460. }
  461. curl_close($ch);
  462. Log::channel('apiLog')->info('朗峰GET结果', ["message" => json_decode($r, true)]);
  463. return [true, json_decode($r, true)];
  464. }
  465. public function put_helper($url, $data, $header = [], $timeout = 20){
  466. Log::channel('apiLog')->info('朗峰PUT', ["api" => $url , "param" => $data ,"header" => $header]);
  467. $ch = curl_init();
  468. curl_setopt($ch, CURLOPT_URL, $url);
  469. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  470. curl_setopt($ch, CURLOPT_ENCODING, '');
  471. curl_setopt($ch, CURLOPT_POST, 1);
  472. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
  473. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  474. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  475. curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  476. if(!is_null($data)) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  477. $r = curl_exec($ch);
  478. if ($r === false) {
  479. // 获取错误号
  480. $errorNumber = curl_errno($ch);
  481. // 获取错误信息
  482. $errorMessage = curl_error($ch);
  483. $message = "cURL Error #{$errorNumber}: {$errorMessage}";
  484. Log::channel('apiLog')->info('朗峰PUT结果', ["message" => $message]);
  485. return [false, $message];
  486. }
  487. curl_close($ch);
  488. Log::channel('apiLog')->info('朗峰PUT结果', ["message" => json_decode($r, true)]);
  489. return [true, json_decode($r, true)];
  490. }
  491. }