微信审核报告
站点微信能力全面审计报告
1. 总览
| 模块类型 | 主要文件/目录 | 功能概述 |
|---|---|---|
| 基础配置与令牌管理 | Banyan/Lib/Model/WeixinModel.class.php<br>Banyan/Lib/Net/Jssdk.class.php | 负责 access_token、jsapi_ticket、二维码、菜单、订阅状态等核心能力 |
| 消息推送与模板 | Banyan/Lib/Model/WeixinmsgModel.class.php<br>Banyan/Lib/Service/PushService.class.php | 支持旧版模板消息(已标记废弃)与新版订阅消息、批量推送、统计 |
| OAuth/绑定 | Banyan/Lib/Action/Wap/CommonAction.class.php<br>Banyan/Lib/Model/ConnectModel | 判断是否在微信内,获取授权信息、绑定 openid、登录态托管 |
| 微信支付 | Banyan/Lib/Payment/weixin/<br>Banyan/Lib/Payment/WxPayPubHelper/ | JSAPI/扫码支付接口封装、异常处理、回调通知 |
| 互动活动 | Banyan/Lib/Action/Weixin/ 目录下 CardAction、ShakeAction、RelayAction 等 | 对应公众号活动(刮刮卡、砸金蛋、助力等),多数仍依赖旧版分享接口 |
| WAP 分享脚手架 | 新: static/default/wap/js/wechat-share.js<br>themes/default/Wap/public/footer_share.html | 统一 JS-SDK 初始化、菜单配置、成功/失败回调,兼容过往页面 |
| 位置/环境探测 | Public/js/locationService.js<br>themes/default/Wap/public/city_display.html | 判断是否在微信内、调用 wx.getLocation 获取定位 |
| 第三方产物/样例 | 微信sdkphp/ 目录 | 官方示例与说明,未与主站耦合 |
2. 现有能力详解
2.1 后端能力
- WeixinModel
- 统一封装 access_token / jsapi_ticket 缓存、公众号菜单、自定义二维码、素材上传。
- 保留了 tmplmesg() 旧模板消息调用;文件中已标记 @deprecated,但仍存在调用入口(例如部分模型的资金提醒方法)。
- getTmplId() 方法参数错误($shop_id 未定义),为潜在 bug。
- WeixinmsgModel
- 新增的 sendSubscribeNotice()、batchSendSubscribeNotice() 已对接 message/subscribe/send。
- 旧版 weixin_tmpl_life_subscribe()、weixin_shop_news_push() 等仍保留,标记废弃但未移除调用方。
- 多个模板生成方法直接包含视图逻辑(调用 Wxmesg::order_message 等),后续可考虑抽离。
- PushService
- 整合文章(新闻)、分类信息等推送,并通过 WeixinmsgModel 下发订阅消息。
- 仍有电话/SMS/邮件耦合逻辑,说明站内推送矩阵未完全解耦。
- 支付模块
- Banyan/Lib/Payment/weixin/WxPay.JsApiPay.php 使用官方 SDK,回调异常会重定向到 user/info/wxpayexception。
- WxPayPubHelper 提供扫码模式一短链接、统一下单等能力。
- OAuth 与会话
- CommonAction::_initialize() 会在微信内判断登录态、自动触发 OAuth,由 Weixinconn / Connect 模型保存 state、open_id。
- 风险: 若微信 APPID 未配置,仍然会走 OAuth 分支,需在配置时谨慎校验。
2.2 前端能力
- JS-SDK 初始化(整改前)
- 多数页面重复引用 http://res.wx.qq.com/open/js/jweixin-1.0.0.js 与本地 jweixin-1.6.0.js,存在重复加载与版本混用。
- 分享逻辑散落在 footer_share.html、各业务页 <script> 中,既有弃用的 wx.onMenuShare*,也有新 wx.update*,维护成本高。
- 分享结果回调直接调用页面函数(getShareIntegral()、packet() 等),缺少统一兜底。
- 整改后的统一模块
- 新增 wechat-share.js,负责:
- 自动填充分享标题/描述/链接,保证绝对 URL。
- 缺省时自动扫描页面首张大图作为封面。
- 兼容 updateTimelineShareData / updateAppMessageShareData 与旧版 onMenuShare*。
- 提供 onWechatShareSuccess / onWechatShareCancel / onWechatShareError / onWechatShareReady 钩子。
- 默认集成 layer.msg 作为提示。
- footer_share.html 只负责注入签名和序列化后的分享配置,完全去除了业务逻辑。
- 新增 WechatShareService 统一构建分享配置,在 CommonAction 默认注入,业务可通过 $this->setWechatShare() 覆盖。
- 对新闻、分类信息、商家会员、用户收款等核心页面完成切换,保留原有成功回调(积分、红包等)。
- 其他前端能力
- locationService.js 对微信环境进行 UA 判断,并使用 wx.getLocation。
- 多个微信活动页(卡券、助力、摇一摇)仍使用旧分享接口,后续视业务需求升级。
2.3 目录与资产情况
微信sdkphp/:官方示例及说明文档,可作为参考,但与主站无直接引用。themes/default/Wap/不用的/:大量历史模板,保留旧版 JS-SDK 用法。static/default/wap/js/jweixin-1.6.0.js:本地备份版本,当前主流程改为使用官方 CDN,可保留作为 fallback 或后续删除。
3. 已发现的老旧/冗余项
| 类别 | 具体位置 | 说明 |
|---|---|---|
| JS-SDK 旧接口 | 大量模板中的 wx.onMenuShareTimeline 等 | 微信官方自 6.7.2 起标记弃用,已在主流程中替换,剩余多位于 不用的/ 或活动页 |
| 模板消息 API | WeixinModel::tmplmesg()、WeixinmsgModel 内旧方法 | 官方已停止新增模板消息,建议逐步找出调用并迁移至订阅消息 |
| 多份 JSSDK 类 | Banyan/Lib/Net/Jssdk.class.php、Banyan/Lib/Net/Jssdk.class22.php、Banyan/Lib/Payment/wxdw/Jssdk.php | 功能重复,部分版本调用错误(如 getTmplId Bug),后续可统一 |
| 样例/调试文件 | 调试/、微信sdkphp/ | 仅用于排查或文档,生产流程未引用 |
| jsapi_ticket 缓存 | Jssdk.class.php 写入根目录 jsapi_ticket.json | 需确保运行用户有写权限,同时注意权限/安全风险 |
4. 本次整改要点
- 前端统一分享模块
- 新增 WechatShareService + wechat-share.js,自动注入签名与分享配置。
- 更新 footer_share.html / footeruserfei.html / 相关业务页,去除重复 wx.config。
- 分类信息(列表、详情)、新闻、商家会员、用户收款等主要入口已迁移至最新 API。
- 后端扩展
CommonAction新增$this->setWechatShare(),默认注入站点级分享信息。
- 针对新闻、分类信息、会员模块,分别配置个性化分享标题、封面与链接。
- WAP 端覆盖模块(含主要模版/控制器):
- 首页与公共组件:themes/default/Wap/public/footer_share.html、footernews.html、footeruserfei.html、footerweixin.html
- 新闻资讯:Banyan/Lib/Action/Wap/NewsAction.class.php、themes/default/Wap/News/
- 分类信息:Banyan/Lib/Action/Wap/LifeAction.class.php、themes/default/Wap/life/
- 会员/收款:Banyan/Lib/Action/Wap/HuiyuanAction.class.php、themes/default/Wap/huiyuan/、themes/default/Wap/userfei/
- 其他可复用模块:商城、外卖、活动等页面在引入 footer_share 后可直接继承统一分享逻辑。
- 回调兼容
- 分享成功仍触发原有 getShareIntegral()、packet() 等业务逻辑。
- 未定义专用回调时,自动使用 layer.msg 给出提示。
5. 风险与后续建议
- 活动页与后台模板
themes/default/Weixin/ 及部分 API 工具页仍保留旧版分享写法,若后续启用,建议同样引入统一模块。
- 模板消息彻底迁移
坚持在 WeixinmsgModel 中删除所有旧模板消息的调用入口,确保不会再触发失效 API。
- JSSDK 多版本清理
可统一保留一个 Jssdk 类,并修复 getTmplId() 参数错误,避免后续调用出错。
- 缓存与权限
jsapi_ticket.json 默认写在网站根目录,建议确认 Windows 环境具有写入权限,或改为使用缓存驱动(如 FileCache)。
- 文档与运维
- 若采用 CDN 版本 jweixin-1.6.0.js,请在运维文档中说明网络要求,必要时保留本地 fallback。
- 分享配置中若需要拼接请求参数(如 fuid),请统一在后端通过 setWechatShare 生成。
6. 附录:关键文件清单
- 后端
- Banyan/Lib/Model/WeixinModel.class.php
- Banyan/Lib/Model/WeixinmsgModel.class.php
- Banyan/Lib/Service/WechatShareService.class.php(新)
- Banyan/Lib/Action/Wap/CommonAction.class.php
- Banyan/Lib/Action/Wap/NewsAction.class.php
- Banyan/Lib/Action/Wap/LifeAction.class.php
- Banyan/Lib/Action/Wap/HuiyuanAction.class.php
- 前端
- themes/default/Wap/public/footer_share.html
- themes/default/Wap/public/footeruserfei.html
- themes/default/Wap/life/detail.html
- themes/default/Wap/life/index.html
- static/default/wap/js/wechat-share.js
- 参考/遗留
- 微信sdkphp/(官方示例)
- themes/default/Wap/不用的/(旧版模板)
- static/default/wap/js/jweixin-1.6.0.js(本地备份)
本报告覆盖了站点当前涉及的主要微信能力、已整改内容以及后续注意事项,可作为后续开发与运维的统一基线。若需继续迁移活动页或后台模块,可按本次方案复用 WechatShareService + wechat-share.js 的组合。***
