本章节咱们来实现一个微信库存查询功能,使用咱们前面的BIZ业务逻辑层示例如何利用微信入口来实现文本消息类的库存查询服务。编程
def responseMsg(postContent): postStr = smart_str(postContent) #postStr = postContent if postStr: msg = xmlContent2Dic(postStr) if msg['MsgType']: if msg['MsgType'] == 'event': resultStr = handleEvent(msg) #处理事件类型推送 elif msg['MsgType'] == 'text': resultStr =handleText(msg) #处理文本类型推送 else: resultStr = 'Input something...' return resultStr
def handleText(msg): resultStr="<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>" if msg['Content'] == '1': resultStr = resultStr % (msg['FromUserName'],msg['ToUserName'],str(int(time.time())),'text',u'请输入查询物料名称,格式“K螺母”。') elif string.upper(msg['Content'][0])=='K': itemName = msg['Content'][1:len( msg['Content'])] strs = '' biz = InventoryBiz() inventorys = biz.getInventoryByItemName(itemName) for inventory in inventorys: strs = strs + inventory.Item.ItemName + u' 库存数量:' + str( inventory.Amount) + '\n' if strs == '': strs = u'当前物料:"'+ itemName +u'"未查询到库存数据' resultStr = resultStr % (msg['FromUserName'],msg['ToUserName'],str(int(time.time())),'text',strs) else: resultStr = resultStr % (msg['FromUserName'],msg['ToUserName'],str(int(time.time())),'text',u'感谢您关注【微人人公众号】\n目前功能以下:【1】 库存查询;') return resultStr
注意:咱们仍然是经过业务逻辑层的查询函数调用来得到库存信息,而后返回给“微信”的查询用户。代码只是调用了BIZ层接口,做为“微信”接口的开发人员不须要再考虑业务逻辑层具体的的逻辑实现。这样咱们也能够把“微信”看作MVC里view的一种展示模式。json
代码更新到云,咱们就能够在微信端进行库存查询了。以下图:微信
本章节咱们演示了库存查询是如何快速扩展到支持微信查询的,因为业务逻辑层的代码是共用的,也就意味着真正的库存查询的业务逻辑对于微信接口的开发人员来讲就是一个黑盒,开发人员只管调用biz层接口就能够完成功能从网页查询到微信查询的扩展。函数
进一步若是开发团队内部定义了本身的信息封装格式,微信端的库存查询与extjs网页端库存查询就能够统一调用一个服务接口。好比:前面咱们发布的getInventoryByItemName服务,期返回json数据格式。这样客户端开发人员均可以不用知道服务端是如何实现的,只管调用服务便可。这样的编程模式就能够实现界面展现层与服务层开发的彻底分离,进一步下降系统的耦合。统一的服务层来实现不一样终端访问结果的一致性,提升系统的总体开发效率。post