Demo.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. /**
  6. * 示例接口
  7. */
  8. class Demo extends Api
  9. {
  10. //如果$noNeedLogin为空表示所有接口都需要登录才能请求
  11. //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
  12. //如果接口已经设置无需登录,那也就无需鉴权了
  13. //
  14. // 无需登录的接口,*表示全部
  15. protected $noNeedLogin = ['*'];
  16. // 无需鉴权的接口,*表示全部
  17. protected $noNeedRight = ['test2'];
  18. /**
  19. * 营业日结数据上报接口
  20. */
  21. public function test($money = 100,$addtime)
  22. {
  23. // 设置一个公钥(key)和私钥(secret),公钥用于区分用户,私钥加密数据,不能公开
  24. $key = "44D1010BC0D8403D94AA35F014C0974D";
  25. $secret = "022BDF69C0A641008E5D70EB4E63BBCE";
  26. $mchId = 'BS202401243529022486';
  27. $store_id = 'b9f1b72b2cad493887cf';
  28. // 待发送的数据包
  29. $nowtime = $addtime;
  30. // $batchNo = $this->get_batch_no();
  31. $batchNo = date('YmdHis',$nowtime) . $mchId;
  32. $data = [
  33. 'batchNo' => $batchNo,
  34. 'mchId' => $mchId,
  35. 'batchDatetime' => date('Y-m-d H:i:s',$nowtime),
  36. 'totalCount' => '1',
  37. 'totalTurnover' => $money,
  38. 'totalActualAmount' => $money,
  39. 'dailyIncomeSummarys' => [
  40. [
  41. 'storeId' => $store_id,
  42. 'businessDate' => date('Y-m-d',$nowtime),
  43. 'storeStatus' => '1',
  44. 'turnover' => $money,
  45. 'actualAmount' => $money,
  46. ]/*,
  47. [
  48. 'storeId' => $store_id,
  49. 'businessDate' => '2021-10-30',
  50. 'storeStatus' => '1',
  51. 'turnover' => '-50.00',
  52. 'actualAmount' => '-50.00',
  53. ],
  54. [
  55. 'storeId' => $store_id,
  56. 'businessDate' => '2021-10-31',
  57. 'storeStatus' => '1',
  58. 'turnover' => '10855.50',
  59. 'actualAmount' => '9955.50',
  60. ],*/
  61. ],
  62. ];
  63. $data_json = json_encode($data,JSON_UNESCAPED_UNICODE);
  64. $time = $this->getMillisecond();
  65. $paramStr = $this->buildSignStr($data);
  66. $needSignStr = $paramStr . '&key=' . $secret . '&timestamp=' . $time;
  67. //dump($needSignStr);
  68. $signStr = base64_encode(hash_hmac('md5', $needSignStr, $secret,true));
  69. //dump($signStr);
  70. // echo 'needSignStr = [' . $needSignStr . ']' . ',sign=' .$signStr;
  71. $customHeader = array();
  72. $customHeader[] = 'Content-Type: application/json;charset=utf-8';
  73. $customHeader[] = 'appKey:' . $key ;
  74. $customHeader[] = 'timestamp:' . $time ;
  75. $customHeader[] = 'sign:' . $signStr ;
  76. $customHeader[] = 'verify:HmacMd5' ;
  77. echo $this->send_post('https://sandbox.mcisaas.com/api/dock/nouser/api/oms/order/daily/financial-stat', $data_json,$customHeader);
  78. }
  79. public function test2($money = 100,$addtime,$chepaihao = ''){
  80. // 设置一个公钥(key)和私钥(secret),公钥用于区分用户,私钥加密数据,不能公开
  81. $key = "44D1010BC0D8403D94AA35F014C0974D";
  82. $secret = "022BDF69C0A641008E5D70EB4E63BBCE";
  83. $mchId = 'BS202401243529022486';
  84. $store_id = 'b9f1b72b2cad493887cf';
  85. // 待发送的数据包
  86. $nowtime = $addtime;
  87. $batchNo = date('YmdHis',$nowtime) . $mchId;
  88. $data = [
  89. 'batchNo' => $batchNo,
  90. 'mchId' => $mchId,
  91. 'batchDatetime' => date('Y-m-d H:i:s',$nowtime),
  92. 'totalCount' => 1,
  93. 'totalTurnover' => $money,
  94. 'totalActualAmount' => $money,
  95. 'businessDate' => date('Y-m-d',$nowtime),
  96. 'orderDetails' => [
  97. [
  98. 'storeId' => $store_id,
  99. 'orderNo' => createUniqueNo('D'),
  100. // 'originalOrderNo' => '',
  101. 'completedAt' => date('Y-m-d H:i:s',$nowtime),
  102. 'orderType' => '00',
  103. 'turnover' => $money,
  104. 'actualAmount' => $money,
  105. 'tradeDetails' => [
  106. [
  107. 'tradeName' => $chepaihao,
  108. 'tradeCount' => $money,
  109. ]
  110. ]
  111. ]/*,
  112. [
  113. 'storeId' => '12506389',
  114. 'orderNo' => '20220981223312',
  115. // 'originalOrderNo' => '20220981223312',
  116. 'completedAt' => '2022-08-22 14:22:34',
  117. 'orderType' => '00',
  118. 'turnover' => 30,
  119. 'actualAmount' => 30,
  120. 'tradeDetails' => [
  121. [
  122. 'tradeName' => '鲁Q123456',
  123. 'tradeCount' => 100,
  124. ],
  125. ],
  126. ],
  127. [
  128. 'storeId' => '12506389',
  129. 'orderNo' => '20220981223312',
  130. // 'originalOrderNo' => '20220981223312',
  131. 'completedAt' => '2022-08-22 14:22:34',
  132. 'orderType' => '00',
  133. 'turnover' => 40,
  134. 'actualAmount' => 40,
  135. 'tradeDetails' => [
  136. [
  137. 'tradeName' => '鲁Q123456',
  138. 'tradeCount' => 100,
  139. ],
  140. ],
  141. ],*/
  142. ]
  143. ];
  144. $data_json = json_encode($data,JSON_UNESCAPED_UNICODE);
  145. $time = $this->getMillisecond();
  146. $paramStr = $this->buildSignStr($data);
  147. $needSignStr = $paramStr . '&key=' . $secret . '&timestamp=' . $time;
  148. $signStr = base64_encode(hash_hmac('md5', $needSignStr, $secret,true));
  149. //dump($signStr);
  150. // echo 'needSignStr = [' . $needSignStr . ']' . ',sign=' .$signStr;
  151. $customHeader = array();
  152. $customHeader[] = 'Content-Type: application/json;charset=utf-8';
  153. $customHeader[] = 'appKey:' . $key ;
  154. $customHeader[] = 'timestamp:' . $time ;
  155. $customHeader[] = 'sign:' . $signStr ;
  156. $customHeader[] = 'verify:HmacMd5' ;
  157. echo $this->send_post('https://sandbox.mcisaas.com/api/dock/nouser/api/oms/order/daily/order-details', $data_json,$customHeader);
  158. }
  159. private function buildSignStr($data) {
  160. $paramStr = '';
  161. $array = [];
  162. foreach ($data as $key => $value) {
  163. $array[] = $key;
  164. }
  165. sort($array);
  166. foreach ($array as $key) {
  167. $value = $data[$key];
  168. if ($key === 'sign' || is_null($value) || $value === '') {
  169. continue;
  170. }
  171. if(is_array($value)){
  172. $paramStr .= $key;
  173. $paramStr .= '=';
  174. $paramStr .= '[';
  175. $paramStr .= $this->buildArray($value);
  176. $paramStr .= ']';
  177. }else {
  178. $paramStr .= implode('=', [$key, $value]);
  179. }
  180. $paramStr .='&';
  181. }
  182. if($paramStr == ''){
  183. return '';
  184. }
  185. return substr($paramStr,0,strripos($paramStr,'&'));
  186. }
  187. private function buildArray($data){
  188. $paramStr = '';
  189. foreach($data as $item){
  190. $paramStr .= '{';
  191. foreach($item as $field => $val){
  192. if(is_array($val)){
  193. // dump( __LINE__ );
  194. $paramStr .= $field;
  195. $paramStr .= '=';
  196. $paramStr .= '[';
  197. $paramStr .= $this->buildArray($val);
  198. $paramStr .= '], ';
  199. }else{
  200. // dump( __LINE__ );
  201. $paramStr .= $field.'='.$val.', ';
  202. }
  203. }
  204. $paramStr = substr($paramStr,0,-2);
  205. $paramStr .= '}, ';
  206. }
  207. if($paramStr == ''){
  208. return '';
  209. }
  210. return substr($paramStr,0,strripos($paramStr,','));
  211. }
  212. private function buildobject($data){
  213. $paramStr = '';
  214. foreach($data as $field => $val){
  215. $paramStr .= $field.'='.$val.', ';
  216. }
  217. //$paramStr = substr($paramStr,0,-2);
  218. return substr($paramStr,0,strripos($paramStr,','));
  219. }
  220. private function send_post($url, $postdata,$header) {
  221. $rs = curl_post($url,$postdata,$header,900);
  222. return $rs;
  223. /* $options = array(
  224. 'http' => array(
  225. 'method' => 'POST',
  226. 'header' => $header,
  227. 'content' => $postdata,
  228. 'timeout' => 15 * 60 // 超时时间(单位:s)
  229. )
  230. );
  231. $context = stream_context_create($options);
  232. return file_get_contents($url, false, $context);*/
  233. }
  234. /**
  235. * 获取时间戳到毫秒
  236. * @return bool|string
  237. */
  238. private function getMillisecond(){
  239. list($msec, $sec) = explode(' ', microtime());
  240. $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
  241. return $msectimes = substr($msectime,0,13);
  242. }
  243. private function get_batch_no(){
  244. $batch_id = Db::name('dgt_batchid_log')->order('id desc')->value('batch_id');
  245. $batch_id += 1;
  246. if($batch_id > 999999){
  247. $batch_id = 1;
  248. }
  249. Db::name('dgt_batchid_log')->insertGetId(['batch_id'=>$batch_id]);
  250. $zero_arr = [
  251. 1 => '00000',
  252. 2 => '0000',
  253. 3 => '000',
  254. 4 => '00',
  255. 5 => '0',
  256. 6 => '',
  257. ];
  258. $xuliehao = $zero_arr[strlen($batch_id)].$batch_id;
  259. $mchId = 'BS202401243529022486';
  260. $batchNo = date('Ymd',time()) . $xuliehao . $mchId;
  261. return $batchNo;
  262. }
  263. }