getOrderList(); if (empty($orders)) { return; } // 处理待发货订单 foreach ($orders as $order) { $this->sendDelivery($order); } } catch (\Exception $e) { var_dump($e->getMessage()); \Think\Log::write("自动发货任务异常:" . $e->getMessage(), 'ERROR'); } } /** * 获取订单列表 */ private function getOrderList() { $url = self::WX_API_BASE . "wxa/sec/order/get_order_list?access_token=" . get_authorizer_access_tokens($this->merchant_id); $params = [ 'order_state' => 1, // 待发货 ]; $response = $this->curl_post($url, $params); $result = json_decode($response, true); if ($result['errcode'] == 0) { return $result['order_list']; } \Think\Log::write("获取订单列表失败:" . $response, 'ERROR'); return []; } /** * 发货处理 */ private function sendDelivery($order) { $url = self::WX_API_BASE . "wxa/sec/order/upload_shipping_info?access_token=" . get_authorizer_access_tokens($this->merchant_id); $params = [ 'order_key' => [ 'order_number_type' => 2, 'transaction_id' => $order['transaction_id'], ], 'logistics_type' => 2, 'delivery_mode' => 1, 'shipping_list' => [ [ 'item_desc' => empty($order['description']) ? '同城配送' : $order['description'] ] ], 'upload_time' => str_replace(' ', 'T', date('Y-m-d H:i:s.120+08:00')), 'payer' => [ 'openid' => $order['openid'] ] ]; $response = $this->curl_post($url, $params); $result = json_decode($response, true); if ($result['errcode'] != 0) { \Think\Log::write("订单{$order['transaction_id']}发货失败:" . $response, 'ERROR'); } } /** * POST请求方法 */ private function curl_post($url, $params = array()) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params, JSON_UNESCAPED_UNICODE)); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen(json_encode($params, JSON_UNESCAPED_UNICODE)) )); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_TIMEOUT, 30); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode != 200) { \Think\Log::write("HTTP请求失败,状态码: {$httpCode}, 响应: {$response}", 'ERROR'); } return $response; } }