系统微信分享功能说明
系统微信分享功能报告
一、概述
本报告详细说明了系统中微信分享功能的实现架构、使用方式、集成情况以及在各模块中的应用。
二、系统架构
2.1 核心组件
1. WechatShareService(微信分享服务类)
位置: Banyan/Lib/Service/WechatShareService.class.php
功能:
- 统一构建微信分享配置
- 自动获取站点配置(标题、描述、Logo等)
- 处理URL绝对路径转换
- 提供默认分享配置和自定义配置合并
主要方法:
public static function build(array $options = array())
- 构建微信分享配置
- 支持自定义标题、描述、链接、图片等
- 自动处理默认值和URL格式化
2. wechat-share.js(前端分享脚本)
位置: static/default/wap/js/wechat-share.js
功能:
- 初始化微信JS-SDK
- 配置分享到朋友圈、分享给朋友等接口
- 处理分享成功/取消回调
- 兼容新旧版本微信JS-SDK接口
支持的分享渠道:
- 分享到朋友圈(Timeline)
- 分享给朋友(AppMessage)
- 分享到QQ
- 分享到微博
- 分享到QQ空间
3. JSSDK(微信JS-SDK封装类)
位置: Banyan/Lib/Net/Jssdk.class.php
功能:
- 获取微信JS-SDK签名包(appId、timestamp、nonceStr、signature)
- 管理access_token和jsapi_ticket缓存
- 生成签名算法
2.2 集成方式
Wap模块(前端用户)
位置: Banyan/Lib/Action/Wap/CommonAction.class.php
实现:
// 在_initialize()方法中
import("@/Net.Jssdk");
$jssdk = new JSSDK($this->_CONFIG['weixin']["appid"], $this->_CONFIG['weixin']["appsecret"]);
$signPackage = $jssdk->GetSignPackage();
$this->assign('signPackage', $signPackage);
import("@/Service.WechatShareService");
$this->setWechatShare();
模板集成: themes/default/Wap/public/footer_share.html
- 输出微信签名和分享配置到全局变量
- 引入微信JS-SDK和分享脚本
Worker模块(员工端)
位置: Banyan/Lib/Action/Worker/CommonAction.class.php
实现:
// 在_initialize()方法中
if ($is_weixin) {
import("@/Net.Jssdk");
$jssdk = new JSSDK($this->_CONFIG['weixin']["appid"], $this->_CONFIG['weixin']["appsecret"]);
$signPackage = $jssdk->GetSignPackage();
$this->assign('signPackage', $signPackage);
import("@/Service.WechatShareService");
$this->setWechatShare();
}
模板集成: themes/default/Worker/public/footer.html
- 在微信环境下输出微信签名和分享配置
- 引入微信JS-SDK和分享脚本
三、使用方式
3.1 基础使用(自动配置)
在继承CommonAction的控制器中,微信分享功能已自动初始化,无需额外配置。
3.2 自定义分享配置
在具体Action中可以调用setWechatShare()方法自定义分享内容:
// 示例:在IndexAction中
$this->setWechatShare(array(
'title' => '自定义标题',
'desc' => '自定义描述',
'link' => U('index/index', '', true, true, true),
'imgUrl' => '/path/to/image.jpg'
));
3.3 前端回调处理
可以在页面中定义回调函数处理分享事件:
// 分享成功回调
window.onWechatShareSuccess = function(channel, share) {
console.log('分享成功', channel, share);
// 可以在这里发送统计、显示提示等
};
// 分享取消回调
window.onWechatShareCancel = function(channel, share) {
console.log('分享取消', channel);
};
// 分享就绪回调
window.onWechatShareReady = function(wx, share) {
console.log('微信分享已就绪', wx, share);
};
// 分享错误回调
window.onWechatShareError = function(err) {
console.error('微信分享配置失败', err);
};
四、功能特性
4.1 自动配置
- 自动获取站点名称、描述、Logo作为默认分享内容
- 自动处理URL绝对路径
- 自动检测并设置分享图片
4.2 兼容性
- 兼容微信JS-SDK新旧版本接口
- 支持
updateTimelineShareData和onMenuShareTimeline - 支持
updateAppMessageShareData和onMenuShareAppMessage
4.3 灵活性
- 支持页面级自定义分享配置
- 支持动态修改分享内容
- 支持多种分享渠道配置
4.4 错误处理
- 自动检测微信环境
- 提供错误回调机制
- 降级处理(非微信环境不加载)
五、各模块应用情况
5.1 Wap模块(前端用户)
- ✅ 已集成微信分享功能
- ✅ 所有页面自动支持微信分享
- ✅ 支持自定义分享内容
5.2 Worker模块(员工端)
- ✅ 已集成微信分享功能(本次修复)
- ✅ 在微信环境下自动启用
- ✅ 支持自定义分享内容
5.3 Distributors模块(后台管理)
- ⚠️ 暂未集成(后台管理通常不需要分享功能)
5.4 Weixin模块(微信活动)
- ✅ 已集成微信分享功能
- ✅ 活动页面支持分享
六、技术细节
6.1 微信JS-SDK版本
- 使用版本: jweixin-1.6.0.js
- 来源: https://res.wx.qq.com/open/js/jweixin-1.6.0.js
6.2 分享接口列表
[
'checkJsApi',
'updateTimelineShareData', // 新版朋友圈分享
'updateAppMessageShareData', // 新版朋友分享
'onMenuShareTimeline', // 旧版朋友圈分享(兼容)
'onMenuShareAppMessage', // 旧版朋友分享(兼容)
'onMenuShareQQ', // QQ分享
'onMenuShareWeibo', // 微博分享
'onMenuShareQZone', // QQ空间分享
'getLocation' // 定位接口
]
6.3 配置数据结构
{
debug: false, // 是否开启调试
title: '分享标题', // 分享标题
desc: '分享描述', // 分享描述
link: 'https://example.com/...', // 分享链接(绝对路径)
imgUrl: 'https://example.com/...', // 分享图片(绝对路径)
type: '', // 分享类型
dataUrl: '', // 分享数据URL
jsApiList: [...] // JS接口列表
}
七、修复记录
7.1 Worker模块微信分享修复(2024)
问题:
- Worker模块未集成系统的微信分享功能
- 仅使用基础的JSSDK签名,未使用WechatShareService
修复内容:
- 在
Worker/CommonAction.class.php中添加微信分享初始化 - 在
Worker/public/footer.html中添加微信分享脚本 - 更新
Worker/IndexAction.class.php使用统一的分享服务
修复文件:
Banyan/Lib/Action/Worker/CommonAction.class.phpthemes/default/Worker/public/footer.htmlBanyan/Lib/Action/Worker/IndexAction.class.php
八、最佳实践
8.1 分享内容优化
- 标题控制在20字以内
- 描述控制在50字以内
- 分享图片建议尺寸:300x300px或更大,宽高比1:1
8.2 性能优化
- 仅在微信环境下加载微信JS-SDK
- 使用CDN加载微信JS-SDK(官方CDN)
- 分享图片使用绝对路径,确保微信能正常抓取
8.3 用户体验
- 提供分享成功/取消的反馈
- 可以结合统计系统记录分享数据
- 分享链接使用HTTPS(微信要求)
九、注意事项
- 域名配置: 确保在微信公众平台配置了JS接口安全域名
- HTTPS要求: 分享功能需要HTTPS环境(生产环境)
- 图片要求: 分享图片必须是绝对路径,且能被微信访问
- 签名有效期: 微信签名有时效性,需要实时生成
- 接口权限: 确保公众号有相应的接口权限
十、总结
系统微信分享功能已实现统一的服务化架构,通过WechatShareService和wechat-share.js提供了完整的分享能力。Wap模块和Worker模块均已集成,支持自定义配置和回调处理,具有良好的兼容性和扩展性。
报告生成时间: 2024年
版本: v1.0
