基于微信接口的中医体质判定系统设计与实现
2019-01-02孙振楠
孙振楠
(江苏联合职业技术学院镇江分院 信息工程系,江苏 镇江 212016)
中医将人的体质分为9类,其中平和体质处于相对健康状态,阳虚、阴虚、气虚、痰湿、湿热、血瘀、特禀、气郁等体质处于亚健康状态。中医辨证治疗即基于个人体质。个人体质不局限于某一种,且随生活、饮食习惯的变化而表现不同,需要定期或不定期测试,并进行调节[1]。中医体质判定系统通过微信接口认证,减少注册环节,定时提醒用户测试,跟踪体质变化,提高用户黏度。系统根据预设测试题的得分判定体质类别,并提供打印接口。系统分析测试数据通过图形化显示,为未登录用户提供预判参考。
1 关键技术
1.1 微信接口
第三方登录基于用户在第三方平台的账号和密码,可以降低用户的注册和登录成本,提高用户黏度。OAuth 2.0授权框架支持第三方应用程序获得对HTTP服务的有限访问权,通过协调,实现资源所有者和HTTP服务之间的交互[2]。微信OAuth 2.0授权登录中,第三方获取用户的接口调用凭证(access_token),实现获取微信用户基本开放信息功能等。微信授权登录流程如图1所示[3]。
图1 微信授权登录流程
1.2 系统判定算法
系统以国家中医药管理局《中医药健康管理服务技术规范——老年人中医药健康管理服务记录表》33项问题为量表采集信息,平和体质包括5道测试题,其中1道为专属测试题,其他8种体质均包括4道测试题,各有5个选项,即“没有、很少、有时、经常、总是”,分别对应1分、2分、3分、4分、5分。系统简化设计,为测试题添加标签,避免重复,按顺序排列,避免定式思维。
1.3 jQuery打印插件
系统测试结果打印使用jQuery的轻量插件jqprint,参数配置如表1所示。
表1 jqprint参数
1.4 数据分析
根据我国现行年龄划分标准,分为童年(0—6岁)、少年(7—17岁)、青年(18—40岁)、中年(41—65岁)、老年(66岁以上)5个年龄段。系统针对老年定义用户特征集合A(性别、年龄)、体质集合B,根据用户性别、年龄特征统计各种体质比例并以图形显示,为未登录用户提供参考依据。
2 系统设计
中医体质判定系统包括注册/登录、系统判定、结果呈现、统计分析等模块,系统流程图如图2所示。
“注册/登录”模块作为系统的入口与微信接口对接,记录、跟踪用户的判定结果,便于用户实时查看判定结果、调节措施等。该模块记录用户姓名、性别、年龄等信息,系统分析数据源自用户的判定结果。
系统判定模块包括两种算法,即
(1)
(2)
图2 系统流程图
算法(1)中,j取值1到8分别表示阳虚、阴虚、气虚、痰湿、湿热、血瘀、特禀、气郁等体质;i为测试题目序号;ωi为权值,ωi=1,表示包含第i题,ωi=0,表示不包含第i题;xi表示用户测试第i题的得分。根据标签将8种体质对应的题目分类,汇总分值。根据条件判定体质类别,Pj≥11即为该体质,Pj=9或Pj=10为倾向该体质,Pj≤8则不属于该体质。
算法(2)中,P9即平和体质有一道专属测试题,记为k,通过标签识别,另外4道测试题来自于其他8种体质,需要反向记分,即6-xi。P9≥17且Pj≤8,则是平和体质;Pj≥17且Pj=9或Pj=10,则倾向是平和体质;其他情况则不属于平和体质。
体质特征、调节原则、调节措施通过打印接口发送至打印机或以短信方式将链接发送到用户手机端,以指导用户健康调理。
统计分析模块,未登录用户同样可以查看,根据自身情况参照分析结果做出预测。
3 系统实现
3.1 微信接入实现
用户在微信客户端访问系统页面,公众号通过微信网页授权机制,获取用户基本信息,实现业务逻辑。系统实现微信授权登录的核心代码如下:
//第一步:通过回调地址获取code
string code = Request.QueryString["code"];
//第二步:通过code换取网页授权access_token
string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appid+"&secret="+AppSecret+"&code="+code+"&grant_type=authorization_code";
string html = MyCLib.NetClass.SendUrl(url,System.Text.Encoding.UTF8);
NameValueCollection tokenJSON = ParseJson(html);
ictionary
string access_token = tokenJSON["access_token"];
string openid = tokenJSON["openid"];
//第三步:拉取用户信息(需scope为 snsapi_userinfo)
url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid + "&lang=zh_CN";
html = MyCLib.NetClass.SendUrl(url, System.Text.Encoding.UTF8);
Dictionary
Response.Write("");
其中appid是公众号的唯一标识,AppSecret是公众号的appsecret。
通过微信接口登录系统,获取用户信息的方法如下:
string state = Request.QueryString["state"];
string code = Request.QueryString["code"];
var cookie = Request.Cookies["weixinState"];
if (cookie.Value == state)
{
//通过带的code获取access_token和openid等信息
var cre = WeiXin.GetWebLoginAccessToken(code);
//通过access_token和openid获取微信用户的基本信息
var userInfo = WeiXin.GetWebUserInfo(cre.access_token, cre.openid, LangType.zh_CN);
}
系统数据库记录用户基本信息,免去用户注册过程。
3.2 数据分析
系统调用TCM_Statistics()方法。根据用户的性别进行分类,根据用户出生日期进行年龄段汇总,计算比例并绘制图示。TCM_Statistics()方法流程如图3所示。
图3 系统数据分析流程图
4 系统展示
系统界面采用扁平化设计,增强用户体验。系统通过浏览器打开如图4所示的主界面,用户在未测试前可查看各种体质特征、调节原则、调节措施等,如图5,图6所示,预判体质倾向。
用户通过微信接口登录系统后测试界面如图7所示,测试结果如图8所示。用户可查看各种体质特征、调节原则、调节措施。
图4 系统主界面
图5 调节措施
图6 体质数据分析
图7 测试界面
图8 测试结果
5 结束语
基于微信接口的中医体质判定系统减少了注册环节,保存了用户的测试记录,并将体质特征、调节原则、调节措施打印出来,以指导用户健康调理。今后将实现历史测试结果查询与比对功能,提升用户界面的友好性。