基于微信支付平台的在线投票系统
2019-10-08蒋嵩林
蒋嵩林
摘 要: 现代社会中,网络投票由于存在欺诈投票、数据篡改、投票数据丢失、结果无法验证等问题,一直饱受用户诟病。而对于以微信支付为代表的移动支付,由于其安全便捷性,一直饱受用户赞誉。如果将这两者结合起来,将会碰撞出怎样的火花呢?本系统基于微信支付构建投票系统,每次投票时支付象征性的金额,同时发起退款确认支付的真实性,并利用了微信历史交易记录的可查询性,创造性地打造了一个安全有保证的投票系统,为用户提供优质的投票服务同时也降低了开发成本。
关键词: 投票系统;微信支付
【Abstract】: In contemporary society, there are problems existed in the online voting systems such as repeated fraudulent voting, data tampering, loss of voting data, and failure to verify the outcome of the voting data, and these problems causes inconvenience to the users. Meanwhile, the mobile pay systems represented by Wechat pay are distinguished due to its safety and convenience. If we combine the voting system with Wechat pay, a huge difference will be made. My system is based on Wechat pay. When you want to vote, you just need to pay a little, then a refund will give to you to ensure that the voting is real. The system can double check the voting record by checking the trading record saved on the Wechat Sever. As a result, the system provides users with a safe and fair environment to vote and it also reduces the developing cost.
【Key words】: Voting system; Wechat pay
0 引言
近些年,由于移动互联网的快速发展,以及网络民主的流行,网络投票变得越发流行起来。同时,随着微信用户数的不断增长,基于降低成本的需要,越来越多的网络投票基于微信开发平台来实现。但是现今网络投票仍存在投票管理和服务需求的多样化、系统规模的扩大化,伴随着重复投票、欺诈投票、数据篡改、结果无法验证等数据的客观性问题和投票后数据安全性问题得不到解决。因此本文借鉴了微信支付付款模式,并基于这种模式开发出了安全可靠的投票系统。
1 現状分析
1.1 常用微信防刷票技术[1]
现代同类基于微信平台防刷票技术一般有如下几种:①OpenID验证。OpenID是加密后的微信号,每个用户对每个公众号的 OpenID是唯一的,可以通过OpenID来判断一个用户是否已经投过票,以此来限制同一个微信用户重复投票。②限制关注公众号才能投票。在投票时通过微信接口先判断用户有没有关注公众号,没有关注则跳转至关注页面,此方法可以防止没有关注公众号的“僵尸用户”刷票。③判断上一级页面。通过http请求header中的
Referer变量,判断投票操作的上级页面,可以防止直接发送请求来进行投票的部分自动投票软件。④判断是否在微信客户端上操作。通过请求头部信息中的agent变量来判断是否在微信客户端中打开投票页面。拒绝非微信客户端上的请求,以防止部分自动投票软件。⑤判断IP地址或MAC地址,通过获取用户的IP或MAC地址,限制用户的刷票行为。
1.2 技术缺陷
对于①OpenID验证技术,一般投票平台都会同时承接多项投票业务,如果其中一项投票的投票日志记录了投票者的OpenID,并且发生了泄露,或者投票者通过侦听网站的手段获得了OpenID,那么刷票者便可以借用这些OpenID刷本站其他项投票业务的票。
对于②限制关注公众号才能投票,刷票者如果拥有大量微信账号,完全可以用一些“按键精灵”或者更高级的方法,模拟用户手动关注公众号后再进行刷票。并且,关注公众号本身就有吸引粉丝的嫌疑,势必招来用户的厌恶。
对于③判断上一级页面和④判断是否在微信客户端上操作,这两种方法更不值得一提,③的方法,通过抓包,观察投票时上一级页面的特点,即可破解[2]。而④的方法,可以直接用爬虫模拟User-Agent头就可以轻松破解[3]。
对于⑤判断IP地址或MAC地址,现有IP代理和伪装MAC地址的技术已经使这两种方法不堪一击。
同样,还有一些防刷票的方法,它们或者可以被轻松模拟破解,或者搜集了过多的用户信息[4],大大增加了用户投票程序的复杂度,对正常投票用户比较不友好,而且如果服务器不够安全,有很大的个人隐私泄露风险。
2 微信支付设计模式
移动支付由于其便捷性与安全性,一直以来广受用户青睐。微信平台的支付系统,由于其成熟的操作流程,同时依托其强大的社交网络,成为移动支付市场的一方垄断者。
微信支付的流程如下。
2.1 预处理阶段
商户平台首先生成付款图文消息链接或二维码,并将其展示给用户。
当用户点击消息或扫描二维码后,将在微信内置浏览器中打开商户H5页面,同时微信客户端在网页内请求生成支付订单。
随后商户后台系统自动生成商户订单,并调用统一下单API,微信支付系统生成预付单随后返回信息给商户后台系统。
商户后台系统生成JSAPI页面调用的支付参数并签名,将prepay_id, paySign等支付参数反馈到微信客户端。
2.2 发起支付
当用户点击发起支付后,微信客户端将向微信支付系统JSAPI接口请求支付,微信支付系统将检查参数合法性和授权域权限,通过后便会返回验证结果,并要求支付授权。此时微信客户端便会提示用户输入密码。
2.3 确认支付
当用户输入了支付密码,微信客户端便会直接向微信支付系统提交支付授权,微信支付系统会验证支付授权,并分别向微信客户端和商户后台系统发送支付结果消息。
具体流程如图1所示。
2.4 退款
当用户误操作或者因其它原因需要退款之时,商户可以通过微信支付API提交退款申请,退款状态变化如图2所示。
3 基于微信支付平臺的在线投票系统
系统将借用微信支付模式,采用“客户端——投票服务器——第三方验证服务器”的构架,将微信支付系统作为第三方验证服务器,每次投票时用户需向投票支付系统支付象征性的费用(如1毛或1分),同时,当系统将投票支付订单号记录在案,对订单号产生账号进行判断,如果该账号已经投过票,则将投票记为无效,并发起退款,如果该账号尚未投票,则立刻发起退款,如退款成功则将用户的投票标记为有效,并记录在数据库中,否则标记为无效,来确保支付信息在传输过程中不被篡改。这样设计的用户投票支付系统既具有可靠性(只要微信服务器不出故障),又同时具有方便性,因为如今移动支付的普及性。此外,微信支付需要实名认证,且同一个身份证最多只可认证5名用户,这让那些刷票者手中大量未经实名认证的微信号顿时无用武之地,大大提高了投票的实名性,杜绝了大量刷票的行为。
投票结束后,系统还将自动核对每一个订单号的真实有效性,防止数据发生篡改。
这样的投票系统还将投票服务范围增加到了线下,使用时,只需扫描二维码,向你想要投票者支付象征性的费用,就可以为你的理想候选者投上您神圣的一票。
本投票系统工作流程如下:
3.1 预处理阶段
首先,同一般微信支付付款流程,本系统首先生成投票图文消息链接或二维码,并将其展示给用户。
当用户点击消息或扫描二维码后,将在微信内置浏览器中打开投票目标的详细信息页面,同时微信客户端在网页内请求生成投票订单。
随后商户后台系统自动生成投票订单,并调用统一下单API,微信支付系统生成预付单随后返回信息给投票系统。
投票系统生成JSAPI页面调用的支付参数并签名,将prepay_id, paySign等支付参数反馈到微信客户端。
3.2 发起投票
当用户点击发起投票后,微信客户端将向微信支付系统JSAPI接口请求支付,微信支付系统将检查参数合法性和授权域权限,通过后便会返回验证结果,并要求支付授权。此时微信客户端便会提示用户输入密码[8]。
3.3 确认投票成功
当用户输入了支付密码,微信客户端便会直接向微信支付系统提交支付授权,微信支付系统会验证支付授权,并分别向微信客户端和投票系统发送支付结果消息。投票系统在收到消息后会立刻发起退款,稍等片刻后,如果微信支付系统确认退款成功,则将支付订单号记录在数据库中,以备校验[9],同时,向用户发送提示,确认投票成功。
3.4 投票最后校验
当投票结束,系统立即开始查询保存在微信服务器上的历史交易订单号,并和投票系统服务器本地进行同步,防止投票系统被入侵篡改[10]。
4 结束语
微信支付与网络投票相结合,经过巧妙的设计,有效解决了投票实际使用过程中出现的问题,实现了投票结果可追溯。最终实现了投票系统的安全、公平、公正,并且较好地利用了现有资源,降低了开发成本。
参考文献
[1]肖卓明, 陈宁. 网络投票防刷票技术探讨[J]. 科技与创新, 2018, 20: 64-65.
[2]符天, 汪志, 王贞. Web服务的SQL注入攻击及防御研究[J].软件, 2018, 39(4): 44-47.
[3]胡云峰, 陈皖芬. 伪造HTTP请求报文协议头对网络投票系统刷票的可行性研究[J]. 文山学院学报, 2012, 25(6): 69-71.
[4]吴三柱. 在线投票系统中防刷票技术研究[J]. 价值工程,2018,22:203-204.
[5]腾讯. 微信支付开发文档[OL]. (2019-01-10)[2019-01-21]. https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4.
[6]腾讯. 微信支付开发文档[OL]. (2019-01-10)[2019-01-21]. https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5
[7]Kosba A, Miller A, Shi E, et al. Hawk: The blockchain model of cryptography and privacy-preserving smart contracts[C]. Security and Privacy (SP), 2016 IEEE Symposium on. IEEE, 2016: 839-858.
[8]腾讯. 微信支付开发文档[OL]. (2019-01-10)[2019-01-21]. https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1.
[9]党京, 孙弋. 基于区块链的电子投票系统关键技术的实现[J]. 软件, 2018, 39(11): 140144.
[10]李静彧, 李兆森. 基于区块链存证的电子数据真实性探讨[J]. 软件, 2018, 39(6): 109-112.