2019年
软      件
2019, V ol. 40, No. 3
作者简介: 蒋嵩林(2000-),男,本科生,主要研究方向:计算机科学与技术。
基于支付平台的在线投票系统
蒋嵩林
(兰州大学 信息科学与工程学院,甘肃 兰州  730107)
摘  要: 现代社会中,网络投票由于存在欺诈投票、数据篡改、投票数据丢失、结果无法验证等问题,一直饱
受用户诟病。而对于以支付为代表的移动支付,由于其安全便捷性,一直饱受用户赞誉。如果将这两者结合起来,将会碰撞出怎样的火花呢?本系统基于支付构建投票系统,每次投票时支付象征性的金额,同时发起退款确认支付的真实性,并利用了历史交易记录的可查询性,创造性地打造了一个安全有保证的投票系统,为用户提供优质的投票服务同时也降低了开发成本。
关键词: 投票系统;支付
中图分类号: TP309.2    文献标识码: A    DOI :10.3969/j.issn.1003-6970.2019.03.022 本文著录格式:蒋嵩林. 基于支付平台的在线投票系统[J]. 软件,2019,40(3):118-121
Voting System Based on Wechat Pay
JIANG Song-lin
(School of Information Science & Engineering, Lanzhou University, Lanzhou 730107, China )
【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 dis-tinguished due to its safety and convenience. If we combi
ne 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 中的
蒋嵩林:基于支付平台的在线投票系统
119
《软件》杂志欢迎推荐投稿:cosoft@vip.163
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名用户,这让那些刷票者手中大量未经实名认证的号顿时无用武之地,大大提高了投票的实名性,杜绝了大量刷票的行为。
第40卷  第3期    软    件
120
《软件》杂志欢迎推荐投稿:cosoft@vip.163
图1  支付业务流程时序图[5]
Fig.1  Wechat payment processing sequence diagram [5]
数据库中仅记录投票成功的加密订单号,这样,即使投票数据库发生了泄露,他人也将无法获取到任何有效信息[7]。
投票结束后,系统还将自动核对每一个订单号的真实有效性,防止数据发生篡改。
这样的投票系统还将投票服务范围增加到了线下,使用时,只需扫描二维码,向你想要投票者支
付象征性的费用,就可以为你的理想候选者投上您神圣的一票。
本投票系统工作流程如下:
3.1  预处理阶段
首先,同一般支付付款流程,本系统首先生成投票图文消息链接或二维码,并将其展示给用户。
当用户点击消息或扫描二维码后,将在内
蒋嵩林:基于支付平台的在线投票系统
121
《软件》杂志欢迎推荐投稿:
cosoft@vip.163
图2  退款状态变化[6]
Fig.2  Change of refund status [6]
置浏览器中打开投票目标的详细信息页面,同时客户端在网页内请求生成投票订单。
随后商户后台系统自动生成投票订单,并调用统一下单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]. pay.weixin.qq/wiki/doc/api/jsapi.php?chapter=7_4. [6] 腾讯. 支付开发文档[OL]. (2019-01-10)[2019-01-21]. pay.weixin.qq/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 sm
art contracts[C]. Security and Privacy (SP), 2016 IEEE Symposium on. IEEE, 2016: 839-858. [8] 腾讯. 支付开发文档[OL]. (2019-01-10)[2019-01-21]. pay.weixin.qq/wiki/doc/api/jsapi.php?chapter=7_1. [9]
党京, 孙弋. 基于区块链的电子投票系统关键技术的实现[J]. 软件,  2018, 39(11): 140 144.
[10] 李静彧, 李兆森. 基于区块链存证的电子数据真实性探讨
[J]. 软件, 2018, 39(6): 109-112.