当前位置:首页 > 服务器 > 正文

微信服务器设计(微服务技术架构方案)

今天给各位分享微信服务器设计的知识,其中也会对微服务技术架构方案进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Tiny微信框架是怎样设计的

您好!很高兴能为您解答,    

第一层次:通信处理

微信的服务主要是基于HTTP协议,安全通过访问令牌(access_token)保证;少数业务场景使用HTTPS加密协议,甚至涉及安全证书,例如微信商户的支付接口。

Tiny微信框架的通讯处理由WeiXinConnector总调度,接口定义如下:

public interface WeiXinConnector {

/**

* 默认的bean配置名称

*/

public static final String DEFAULT_BEAN_NAME="weiXinConnector";

public static final String ACCESS_TOKEN="ACCESS_TOKEN";

/**

* 获取当前的管理号客户端信息

* @return

*/

Client getClient();

/**

* 获得微信消息发送者,负责往微信服务器发送消息

* @return

*/

WeiXinSender getWeiXinSender();

/**

* 获得微信消息接收者,负责解析微信服务器推送过来的消息

* @return

*/

WeiXinReceiver getWeiXinReceiver();

/**

* 获取微信的会话管理者

* @return

*/

WeiXinSessionManager getWeiXinSessionManager();

/**

* 获取微信验证令牌

* @return

*/

AccessToken getAccessToken();

/**

* 获得微信的JS访问票据

* @return

*/

JsApiTicket getJsApiTicket();

/**

* 发送微信消息

* @param message

*/

void send(ToServerMessage message);

/**

* 上传微信文件

* @param upload

*/

void upload(WeiXinHttpUpload upload);

/**

* 接收微信消息

* @param request

* @param response

*/

void receive(HttpServletRequest request,HttpServletResponse response);

}

具体到底层的HTTP和HTTPS协议通讯,org.tinygroup.weixinhttp工程提供了业务接口WeiXinHttpConnector实现具体的协议通讯。

public interface WeiXinHttpConnector {

/**

* 默认的bean配置名称

*/

public static final String DEFAULT_BEAN_NAME="weiXinHttpConnector";

/**

* 用get方式访问微信URL

*

* @param url 要访问的微信URL

* @return 请求结果

*/

String getUrl(String url);

/**

* 用post方式访问微信URL

*

* @param url 要访问的微信URL

* @param content

* @param cert

* @return 请求结果

*/

String postUrl(String url, String content,WeiXinCert cert);

/**

* 上传文件

* @param url

* @param upload

* @return

*/

String upload(String url,WeiXinHttpUpload upload);

}

目前微信框架实现了HttpClient3.1和HttpClient4.5.1两个版本的底层通讯方案,对开发人员而言只需要配置不同的依赖,而无需关心具体通讯代码。

第二层次:报文解析

本人一直对微信的报文设计颇有微词,从整体上看微信报文缺乏统一规范,XML、JSON格式混用,字段命名也不规范。Tiny微信提供WeiXinConvert接口负责报文与对象之间的转换,目前XML报文通过Xsteam转换,JSON报文通过fastjson转换。接口定义如下:

public interface WeiXinConvert extends ComparableWeiXinConvert {

/**

* 获得优先级

* @return

*/

int getPriority();

/**

* 设置优先级

* @param priority

*/

void setPriority(int priority);

/**

* 获得报文的状态

* @return

*/

WeiXinConvertMode getWeiXinConvertMode();

/**

* 获得结果类型

* @return

*/

Class? getCalssType();

/**

* 判断转换接口能否处理输入信息(微信报文会出现不同类型报文字段一致的情况,需要根据上下文判断)

* @param INPUT

* @param input

* @param context

* @return

*/

INPUT boolean isMatch(INPUT input,WeiXinContext context);

/**

* 转换消息(微信报文会出现不同类型报文字段一致的情况,需要根据上下文判断)

* @param input

* @return

*/

OUTPUT,INPUT OUTPUT convert(INPUT input,WeiXinContext context);

}

对开发人员而言,无需思考如何构建复杂的报文,只需依赖对应微信业务模块的子工程,构建不同的消息对象,而底层的报文解析与转换甚至通讯都由tiny框架处理。

第三层次:报文模拟发送

微信发送报文调试最麻烦的地方就是访问令牌(access_token),这个是根据用户应用动态生成的,而且只保持两个小时有效。Tiny微信框架提供了模拟测试页面,只需要bean配置页面设置相关appId和APP秘钥等参数,开发人员在页面就无需手动输入访问令牌。测试页面如下:

第四层次:报文模拟接收

接收报文通常是用来模拟手机端的发送消息,特别是一些复杂交互场景:如命令行菜单,如果每次都通过手机端调试。效率非常低。而通过本测试页面,直接输入模拟的手机报文直接就可以得到报文结果,准确并且快速。模拟页面如图:

第五层次:报文处理框架

前面在介绍微信核心接口时提到过WeiXinReceiver和WeiXinSender,分别处理微信推送消息与主动发送消息。但是用户的业务是复杂多变的,Tiny是如何保证微信框架的可扩展性呢?其实WeiXinReceiver和WeiXinSender是由一组有序WeiXinHandler组成,而每一个WeiXinHandler都可以处理一类消息,接口定义如下:

public interface WeiXinHandler extends ComparableWeiXinHandler {

int getPriority();

void setPriority(int priority);

WeiXinHandlerMode getWeiXinHandlerMode();

/**

* 是否匹配对象和上下文

* @param T

* @param message

* @return

*/

T boolean isMatch(T message,WeiXinContext context);

/**

* 处理对象

* @param T

* @param message

* @param context

*/

T void process(T message,WeiXinContext context);

}

简单举个例子,比如开发一个图片消息处理器ImageMessageHandler,用来处理微信客户端的图片类消息,代码如下:

public class ImageMessageHandler extends AbstractWeiXinHandler{

public WeiXinHandlerMode getWeiXinHandlerMode() {

return WeiXinHandlerMode.RECEIVE;

}

public T boolean isMatch(T message, WeiXinContext context) {

return message instanceof ImageMessage;

}

//具体业务处理

public T void process(T message, WeiXinContext context) {

ImageMessage mess = (ImageMessage) message;

//逻辑处理

TextReplyMessage replyMessage= new TextReplyMessage();

replyMessage.setContent("回复图片消息["+mess.getPicUrl()+"]");

replyMessage.setToUserName(mess.getFromUserName());

replyMessage.setFromUserName(mess.getToUserName());

replyMessage.setCreateTime((int)(System.currentTimeMillis()/1000));

context.setOutput(replyMessage);

}

}

用户主要是编写isMatch和process这两个函数,前者决定这个业务类能处理哪些微信消息和事件,后者是真正的业务处理类。微信消息的包装和转换由微信框架提供,用户应该关心业务处理逻辑,原则上一个Handler只建议处理一类消息。编写完毕后,需要将Handler配置成bean文件,微信框架就能调用了。

ImageMessageHandler的作用是接收微信客户端发送的图片类消息,并返回图片地址给用户,效果如下:

第六层次:上下文保持

微信是有上下文概念的,比如微信应用的小游戏:猜数字。用户输入一个数字,而服务器告诉用户比目标值偏大还是偏小,直到用户猜中为止。游戏很简单,但是这就涉及到上下文会话,Tiny微信框架提供WeiXinSession接口作为上下文统一接口,而WeiXinSessionManager作为上下文的管理接口存在。

WeiXinSession接口定义如下:

public interface WeiXinSession extends Serializable{

/**

* 会话Id

* @return

*/

String getSessionId();

/**

* 是否包含某元素

* @param name

* @return

*/

boolean contains(String name);

/**

* 返回指定name的序列化对象

* @param T

* @param name

* @return

*/

T extends Serializable T getParameter(String name);

/**

* 设置序列化的参数对象

* @param T

* @param name

* @param value

*/

T extends Serializable void setParameter(String name,T value);

/**

* 取得session的创建时间。

*

* @return 创建时间戮

*/

long getCreationTime();

/**

* 取得最近访问时间。

*

* @return 最近访问时间戮

*/

long getLastAccessedTime();

/**

* 取得session的最大不活动期限,超过此时间,session就会失效。

*

* @return 不活动期限的秒数,0表示永不过期

*/

int getMaxInactiveInterval();

/**

* 设置session的最大不活动期限,单位秒

* @param maxInactiveInterval

*/

void setMaxInactiveInterval(int maxInactiveInterval);

/**

* 判断session有没有过期。

*

* @return 如果过期了,则返回codetrue/code

*/

boolean isExpired();

/**

* 更新session

*/

void update();

}

WeiXinSessionManager管理接口主要提供创建、删除、查询上下文会话的操作API,接口定义如下:

public interface WeiXinSessionManager {

/**

* 默认的bean配置名称

*/

public static final String DEFAULT_BEAN_NAME="weiXinSessionManager";

/**

* 创建会话

* @param sessionId

* @return

*/

WeiXinSession createWeiXinSession(String sessionId);

/**

* 查询会话

* @param sessionId

* @return

*/

WeiXinSession getWeiXinSession(String sessionId);

/**

* 添加会话

* @param session

*/

void addWeiXinSession(WeiXinSession session);

/**

* 手动删除会话

* @param sessionId

* @return

*/

void removeWeiXinSession(String sessionId);

/**

* 遍历会话

* @return

*/

WeiXinSession[] getWeiXinSessions();

/**

* 清理会话过期的Session

*/

void expireWeiXinSessions();

/**

* 清理全部Session

*/

void clear();

/**

* Session最大过期时间设置,单位s,默认0

* @return

*/

int getMaxInactiveInterval();

/**

* Session清理线程首次延迟时间,单位s,默认值60

* @return

*/

int getExpireTimerDelay();

/**

* Session清理线程运行周期,单位s,默认值300

* @return

*/

int getExpireTimePeriod();

}

当然Tiny微信框架提供了上下文相关接口,不代表每一类消息强制进行会话管理,比如简单文本消息,微信客户端的位置消息,完全可以请求-响应这种模式进行处理。

第七层次:处理的水平扩展能力

前文讲过Tiny微信框架的具体业务是由WeiXinHandler接口完成的,而WeiXinHandler接口是不依赖WeiXinConnector等委托对象,因此通过扩展WeiXinHandler接口完全可以实现处理能力的水平扩展,比如Tiny框架本身有服务中心,支持分布式服务,那么我们可以在WeiXinHandler接口包装服务中心,从而实现分布式服务。

第八层次:命令处理框架

实际上一个微信公众号,许多的时候都是通过使用者用文字(语音识别也归到用文字)的方式与平台进行交互,这个时候,其实就是一个命令行的处理。Tiny微信框架通过org.tinygroup.menucommand实现相关需求,开发人员只需要配置XML就可完成复杂的命令行处理。目前支持两种模式:

简单模式。用户不需要动态数据,仅需要配置即可。类似电话黄页,支持逐级递归,针对这种模式,Tiny支持配置方式,用户无需编码。

动态模式。用户除了静态数据,还涉及动态交互,无法通过配置解决。Tiny框架提供了MenuCommandHandler接口,然后在配置中指定具体类或bean,框架就能解决。

第九层次:模板语言的引入

第十层次:模块化

如何使用pagekite搭建微信网络服务器

微信公众平台

1).注册微信公众平台

首先你要注册自己的一个订阅号,实名,需要审核期的。

2).登录公众平台

注册完成后,可以登录到公众平台。

3).基础功能

默认已经提供了两个基础的功能,在非开发者模式下可以使用。

要添加其它的功能插件的时候,其实是需要微信认证的,所以没认证也用不了。

SAE创建应用

创建应用的时候,在下面选择“微信公众平台PHP SDK”,创建应用就可以了。注意右侧的说明,需要用到。

微信公众平台 PHP SDK使用说明

简单的微信公众平台 PHP SDK ,通过调用相应的接口,使你可以轻松地开发微信 App 。

测试方法如下:

1). Clone 或下载项目源码,上传至服务器。

2).进入微信公众平台,高级功能,开启开发模式,并设置接口配置信息。

修改 URL 为example目录下server.php 的实际位置,

修改 Token 为 weixin (可自行在 example目录下server.php 中更改)。

3).发送消息测试。

下载应用源码到本地

1).复制应用SVN地址

创建完成后,进入应用页面,选择“代码管理”,把页面最下面的该应用的SVN仓库地址复制出来。

2).下载代码

用TortoiseSVN软件中的“Check out…”把代码全部下载到本地。使用SVN的时候,需要输入用户名和密码就是SAE注册时候的安全邮箱和安全密码。

设置公众平台接口配置信息

1).查看token

打开example目录下的server.php文件,翻到文件最下面的这个,就是Token了。

2).在公众平台上填写配置信息

点击“开发者中心”-“修改配置”,

填写URL为你的源码中server.php文件的路径,Token,这个是用来验证的,当然,你可以修改一个自己的,英文或数字,3-32字符。

EncodingAESKey,点击随机生成就行。好了点击“提交”。

完成后,点击“启用”。开启服务器,就可以了。

测试向微信公众号发送消息

关注后发送信息测试下。可以查看代码,对应的返回消息设置都在代码里。

这样,我们就可以通过修改应用中的相关代码,来开发这个公众号的一些其它功能。

微信公众账号服务器怎么搭建

1、

启用消息接口

登陆微信公众平台,选择:高级功能,

可以看到页面上有‘编辑模式’和‘开发模式’两个选择。默认开启‘编辑模式’。

进入编辑模式并关闭。

进入开发模式,点击成为开发者进入页面:

特别注意是URL是你在‘2准备服务器’中自己服务器的访问路径(即接收微信服务器发送信息的url地址),必须以http://开头,且为80端口。

Token

可以自定义。

填好后点击提交,这会有下面这些结果

(1)你的服务器没有正确响应Token验证,请阅读消息接口使用指南

这样回头检查一下各项配置是否正确。如果确定配置没有问题,请按下面的方法检查

(2)请求URL超时(超过5s)

你的服务器在国外,或者服务器网速不给力,一般多试几次就可以了。

如果经常这样,就需要考虑更换服务器

(3)提交成功

1、

功能测试:

(1)

使用普通账号关注我们的公众账号。

(2)

发送消息‘1’给公众账号。

(3)

如果公众账号返回‘1你好’。

则测试成功。

微信如何搭建自己的服务器资源

第一步:申请帐号

1创建新浪云计算应用

我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+MySQL数据库作为程序运行环境。使用新浪微博账号可以直接登录SAE,登录后SAE将赠送500个免费云豆。

第二步:创建新应用22

1登录后点击顶部【我的首页】

2点击下侧的创建新应用,这时会弹出提示, 禁止放置违法违规内容,点击继续创建,弹出如下窗口。

3选择一个未使用的appid,如果老是已经被使用不知道该什么好,就填写你的QQ号或者手机号吧。

填写二级域名AppID、应用名称、验证码,开发语言选择PHP,应用类型选择web应用。然后点击创建应用

4应用创建成功。并自动跳转到应用列表中,可以看到已经有刚才创建的CCTV-7

第三步:创建新版本33

1选择CCTV-7右侧的应用管理下面的代码管理,

2跳转到代码管理

3点击右侧的“创建一个新版本”

4版本号默认为1,点击创建,成功后如下图所示:

5到这里,就成功创建了一个域名应用了

第四步:上传代码44

将以下代码复制下来,另存为index.php。必须使用专业的开发编辑软件操作,例如Notepad++,不要使用Windows自带的记事本等。

然后将index.php文件压缩成ZIP格式,注意不能用RAR格式

这样会生成一个index.zip的文件。

在代码管理界面中,选择操作按钮。

选择上传代码包。

点击上传文件,选择刚才压缩好的index.zip文件,点击上传,上传成功后如下所示,如果上传有问题,请在Chrome浏览器下重试一下。

点击操作按钮下的代码编辑,

有时候需要输入自己的安全密码,如果不记得了就点击“找回密码”。

安全验证成功后继续之前的操作。

我们可以看到index.php已经上传成功,双击可以查看编辑里面的代码

8新浪云应用的创建就成功了。

参考资料:

微信服务器设计的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于微服务技术架构方案、微信服务器设计的信息别忘了在本站进行查找喔。

取消
扫码支持 支付码