'store_001', 'store_name' => '花店总店', 'store_address' => '北京市朝阳区建国路88号', 'store_longitude' => 116.397128, 'store_latitude' => 39.916527, 'store_phone' => '010-12345678', 'service_type' => 1, // 同城配送 ]; $result = IntraCityExpress::createStore($storeData); if ($result['errcode'] === 0) { echo "门店创建成功\n"; } else { echo "门店创建失败:" . $result['errmsg'] . "\n"; } // 2. 查询门店 $storeInfo = IntraCityExpress::getStore('store_001'); if ($storeInfo['errcode'] === 0) { echo "门店信息:" . json_encode($storeInfo, JSON_UNESCAPED_UNICODE) . "\n"; } // 3. 更新门店 $updateData = [ 'out_store_id' => 'store_001', 'store_name' => '花店总店(已更新)', 'store_address' => '北京市朝阳区建国路88号', 'store_longitude' => 116.397128, 'store_latitude' => 39.916527, 'store_phone' => '010-87654321', ]; $updateResult = IntraCityExpress::updateStore($updateData); if ($updateResult['errcode'] === 0) { echo "门店更新成功\n"; } // 4. 获取门店列表 $storeList = IntraCityExpress::getStoreList(0, 10); if ($storeList['errcode'] === 0) { echo "门店列表:" . json_encode($storeList, JSON_UNESCAPED_UNICODE) . "\n"; } } /** * 订单管理示例 */ public static function orderManagementExample() { // 1. 创建订单 $orderData = [ 'out_store_id' => 'store_001', 'out_order_id' => 'order_' . time(), 'delivery_service_code' => 'DADA', // 达达配送 'to_user_name' => '张三', 'to_user_phone' => '13800138000', 'to_user_address' => '北京市海淀区中关村大街1号', 'to_user_longitude' => 116.307852, 'to_user_latitude' => 39.984154, 'goods_value' => 10000, // 商品价值(分) 'goods_weight' => 1000, // 商品重量(克) 'goods_pickup_info' => '鲜花一束', 'goods_delivery_info' => '鲜花一束', 'goods_type' => IntraCityExpress::GOODS_TYPE_FLOWER, // 鲜花 'expected_pickup_time' => date('Y-m-d H:i:s', time() + 1800), // 30分钟后取货 'expected_delivery_time' => date('Y-m-d H:i:s', time() + 7200), // 2小时后送达 ]; $result = IntraCityExpress::createOrder($orderData); if ($result['errcode'] === 0) { echo "订单创建成功,微信订单号:" . $result['wx_order_id'] . "\n"; // 保存微信订单号用于后续操作 $wxOrderId = $result['wx_order_id']; // 2. 查询订单 $orderInfo = IntraCityExpress::getOrder($wxOrderId); if ($orderInfo['errcode'] === 0) { echo "订单信息:" . json_encode($orderInfo, JSON_UNESCAPED_UNICODE) . "\n"; } // 3. 模拟订单状态变化(测试用) $mockResult = IntraCityExpress::mockNotify( IntraCityExpress::ORDER_STATUS_ACCEPTED, // 配送员接单 $wxOrderId ); if ($mockResult['errcode'] === 0) { echo "模拟回调成功\n"; } // 4. 取消订单(如果需要) // $cancelResult = IntraCityExpress::cancelOrder($wxOrderId); // if ($cancelResult['errcode'] === 0) { // echo "订单取消成功\n"; // } } else { echo "订单创建失败:" . $result['errmsg'] . "\n"; } // 5. 获取订单列表 $orderList = IntraCityExpress::getOrderList(0, 10); if ($orderList['errcode'] === 0) { echo "订单列表:" . json_encode($orderList, JSON_UNESCAPED_UNICODE) . "\n"; } } /** * 运力管理示例 */ public static function deliveryManagementExample() { // 1. 获取运力列表 $deliveryList = IntraCityExpress::getDeliveryList(); if ($deliveryList['errcode'] === 0) { echo "运力列表:" . json_encode($deliveryList, JSON_UNESCAPED_UNICODE) . "\n"; // 2. 获取运力服务范围 if (!empty($deliveryList['delivery_list'])) { $deliveryId = $deliveryList['delivery_list'][0]['delivery_id']; $serviceArea = IntraCityExpress::getDeliveryServiceArea($deliveryId); if ($serviceArea['errcode'] === 0) { echo "运力服务范围:" . json_encode($serviceArea, JSON_UNESCAPED_UNICODE) . "\n"; } } } } /** * 回调处理示例 */ public static function callbackExample() { // 模拟接收到的回调数据 $callbackData = [ 'appid' => 'wx539e0b4872f19621', 'order_status' => IntraCityExpress::ORDER_STATUS_COMPLETED, 'service_trans_id' => 'DADA', 'status_change_time' => time(), 'store_order_id' => 'order_123456', 'timestamp' => time(), 'wx_order_id' => '4018734875633256960', 'wx_store_id' => '4000000000000042001', 'sign' => 'a85489d9444bdd382e0de0ddca67a8ee' // 实际签名值 ]; // 安全token(需要在小程序管理后台设置) $token = 'abcdefghi'; // 处理回调 $result = IntraCityExpress::handleOrderCallback($callbackData, $token); echo "回调处理结果:" . json_encode($result, JSON_UNESCAPED_UNICODE) . "\n"; } /** * 完整业务流程示例 */ public static function completeWorkflowExample() { echo "=== 微信小程序同城配送完整业务流程示例 ===\n\n"; // 1. 门店管理 echo "1. 门店管理\n"; self::storeManagementExample(); echo "\n"; // 2. 运力管理 echo "2. 运力管理\n"; self::deliveryManagementExample(); echo "\n"; // 3. 订单管理 echo "3. 订单管理\n"; self::orderManagementExample(); echo "\n"; // 4. 回调处理 echo "4. 回调处理\n"; self::callbackExample(); echo "\n"; echo "=== 业务流程示例完成 ===\n"; } /** * 错误处理示例 */ public static function errorHandlingExample() { echo "=== 错误处理示例 ===\n"; // 1. 处理常见错误码 $errorCodes = [ 934000 => '其他逻辑错误', 934001 => '请求参数有误', 934002 => '订单已存在,且订单在处理中', 934003 => '运力ID错误', 934005 => '运力预创建订单错误', 934006 => '有在途订单,暂不能退款', 934007 => '不是在途订单', 934008 => '门店ID和APPID不匹配', 934009 => '不支持该门店所在城市', 934010 => '重复创建门店', 934011 => '请求签名错误', 934012 => 'appid和access_token不匹配', 934013 => '门店余额不足无法下单', 934014 => '运力公司返回了非法金额', 934015 => '余额扣减失败', 934016 => '订单不存在', 934017 => '订单处在不能被取消的状态', 934018 => '订单已取消,请勿重复操作', 934019 => '超出运力支持的配送范围', 934020 => '商品超重', 934021 => '门店不存在', 934022 => '账号类型不可以为个人账号', 934023 => '小程序类型必须为普通小程序', 934999 => '内部系统错误', ]; foreach ($errorCodes as $code => $message) { echo "错误码 {$code}: {$message}\n"; } // 2. 实际错误处理示例 try { // 尝试创建无效订单 $invalidOrderData = [ 'out_store_id' => 'invalid_store', 'out_order_id' => 'order_' . time(), 'delivery_service_code' => 'INVALID_DELIVERY', 'to_user_name' => '测试用户', 'to_user_phone' => '13800138000', 'to_user_address' => '测试地址', 'to_user_longitude' => 116.397128, 'to_user_latitude' => 39.916527, 'goods_value' => 10000, 'goods_weight' => 1000, 'goods_pickup_info' => '测试商品', 'goods_delivery_info' => '测试商品', ]; $result = IntraCityExpress::createOrder($invalidOrderData); if ($result['errcode'] !== 0) { echo "订单创建失败,错误码:{$result['errcode']},错误信息:{$result['errmsg']}\n"; // 根据错误码进行相应处理 switch ($result['errcode']) { case 934021: echo "门店不存在,请先创建门店\n"; break; case 934003: echo "运力ID错误,请检查运力配置\n"; break; case 934019: echo "超出配送范围,请选择其他配送方式\n"; break; default: echo "其他错误,请联系技术支持\n"; break; } } } catch (\Exception $e) { echo "异常处理:" . $e->getMessage() . "\n"; } } } // 使用示例(取消注释即可运行) // IntraCityExpressExample::completeWorkflowExample(); // IntraCityExpressExample::errorHandlingExample();