| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- <?php
- namespace common\components;
- /**
- * 微信小程序同城配送使用示例
- *
- * 本文件展示了如何使用 IntraCityExpress 类的各种功能
- * 包括门店管理、订单管理、运力管理等
- */
- class IntraCityExpressExample
- {
- /**
- * 门店管理示例
- */
- public static function storeManagementExample()
- {
- // 1. 创建门店
- $storeData = [
- 'out_store_id' => '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();
|