引言:为了让magento框架适应微信平台,所以添加一个关于微信的extension
设计思路
使用magento标准的extension接入方式创建一套关于微信的extension
要实现的内容:
阶段一:
1、 基本接口接入
2、 Configuration中可配置微信所需信息及用户是否与微信关联及所需保存的微信用户信息
阶段二:
1、 高级接口接入
2、 多媒体文件存储
3、 Configuration中可配置文件存储方式
接入的功能列表
微信接口相关
基础接口
API配置读取
用于读取API的基本配置信息
JSAPI配置读取
用于读取JSAPI的基本配置信息
API获取Token
通过APPID、APPSecret获取access_token,用于给之后的接口作为认证使用
JSAPI获取Token
通过API的Token来获取JSAPI的ticket,用于给页面上调用JSAPI的认证使用
用户授权获取code
通过认证后得到的用户的code,在获取access_token的时候使用
用户授权获取access_token
通过code获得access_token,在之后获得用户相关信息的时候使用,在该接口中可以获得用户的open_id
刷新access_token
刷新用户的access_token,在access_token过期的时候使用
获取用户的基本信息
通过open_id来获取用户的基本信息
高级接口
开发认证
在微信公众平台启用服务器配置的时候,首先要通过开发认证,然后服务端才能接收到微信推送的消息
接收消息推送
所有的微信推送过来的消息,都通过该函数做后续处理
主动发送服务消息
指定接收者的open_id,可以发送的消息类型如下:
1、 文本
2、 图片
3、 语音
4、 视频
5、 音乐
6、 图文
查询分组
用于查询当前公众号设置了多少个分组
创建分组
自定义分组信息,创建分组
修改分组
修改当前分组的信息
查询用户所在分组
通过open_id获得用户目前所在的分组
移动用户分组
通过open_id及group_id来移动用户所在的分组
获得关注列表
获取当前公众号下的粉丝列表
创建自定义菜单
通过后台设置自定义菜单,每次重新创建都是一次更新
查询自定义菜单
查询出自定义菜单
删除自定义菜单
直接删除当前设置的所有菜单
获得带参二维码的ticket
获取到ticket,用于生成带参二维码
获得带参二维码 二进制
二进制码的二维码数据,可以转为图片或者直接存储到数据库
获得带参二维码 图片
获得一个二维码的图片数据
后台功能相关
Configuration配置
新增配置如下:
1、 登录方式
a) Open_id自动登录
i. 优点
用户在微信浏览器中可以不用再通过输入账号密码登录
ii. 缺点
只能在微信浏览器中使用,其他浏览器将无法进行登录
b) 账号密码登录
i. 优点
在任何平台都能进行登录
ii. 缺点
微信浏览器进入不能自动登录
c) 两种方式同时使用
i. 优点
可以判断当前是在微信浏览器打开还是其他浏览器打开,再进行两种方式的登录
ii. 缺点
代码量比较大
2、 注册方式
a) Open_id自动注册
i. 优点
用户从微信浏览器进入不需要输入账号密码等数据即可注册,在后续的个人设置中可以继续绑定手机号等
ii. 缺点
只能从微信注册
b) 用户名密码注册
i. 优点
可以在任何浏览器中注册使用
ii. 缺点
在微信中也不能直接通过open_id登录
c) 用户名密码绑定Open_id注册
绑定了Open_id的用户,可以使用两种登录方式同时使用
3、 是否记录用户的微信信息
建议使用open_id登录注册的方式勾选,其他方式可不勾选
4、 是否记录用户的微信分组信息
记录后可方便后续微信群发信息功能的使用
5、 公众号信息配置
设置APPID、APPSECRET、G_ID等信息
6、 文件信息存储方式
a) Database
b) file
Customer管理
新增管理如下:
1、 微信信息管理
a) 用户信息管理
可以查看微信的相关信息,可以修改用户的微信备注,可以查看用户所在分组,可以移动到目标分组
b) 分组信息管理
可以查看公众号下的分组信息、修改分组信息、删除分组
c) 消息管理
可以查看有哪些用户对该公众号发了消息,可以回复消息
接入步骤
命名规范
编写Magento的Extension时需要注意每个php类的命名规范
例如给Weixin扩展增加一个Helper里的Data.php类,那么类名应该是:
Mdtit_Weixin_Helper_Data
创建Module
新增一个Mdtit_Weixin.xml文件到/app/etc/modules中,内容如下:
<config>
<modules>
<Mdtit_Weixin> <!—命名空间_模块名称-->
<active>true</active><!—是否启用-->
<codePool>local</codePool><!—根目录地址 一般使用local –>
</Mdtit_Weixin>
</modules>
</config>
创建文件结构
根据上面config.xml的配置,找到对应的位置:/app/code/local/Mdtit/Weixin 如果没有/Mdtit/Weixin文件夹,则需要先创建
在Weixin文件夹下创建一套文件夹目录
/Block //静态块文件夹
/controllers //控制器,该模块请求的路径以及分发处理
/etc //config.xml及system.xml等配置文件,可以设置模块以及后台管理
/Helper //帮助类,一般有一个默认的Data.php,可以自行添加其他的
/Model //数据库访问模块或者其他处理
/sql //安装、更新模块的时候调用的sql语句
Block
controllers
创建一个WeixinController.php 继承自:Mage_Core_Controller_Front_Action
代码内容如下:
class Mdtit_Weixin_WeixinController extends Mage_Core_Controller_Front_Action
{
}
添加了controller之后需要去./etc/config.xml中配置
etc
config.xml
<config>
<modules>
<Mdtit_Weixin><!—命名空间_模块名称 -->
<version>1.0.0</version><!—版本号,在升级的时候有用 -->
</Mdtit_Weixin>
</modules>
<global>
<models><!—设置model -->
<weixin>
<class>Mdtit_Weixin_Model</class><!—设置model所在位置 -->
</weixin>
</models>
<helpers><!—设置帮助类 -->
<weixin>
<class>Mdtit_Weixin_Helper</class><!—设置帮助类所在位置 -->
</weixin>
</helpers>
</global>
<frontend>
<secure_url><!—设置安全访问路径 -->
<weixin_weixin>/weixin/weixin</weixin_weixin>
</secure_url>
<routers>
<!—路由配置,设置好后访问路径为: http://localhost/frontname/controllername/method-->
<weixin>
<use>standard</use>
<args>
<module>Mdtit_Weixin</module>
<frontName>weixin</frontName>
</args>
</weixin>
</routers>
</frontend>
</config>
Adminhtml.xml
在这里可以配置显示菜单以及权限项
Menu
Acl
<config>
<acl><!—权限节点 -->
<resources>
<admin><!—后台权限 -->
<children><!—子级设置 -->
<system><!—system菜单中 -->
<children>
<config><!—configuration的菜单中 -->
<children>
<weixin translate="title" module="weixin">
<!-要添加的节点- -->
<title>Weixin</title>
</weixin>
</children>
</config>
</children>
</system>
</children>
</admin>
</resources>
</acl>
</config>
配置完后在后台的权限中可以看到如下图:
System.xml
用于设置在后台的配置项,代码如下:
<config>
<sections>
<weixin translate="label" module="weixin"><!—设置左侧一级配置项,位于某个tab下 -->
<label>Weixin</label><!—显示的名称 -->
<tab>general</tab><!—位于的tab -->
<frontend_type>text</frontend_type><!—展示类型 -->
<sort_order>400</sort_order><!—显示位置 -->
<show_in_default>1</show_in_default><!—是否在默认项中显示 -->
<show_in_website>1</show_in_website><!—是否在站点中显示 -->
<show_in_store>1</show_in_store><!—是否在店铺中显示 -->
<groups><!—旗下的组 -->
<weiconf translate="label"><!—组名 -->
<label>Weixin configuration</label>
<frontend_type>text</frontend_type>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<fields><!—组中的项 -->
<active translate="label"><!—是否启用,默认每个配置项都应该加 -->
<label>Enabled</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_yesno</source_model>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
</active>
<appid translate="label comment">
<label>Weixin appid</label>
<comment>This is appid</comment>
<frontend_type>text</frontend_type>
<sort_order>30</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</appid>
</fields>
</weiconf>
</groups>
</weixin>
</sections>
</config>
配置好后效果如下图:
更多详情可以在该博客查看:http://hnlixf.iteye.com/blog/1705921
注意,如果是添加的一级配置项,需要重新登录系统才能正常进入,否则会出现404错误
Helper
创建一个默认的帮助类,Data.php,其中缺省代码如下:
<?php
class Mdtit_Weixin_Helper_Data extends Mage_Core_Helper_Abstract
{
}
可以没有内容但必须继承Mage_Core_Helper_Abstract,在其他地方调用的方法:
Mage::Helper(‘weixin’) 或者 Mage::Helper(‘weixin/data’)
如果创建了其他的帮助类,比如创建一个Http的帮助类,那么调用的方式为:
Mage::Helper(‘weixin/http’)
只有Data帮助类才可以用缺省的方式调用
Model
模型分为两种:
1:简单模型
2:EAV(Entity Attribute Value)模型
两种模型都是继承自:Mage_Core_Model_Abstract或Varien_Object
创建一个连接微信API的模型Client.php,代码如下:
class Mdtit_Weixin_Model_Client extends Mage_Core_Model_Abstract
{
}
调用方式如下:
Mage::getModel(‘weixin/client’);//返回的是一个Model对象,可以通过该对象调用Model中的函数或者变量