# 微信小程序开发
[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。
- 项目介绍
- 功能模块总览
- 开发指南
- 常见问题解答
- 性能优化指南
- 安全防护指南
- 开发指南
- 环境准备及安装使用
- 接口实例及配置参数
- 目录结构及文件描述
- 推送事件及消息回复
- 生成带参数的二维码
- 媒体素材图文管理
- 微信服务号开发
- 客服消息管理
- 模板消息管理
- 基础菜单管理
- 个性化菜单管理
- 网页授权管理
- 网页JSSDK开发
- 标签管理
- 用户标签操作
- 模板管理
- 模板消息发送
- 临时素材管理
- 永久素材管理
- 卡券管理
- 卡券核销
- 卡券营销
- 蓝牙摇一摇周边
- 扫一扫管理
- 微信小程序开发
- 开发指南
- 数据解密
- 二维码生成
- 模板消息
- OCR服务
- 内容安全检测
- 物流订单管理
- 物流查询服务
- 直播间管理
- 直播商品管理
- 生物认证
- 图像处理
- 导购助手
- 运费险
- 服务市场
- 地址位置
- 插件管理
- 数据统计
- 企业微信开发
- 开发指南
- 通讯录管理
- 消息推送
- 部门基础管理
- 部门成员管理
- 用户基础管理
- 用户批量管理
- 应用管理
- 身份验证
- 完整API接口
- 微信支付开发
- 公众号支付
- V2统一下单
- V3统一下单
- 客户端发起支付
- 查询订单
- 关闭订单
- 申请退款
- 查询退款
- 支付通知
- 红包管理
- V3订单管理
- V3高级功能
- 支付宝支付开发
- 开发指南
- App支付
- 网站支付
- 手机支付
- 扫码支付
- 刷卡支付
- 转账
- 账单下载