# 微信小程序开发 [TOC] WeChatDeveloper 为微信小程序开发提供了全面的服务端支持,包括用户管理、数据加密、消息推送、二维码生成、内容安全等功能。 ## 功能模块 ### 核心功能 - [encryptedData解码](encryptedData解码.md) - 小程序数据加密解密 - [小程序模板消息](小程序模板消息.md) - 订阅消息和模板消息 - [微信小程序二维码](微信小程序二维码.md) - 小程序码和URL Scheme - [小程序数据统计](小程序数据统计.md) - 数据分析和统计 - [小程序地址位置](小程序地址位置.md) - 地址管理和位置服务 ### 高级功能 - [小程序插件管理](小程序插件管理.md) - 插件申请和管理 - 内容安全检测 - 图片、文本内容审核 - 物流助手 - 发货信息管理 - 直播功能 - 小程序直播接口 - OCR服务 - 身份证、银行卡识别 - 生物认证 - 指纹、面部识别 ## 快速开始 ### 基础配置 ```php <?php // 小程序配置 $config = [ 'appid' => 'your_mini_program_appid', 'appsecret' => 'your_mini_program_appsecret', 'cache_path' => '/path/to/cache' ]; // 创建实例 $mini = \WeMini\Crypt::instance($config); ``` ### 用户登录和数据解密 ```php <?php try { // 获取session_key $session = $mini->session($code); if ($session['errcode'] == 0) { $sessionKey = $session['session_key']; $openid = $session['openid']; // 解密用户数据 $userInfo = $mini->userInfo($code, $iv, $encryptedData); // 或者直接解密 $decoded = $mini->decode($iv, $sessionKey, $encryptedData); echo "用户信息:" . json_encode($decoded); } } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` #### 用户登录和数据解密案例 ```php <?php // 用户登录和数据解密案例 include "WeChatDeveloper/include.php"; $config = [ 'appid' => 'wx60a43dd8161666d4', 'appsecret' => 'your_mini_program_appsecret', 'cache_path' => '/path/to/cache', ]; try { $mini = \We::WeMiniCrypt($config); echo "=== 用户登录和数据解密 ===\n"; // 前端传来的参数 $code = 'CODE_FROM_FRONTEND'; $iv = 'IV_FROM_FRONTEND'; $encryptedData = 'ENCRYPTED_DATA_FROM_FRONTEND'; echo "登录凭证: " . $code . "\n"; echo "初始向量: " . $iv . "\n"; echo "加密数据: " . $encryptedData . "\n"; // 1. 获取session_key echo "\n--- 获取session_key ---\n"; $session = $mini->session($code); echo "Session响应: " . json_encode($session, JSON_PRETTY_PRINT) . "\n"; if ($session['errcode'] == 0) { $sessionKey = $session['session_key']; $openid = $session['openid']; echo "Session Key: " . $sessionKey . "\n"; echo "OpenID: " . $openid . "\n"; // 2. 解密用户数据 echo "\n--- 解密用户数据 ---\n"; $userInfo = $mini->userInfo($code, $iv, $encryptedData); echo "用户信息: " . json_encode($userInfo, JSON_PRETTY_PRINT) . "\n"; // 3. 直接解密 echo "\n--- 直接解密 ---\n"; $decoded = $mini->decode($iv, $sessionKey, $encryptedData); echo "解密结果: " . json_encode($decoded, JSON_PRETTY_PRINT) . "\n"; } else { echo "获取session_key失败:" . $session['errmsg'] . "\n"; } } catch (Exception $e) { echo "错误:" . $e->getMessage() . "\n"; } ``` **运行结果示例:** ``` === 用户登录和数据解密 === 登录凭证: CODE_FROM_FRONTEND 初始向量: IV_FROM_FRONTEND 加密数据: ENCRYPTED_DATA_FROM_FRONTEND --- 获取session_key --- Session响应: { "errcode": 0, "errmsg": "ok", "openid": "oGZUI0Vn5P3oM0Q5uXh4kU0JWzZY", "session_key": "tiihtNczfTBvRIA86x2JpA==", "unionid": "oGZUI0Vn5P3oM0Q5uXh4kU0JWzZY" } Session Key: tiihtNczfTBvRIA86x2JpA== OpenID: oGZUI0Vn5P3oM0Q5uXh4kU0JWzZY --- 解密用户数据 --- 用户信息: { "openId": "oGZUI0Vn5P3oM0Q5uXh4kU0JWzZY", "nickName": "Band", "gender": 1, "language": "zh_CN", "city": "Guangzhou", "province": "Guangdong", "country": "CN", "avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/a0cHtr_6o2rX1Y1E1iaicPbyOVKCHs6hSEbP8N8wn4uHqI0f8f7L1icjU0g/0" } --- 直接解密 --- 解密结果: { "openId": "oGZUI0Vn5P3oM0Q5uXh4kU0JWzZY", "nickName": "Band", "gender": 1, "language": "zh_CN", "city": "Guangzhou", "province": "Guangdong", "country": "CN", "avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/a0cHtr_6o2rX1Y1E1iaicPbyOVKCHs6hSEbP8N8wn4uHqI0f8f7L1icjU0g/0" } ``` ### 小程序码生成 ```php <?php try { // 生成小程序码 $qrcode = \We::WeMiniQrcode($config); $result = $qrcode->create([ 'scene' => 'id=123', 'page' => 'pages/index/index', 'width' => 430 ]); // 保存二维码 file_put_contents('qrcode.png', $result); } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` #### 小程序码生成案例 ```php <?php // 小程序码生成案例 include "WeChatDeveloper/include.php"; $config = [ 'appid' => 'wx60a43dd8161666d4', 'appsecret' => 'your_mini_program_appsecret', 'cache_path' => '/path/to/cache', ]; try { $qrcode = \We::WeMiniQrcode($config); echo "=== 小程序码生成 ===\n"; $params = [ 'scene' => 'id=123', 'page' => 'pages/index/index', 'width' => 430 ]; echo "生成参数: " . json_encode($params, JSON_PRETTY_PRINT) . "\n"; $result = $qrcode->create($params); if ($result !== false) { // 保存二维码 $filename = 'qrcode_' . time() . '.png'; file_put_contents($filename, $result); echo "小程序码生成成功\n"; echo "保存文件: " . $filename . "\n"; echo "文件大小: " . strlen($result) . " 字节\n"; } else { echo "小程序码生成失败\n"; } } catch (Exception $e) { echo "错误:" . $e->getMessage() . "\n"; } ``` **运行结果示例:** ``` === 小程序码生成 === 生成参数: { "scene": "id=123", "page": "pages/index/index", "width": 430 } 小程序码生成成功 保存文件: qrcode_1640995200.png 文件大小: 102400 字节 ``` ## 主要功能详解 ### 1. 数据加密解密 小程序的数据加密解密是核心功能,用于保护用户隐私数据。 ```php <?php // 创建加密处理实例 $crypt = \We::WeMiniCrypt($config); // 解密用户信息 $userInfo = $crypt->userInfo($code, $iv, $encryptedData); // 解密手机号 $phoneInfo = $crypt->phoneNumber($code, $iv, $encryptedData); // 解密运动数据 $runData = $crypt->runData($code, $iv, $encryptedData); ``` ### 2. 订阅消息 ```php <?php // 发送订阅消息 $message = \We::WeMiniNewtmpl($config); $result = $message->send([ 'touser' => 'openid', 'template_id' => 'template_id', 'page' => 'pages/index/index', 'data' => [ 'thing1' => ['value' => '商品名称'], 'amount2' => ['value' => '100.00'], 'time3' => ['value' => '2023-01-01 12:00:00'] ] ]); ``` ### 3. 内容安全检测 ```php <?php // 图片内容检测 $security = \We::WeMiniSecurity($config); $result = $security->imgSecCheck($imageData); // 文本内容检测 $result = $security->msgSecCheck($content); ``` ### 4. OCR识别服务 ```php <?php // 身份证识别 $ocr = \We::WeMiniOcr($config); $result = $ocr->idcard($imageData); // 银行卡识别 $result = $ocr->bankcard($imageData); // 驾驶证识别 $result = $ocr->drivingLicense($imageData); ``` ## 支付功能 > **注意**:小程序支付与服务号支付相近,服务端统一下单,返回参数给小程序即可。 ### 小程序支付流程 ```php <?php // 1. 统一下单 $pay = \We::WePayOrder($config); $order = $pay->create([ 'body' => '商品描述', 'out_trade_no' => 'ORDER_' . time(), 'total_fee' => '100', 'openid' => 'user_openid', 'trade_type' => 'JSAPI', 'notify_url' => 'https://your-domain.com/notify.php', 'spbill_create_ip' => '127.0.0.1', ]); // 2. 生成小程序支付参数 if ($order['return_code'] === 'SUCCESS') { $jsApiParams = $pay->jsapiParams($order['prepay_id']); // 3. 返回给小程序 echo json_encode($jsApiParams); } ``` ### 小程序端调用 ```javascript // 小程序端发起支付 wx.requestPayment({ timeStamp: jsApiParams.timeStamp, nonceStr: jsApiParams.nonceStr, package: jsApiParams.package, signType: jsApiParams.signType, paySign: jsApiParams.paySign, success: function(res) { console.log('支付成功', res); }, fail: function(res) { console.log('支付失败', res); } }); ``` ## 高级功能 ### 1. 物流助手 ```php <?php // 发货信息管理 $logistics = \We::WeMiniLogistics($config); // 添加发货信息 $result = $logistics->addOrder([ 'order_id' => 'order_id', 'openid' => 'user_openid', 'delivery_id' => 'delivery_id', 'biz_id' => 'biz_id', 'custom_remark' => '备注信息' ]); ``` ### 2. 直播功能 ```php <?php // 小程序直播 $live = \We::WeMiniLive($config); // 创建直播间 $result = $live->createRoom([ 'name' => '直播间名称', 'coverImg' => 'cover_image_url', 'startTime' => time(), 'endTime' => time() + 3600, 'anchorName' => '主播名称', 'anchorWechat' => 'anchor_wechat', 'shareImg' => 'share_image_url' ]); ``` ### 3. 搜索优化 ```php <?php // 小程序搜索 $search = \We::WeMiniSearch($config); // 提交页面信息 $result = $search->submitPages([ 'pages' => [ [ 'path' => 'pages/index/index', 'query' => 'id=123' ] ] ]); ``` ## 错误处理 ```php <?php try { $mini = \We::WeMiniCrypt($config); $result = $mini->session($code); } catch (\WeChat\Exceptions\InvalidResponseException $e) { // 接口调用异常 echo "接口错误:" . $e->getMessage(); } catch (\WeChat\Exceptions\InvalidDecryptException $e) { // 解密异常 echo "解密错误:" . $e->getMessage(); } catch (Exception $e) { // 其他异常 echo "系统错误:" . $e->getMessage(); } ``` ## 最佳实践 ### 1. 数据安全 - 始终验证用户输入 - 使用HTTPS传输敏感数据 - 定期更新session_key ### 2. 性能优化 - 合理使用缓存机制 - 避免频繁的API调用 - 使用异步处理耗时操作 ### 3. 用户体验 - 提供友好的错误提示 - 实现完善的异常处理 - 优化加载速度 ## 注意事项 1. **AppID配置**:确保使用正确的小程序AppID 2. **权限申请**:某些功能需要在小程序后台申请相应权限 3. **版本兼容**:注意不同版本间的API差异 4. **安全考虑**:妥善保管AppSecret,避免泄露 5. **测试环境**:开发阶段建议使用测试环境 ## 相关资源 - [微信小程序官方文档](https://developers.weixin.qq.com/miniprogram/dev/framework/) - [微信支付文档](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=1_1) - [WeChatDeveloper GitHub](https://github.com/zoujingli/WeChatDeveloper) > **提示**:如果还有遗漏的接口,可以加入QQ群或在GitHub上提交Issue。