TestController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Service\DwyService;
  4. use App\Service\LabelDealService;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Log;
  7. class TestController extends BaseController
  8. {
  9. private $ivBytes = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F";
  10. public function deviceCallback(Request $request){
  11. $sign = $this->makeSign(['appid'=>'ehiV145x0sq2pIdR'],'zcJOeS7Ty1Zk5sEYQ36ia9UbDxWgGRlm');
  12. // var_dump($sign);
  13. var_dump($sign);die;
  14. }
  15. function makeSign($params,$appkey,$sign_type=1){
  16. ksort($params);
  17. unset($params['sign']);
  18. $str = '';
  19. foreach($params as $key=>$val){
  20. if(is_array($val)){
  21. continue;
  22. }
  23. if($sign_type == 1 || !$sign_type){
  24. if(strlen($val) > 0){
  25. $str.= trim($val);
  26. }
  27. }else{
  28. if(strlen($val) > 0){
  29. $str.= trim($key).'='.trim($val);
  30. }
  31. }
  32. }
  33. $hash_hmac = hash_hmac('sha256', $str, $appkey, true);
  34. return urlencode(base64_encode($hash_hmac));
  35. }
  36. public function boxInsert(){
  37. $data = [
  38. 'out_order_no' => 'test123',
  39. 'ext_1' => '1',
  40. 'ext_2' => '2',
  41. 'ext_3' => '3',
  42. 'ext_4' => '4',
  43. 'ext_5' => '5',
  44. 'detail' => [
  45. [
  46. 'top_id' => '1',
  47. 'code' => '001',
  48. 'title' => '产品名称',
  49. 'ext_1' => '1',
  50. 'ext_2' => '2',
  51. 'ext_3' => '3',
  52. 'ext_4' => '4',
  53. 'ext_5' => '5',
  54. ],[
  55. 'top_id' => '2',
  56. 'code' => '002',
  57. 'title' => '产品名称1',
  58. 'ext_1' => '11',
  59. 'ext_2' => '22',
  60. 'ext_3' => '33',
  61. 'ext_4' => '44',
  62. 'ext_5' => '55',
  63. ],
  64. ],
  65. ];
  66. $service = BoxHookService::getInstance();
  67. list($status,$msg) = $service->boxInsert($data);
  68. var_dump($status);
  69. var_dump($msg);
  70. }
  71. public function aa(){
  72. //处理数据
  73. $data = '{"param":{"key":"DV00001","lead_bind":{"device_code":"DV00001","material_list":[{"product_code":"BC020202000999","fake_qty":"5","product_code_show":"信息部测试1800香杉木","order_item_id":"599057977894375424","order_item_id_show":"SO202407110062","material_code":"40010101000999","material_code_show":"E0批零免漆(测试白标)","process_title":"挪威森林","process_title_two":null,"color":"测试花色01","color_two":null,"mat_material_a":{"mat_category_code_show":"免漆板1800香杉木","mat_category_code":"BC020202","cpdj_show":"尊贵型","cpdj":"cpdj01","grade_show":"E0","grade":"01"},"brand_qr_code_list":["K45SDTL4BGIT93MVEPM1","EK60TLDMP1G26WD2G38R","CS0OMSFOS8UB480KP7UY","ME9D9RFU69B79YLM6V9J","N8CPA3WOWGBPFH6M1VUV"],"order_no_list":"SO202407110062"},{"product_code":"BC020202000999","fake_qty":"5","product_code_show":"信息部测试1800香杉木","order_item_id":"599057977894375424","order_item_id_show":"SO202407110062","material_code":"40010501000999","material_code_show":"银盾抗菌圆标(测试白标)","process_title":"挪威森林","process_title_two":null,"color":"测试花色01","color_two":null,"mat_material_a":{"mat_category_code_show":"免漆板1800香杉木","mat_category_code":"BC020202","cpdj_show":"尊贵型","cpdj":"cpdj01","grade_show":"E0","grade":"01"},"brand_qr_code_list":["6A51SIUC74AJ8E2JECGP","8VP60YJ5D7C3DX9R93XY","UJ4R8XMJ49AKXQOSW376","8VP6VYJ0CFWRQ49SD3X8","1R6B8DOCUVN67DA2G6A2"],"order_no_list":"SO202407110062"}]},"lead_out":{"brand_out_stock_list":[{"in_out_type_code":"CK00004","in_out_type_code_show":"商标仓正常领标出库","send_box_code":"CK00011","send_box_code_show":"商标八号仓","device_code":"DV00001","get_brand_source_dk":"SALE_ORDER","abnormal_flag":false,"abnormal_date":"2024-08-26T16:53:29.109Z","brand_out_stock_dtl":[{"item_no":10,"brand_qr_code_list":"K45SDTL4BGIT93MVEPM1,EK60TLDMP1G26WD2G38R,CS0OMSFOS8UB480KP7UY,ME9D9RFU69B79YLM6V9J,N8CPA3WOWGBPFH6M1VUV","material_code":"40010101000999","restock_qty":0,"material_code_show":"E0批零免漆(测试白标)","unit_code":"ST","unit_code_show":"张","qty":"5","fake_qty":"5","make_qty":"5","bus_type_dk":"SALE_ORDER","bus_type_dk_show":"销售订单","bus_no":"599057977894375424","bus_no_show":"SO202407110062","mat_material_a":{"mat_category_code_show":"免漆板1800香杉木","mat_category_code":"BC020202","cpdj_show":"尊贵型","cpdj":"cpdj01","grade_show":"E0","grade":"01"}}]},{"in_out_type_code":"CK00004","in_out_type_code_show":"商标仓正常领标出库","send_box_code":"CK00018","send_box_code_show":"商标十五号仓","device_code":"DV00001","get_brand_source_dk":"SALE_ORDER","abnormal_flag":false,"abnormal_date":"2024-08-26T16:53:29.109Z","brand_out_stock_dtl":[{"item_no":10,"brand_qr_code_list":"6A51SIUC74AJ8E2JECGP,8VP60YJ5D7C3DX9R93XY,UJ4R8XMJ49AKXQOSW376,8VP6VYJ0CFWRQ49SD3X8,1R6B8DOCUVN67DA2G6A2","material_code":"40010501000999","restock_qty":0,"material_code_show":"银盾抗菌圆标(测试白标)","unit_code":"ST","unit_code_show":"张","qty":"5","fake_qty":"5","make_qty":"5","bus_type_dk":"SALE_ORDER","bus_type_dk_show":"销售订单","bus_no":"599057977894375424","bus_no_show":"SO202407110062","mat_material_a":{"mat_category_code_show":"免漆板1800香杉木","mat_category_code":"BC020202","cpdj_show":"尊贵型","cpdj":"cpdj01","grade_show":"E0","grade":"01"}}]}]}}} ';
  74. $data = json_decode($data,true);
  75. $data = $data['param'];
  76. // $data = $this->data;
  77. $dv = $data['key'];
  78. $return = $box_list = [];
  79. LabelDealService::getInstance()->clearData($data,$return,$box_list);
  80. Log::channel('apiLog')->info('测试--出库(清洗数据)', ["param" => $return]);
  81. //调用外部方法
  82. list($lead_bind,$lead_out) = DwyService::getInstance()->setBoxData1('Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1OTAwNDY0ODg5NDAzODQyNTYiLCJhdXRoIjoiUk9MRV9PVVRFUl9VU0VSLFJPTEVfSU5URVJGQUNFLFJPTEVfU0VORF9CUkFORF9TVVBQTElFUixST0xFX1VTRV9CUkFORF9TVVBQTElFUixST0xFX0JSQU5EX1NVUFBMSUVSLFJPTEVfSU5ORVJfVVNFUiIsInRva2VuSWQiOiIzIiwiZXhwIjoxNzI3MjUzMjE0fQ.ucMycX2b2Nzcc4tF0ZPcYDW8QOmqX942MLdmcd3PLa5O4DAseRHkAtyiPxzGf8cIj2qWppGcjusP5c4f0RyDig',$dv,$return,$box_list,$data);
  83. die;
  84. //删除限制
  85. DwyService::getInstance()->delLimitForBoxOut($lead_bind);
  86. //调用保存接口 cs todo
  87. LabelDealService::getInstance()->boxOut1($lead_bind,$lead_out,$this->header,$this->id);
  88. }
  89. public function encryption($jsonToString, $saltKey, $aesEncRequestKey) {
  90. $this->aesKey = $aesEncRequestKey;
  91. $this->saltIVKey = $saltKey;
  92. return $this->encryptJsonData($jsonToString);
  93. }
  94. public function decryption($encryptedResponseData, $saltKey, $aesEncRequestKey) {
  95. $this->aesKey = $aesEncRequestKey;
  96. $this->saltIVKey = $saltKey;
  97. return $this->decryptResponseData($encryptedResponseData);
  98. }
  99. private function encryptJsonData($jsonToString) {
  100. $saltBytes = $this->saltIVKey;
  101. $secretKey = $this->generateSecretKey($this->aesKey, $saltBytes);
  102. $cipher = "AES-256-CBC";
  103. $encryptedTextBytes = openssl_encrypt($jsonToString, $cipher, $secretKey, OPENSSL_RAW_DATA, $this->ivBytes);
  104. return $this->byteToHex($encryptedTextBytes);
  105. }
  106. private function decryptResponseData($encryptedResponseData) {
  107. $saltBytes = $this->saltIVKey;
  108. $encryptedTextBytes = $this->hex2ByteArray($encryptedResponseData);
  109. $secretKey = $this->generateSecretKey($this->aesKey, $saltBytes);
  110. $cipher = "AES-256-CBC";
  111. $decryptedTextBytes = openssl_decrypt($encryptedTextBytes, $cipher, $secretKey, OPENSSL_RAW_DATA, $this->ivBytes);
  112. return $decryptedTextBytes;
  113. }
  114. private function generateSecretKey($aesKey, $saltBytes) {
  115. return hash_pbkdf2("sha1", $aesKey, $saltBytes, 65536, 32, true);
  116. }
  117. private function byteToHex($byData) {
  118. return strtoupper(bin2hex($byData));
  119. }
  120. private function hex2ByteArray($sHexData) {
  121. return hex2bin($sHexData);
  122. }
  123. //跳板------------------------------------------
  124. public function testdwy(Request $request){
  125. $data = $request->all();
  126. $url = $data['url'];
  127. $post = $data['post'];
  128. $header = $data['header'];
  129. if(empty($post)){
  130. $json = json_encode((object)$post);
  131. }else{
  132. $json = json_encode($post);
  133. }
  134. // $json = str_replace('"workflowSearchBean":{}','"workflowSearchBean":[]',json_encode($post));
  135. $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',$json);
  136. $json = str_replace('"loginBindingParameters":[]','"loginBindingParameters":{}',$json);
  137. Log::channel('apiDwy')->info('POST入参:', ["api" => $url , "param" => $json ,"header" => $header]);
  138. $curl = curl_init();
  139. curl_setopt_array($curl, array(
  140. CURLOPT_URL => $url,
  141. CURLOPT_RETURNTRANSFER => true,
  142. CURLOPT_ENCODING => '',
  143. CURLOPT_MAXREDIRS => 10,
  144. CURLOPT_TIMEOUT => 0,
  145. CURLOPT_FOLLOWLOCATION => true,
  146. CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  147. CURLOPT_CUSTOMREQUEST => 'POST',
  148. CURLOPT_POSTFIELDS => $json,
  149. CURLOPT_HTTPHEADER => $header,
  150. CURLOPT_SSL_VERIFYPEER =>false,
  151. ));
  152. $response = curl_exec($curl);
  153. if ($response === false) {
  154. // 获取错误号
  155. $errorNumber = curl_errno($curl);
  156. // 获取错误信息
  157. $errorMessage = curl_error($curl);
  158. $message = "cURL Error #{$errorNumber}: {$errorMessage}";
  159. Log::channel('apiDwy')->info('POST结果:', ["message" => $message]);
  160. // return [false, "cURL Error #{$errorNumber}: {$errorMessage}"];
  161. }
  162. curl_close($curl);
  163. $return = json_decode($response,true);
  164. Log::channel('apiDwy')->info('POST结果:', ["message" => $return]);
  165. return $this->json_return(200,'', $return);
  166. }
  167. public function testdwyget(Request $request){
  168. $data = $request->all();
  169. $url = $data['url'];
  170. $str = "api/module-data/production_orders/production_orders/diy/production_manage";
  171. if (strpos($data['url'], $str) !== false) $url = "https://clouddevice.qingyaokeji.com/api/newsczt";
  172. $str = "api/module-data/production_orders/production_orders/diy/device";
  173. if (strpos($data['url'], $str) !== false) $url = "https://clouddevice.qingyaokeji.com/api/newdjg";
  174. $header = $data['header'];
  175. $curl = curl_init();
  176. curl_setopt_array($curl, array(
  177. CURLOPT_URL => $url,
  178. CURLOPT_RETURNTRANSFER => true,
  179. CURLOPT_ENCODING => '',
  180. CURLOPT_MAXREDIRS => 10,
  181. CURLOPT_TIMEOUT => 0,
  182. CURLOPT_FOLLOWLOCATION => true,
  183. CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  184. CURLOPT_CUSTOMREQUEST => 'GET',
  185. CURLOPT_HTTPHEADER => $header,
  186. ));
  187. $response = curl_exec($curl);
  188. curl_close($curl);
  189. return $this->json_return(200,'',json_decode($response,true));
  190. }
  191. public function testdwyput(Request $request){
  192. $data = $request->all();
  193. $url = $data['url'];
  194. $post = $data['post'];
  195. $header = $data['header'];
  196. $json = str_replace('"workflowSearchBean":{}','"workflowSearchBean":[]',json_encode($post));
  197. $json = str_replace('"workflowSearchBean":[]','"workflowSearchBean":{}',json_encode($post));
  198. Log::channel('apiDwy')->info('PUT入参:', ["api" => $url , "param" => $json ,"header" => $header]);
  199. $curl = curl_init();
  200. curl_setopt_array($curl, array(
  201. CURLOPT_URL => $url,
  202. CURLOPT_RETURNTRANSFER => true,
  203. CURLOPT_ENCODING => '',
  204. CURLOPT_MAXREDIRS => 10,
  205. CURLOPT_TIMEOUT => 0,
  206. CURLOPT_FOLLOWLOCATION => true,
  207. CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  208. CURLOPT_CUSTOMREQUEST => 'PUT',
  209. CURLOPT_POSTFIELDS => $json,
  210. CURLOPT_HTTPHEADER => $header,
  211. ));
  212. $response = curl_exec($curl);
  213. if ($response === false) {
  214. // 获取错误号
  215. $errorNumber = curl_errno($curl);
  216. // 获取错误信息
  217. $errorMessage = curl_error($curl);
  218. $message = "cURL Error #{$errorNumber}: {$errorMessage}";
  219. Log::channel('apiDwy')->info('PUT结果:', ["message" => $message]);
  220. // return [false, "cURL Error #{$errorNumber}: {$errorMessage}"];
  221. }
  222. curl_close($curl);
  223. $return = json_decode($response,true);
  224. Log::channel('apiDwy')->info('PUT结果:', ["message" => $return]);
  225. return $this->json_return(200,'', $return);
  226. }
  227. public function testdwydel(Request $request){
  228. $data = $request->all();
  229. $url = $data['url'];
  230. $header = $data['header'];
  231. $curl = curl_init();
  232. curl_setopt_array($curl, array(
  233. CURLOPT_URL => $url,
  234. CURLOPT_RETURNTRANSFER => true,
  235. CURLOPT_ENCODING => '',
  236. CURLOPT_MAXREDIRS => 10,
  237. CURLOPT_TIMEOUT => 0,
  238. CURLOPT_FOLLOWLOCATION => true,
  239. CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  240. CURLOPT_CUSTOMREQUEST => 'DELETE',
  241. CURLOPT_HTTPHEADER => $header,
  242. ));
  243. $response = curl_exec($curl);
  244. curl_close($curl);
  245. return $this->json_return(200,'',json_decode($response,true));
  246. }
  247. //跳板------------------------------------------
  248. }