系统微信分享功能说明

系统微信分享功能报告

一、概述

本报告详细说明了系统中微信分享功能的实现架构、使用方式、集成情况以及在各模块中的应用。

二、系统架构

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新旧版本接口
  • 支持updateTimelineShareDataonMenuShareTimeline
  • 支持updateAppMessageShareDataonMenuShareAppMessage

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

修复内容:

  1. Worker/CommonAction.class.php中添加微信分享初始化
  2. Worker/public/footer.html中添加微信分享脚本
  3. 更新Worker/IndexAction.class.php使用统一的分享服务

修复文件:

  • Banyan/Lib/Action/Worker/CommonAction.class.php
  • themes/default/Worker/public/footer.html
  • Banyan/Lib/Action/Worker/IndexAction.class.php

八、最佳实践

8.1 分享内容优化

  • 标题控制在20字以内
  • 描述控制在50字以内
  • 分享图片建议尺寸:300x300px或更大,宽高比1:1

8.2 性能优化

  • 仅在微信环境下加载微信JS-SDK
  • 使用CDN加载微信JS-SDK(官方CDN)
  • 分享图片使用绝对路径,确保微信能正常抓取

8.3 用户体验

  • 提供分享成功/取消的反馈
  • 可以结合统计系统记录分享数据
  • 分享链接使用HTTPS(微信要求)

九、注意事项

  1. 域名配置: 确保在微信公众平台配置了JS接口安全域名
  2. HTTPS要求: 分享功能需要HTTPS环境(生产环境)
  3. 图片要求: 分享图片必须是绝对路径,且能被微信访问
  4. 签名有效期: 微信签名有时效性,需要实时生成
  5. 接口权限: 确保公众号有相应的接口权限

十、总结

系统微信分享功能已实现统一的服务化架构,通过WechatShareServicewechat-share.js提供了完整的分享能力。Wap模块和Worker模块均已集成,支持自定义配置和回调处理,具有良好的兼容性和扩展性。


报告生成时间: 2024年

版本: v1.0

copyright 2013-2113 www.baoanfuwu.cn All Rights Reserved 保安服务网版权所有
皖ICP备2021016109号-1