现在我们的生活中基本都离不开两种支付方式,微信和支付宝支付,现金支付方式越来越少。 前段时间因为项目所需,特意了解学习了一些,记录在此,愿对有缘人有所参考价值。
了解两大主流支付。
1、付款码都是一串18位的数字; 2、付款码都会在一段时间后自动刷新; 3、修改手机系统时间,发现支付时会出现支付失败的情况; 4、手机未联网情况下,付款码只能使用一次,下一次使用时需要联网刷新。
流程分析
1、付款码为什么要18位数字呢?做成其它的不可以吗?比如汉字,英文字母,各种符号等。经测试,二维码如果存在过多的字符,扫码枪识别率会非常低,所以我猜测纯数字作为付款码是为了提高码的识别率。 2、付款码在一段时间后刷新。这里主要是从付款码安全考虑,假设用户的付款码被他人拍照了,然后一直不过期,那不是他人可以一直用这付款码支付了吗。 3、修改系统时间出现支付失败,这里主要也是从安全的角度设计,对手机时间的检测,如果在一个时区内,手机端的时间与服务端时间相差太大,说明用户的支付出现异常。 4、离线支付只能使用一次,实现离线支付方便人们在生活中网络环境较差的情况下可以使用支付,但是现在网络基本都是很普及的,从网络普及面的角度来说,一个人不可能一直处在网络环境很差的地方,如果离线支付可以支付多次的话,对用户资金安全也是构成威胁的。
实现 通过上面的二维码支付分析,现在开始思考如何来具体实现一个完整的二维码支付。 服务端设计 1、服务端根据用户生成一个支付授权码,授权码根据时间戳、用户信息生成; 2、用户支付时加密授权码传给服务端,服务端根据授权码判断用户是否是异常支付; 3、完成支付,扣款; 客户端设计 1、客户端拿到授权码后根据时间戳加密生成相应的付款码; 2、用户展示付款码,商户扫码; 3、服务端接收到付款码校验是否异常,完成支付。 流程图如下: