V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
aiqier
V2EX  ›  Python

python 做的支付模块,如何保证“可靠”

  •  
  •   aiqier · 2015-10-22 18:49:14 +08:00 · 5306 次点击
    这是一个创建于 3102 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家应该都知道, python 本身不适合用来开发支付相关的模块。
    相比之下,静态语言 java ,要适合的多,但是我们现在的系统,支付相关的模块,就是由 python 来做的,
    那么就目前而言,我要如何在用 python 的同时,保证这个项目“可靠”
    首先我认为:动态语言没有静态类型检查,所以在项目做大的时候,项目的维护成本会变的越来越高。支付系统的安全性很重要,而动态语言过于灵活,不易保证,他可能在做业务系统上会快很多。
    我想请教一下:
    1.除了我说的,用 python 做一个支付相关的系统,会有的那些风险,还会有哪些风险。
    2.我如何在使用 python 的前提下,竟可能的保证项目”可靠”。
    这个项目包括付款渠道,收款渠道。钱包,收银台等。逻辑不是很复杂,大概 2w 多行的代码。

    30 条回复    2015-10-23 16:12:05 +08:00
    leavic
        1
    leavic  
       2015-10-22 19:02:01 +08:00
    类型我倒不觉得有问题,其实 python 是强类型语言,关键是 python 并没有办法真正的隐藏接口,现在都是靠着 PEP 规范修改接口名字来做的,别人要不遵守这个规则,想访问一样可以访问。
    test0x01
        2
    test0x01  
       2015-10-22 19:58:05 +08:00 via Android
    任何语言项目的维护都是要靠程序员自己。 靠语言根本不靠谱,你说 java 厉害吧,程序员要是不靠谱能把你搞死。
    surfire91
        3
    surfire91  
       2015-10-22 20:17:31 +08:00
    "大家应该都知道, python 本身不适合用来开发支付相关的模块。"
    我就不知道 python 不适合用来开发支付相关的模块,也不知道为什么不适合。
    楼主你知道吗?
    imn1
        4
    imn1  
       2015-10-22 20:20:58 +08:00
    大家是谁?
    binux
        5
    binux  
       2015-10-22 20:24:31 +08:00   ❤️ 1
    我怎么不知道 python 不适合开发支付相关的模块?
    没有类型检查, 最多给你的余额改成 [100, 3], 或者执行到一半抛出异常. 说得好像静态类型检查自带 UPS 不会瞬间断电重启一样.
    该算错帐的, 难道静态类型检查了就不算错了?
    PythonAnswer
        6
    PythonAnswer  
       2015-10-22 20:31:01 +08:00
    支付模块需要什么样的功能?性能?

    你还没分析,就说大家认为 xx 不适合做 xx...
    stackpop
        7
    stackpop  
       2015-10-22 20:35:31 +08:00
    和语言没有关系。
    之前在猪厂用 python 做过支付模块,接入了银联 /支付宝 /stripe 等第三方渠道做支付, 服务千万级的游戏用户,没有出现过账务错误。
    wkdhf233
        8
    wkdhf233  
       2015-10-22 20:49:12 +08:00
    动态语言过于灵活无法保证安全性,这逻辑也是醉了
    kaneg
        9
    kaneg  
       2015-10-22 20:55:39 +08:00
    这不就和打错字怪键盘一样的逻辑吗
    domty
        10
    domty  
       2015-10-22 21:07:56 +08:00
    安全性跟你用啥语言没关系吧。
    首先保证你的业务流程没有空子让别人钻。
    技术角度的安全交给专业的安全人员去考虑,比如框架上的,协议上的,系统上的。
    再不济还可以抛异常强制回滚整个业务呢。
    RitianZhao1988
        11
    RitianZhao1988  
       2015-10-22 21:09:59 +08:00
    槽点太多,喷不过来
    janxin
        12
    janxin  
       2015-10-22 21:15:34 +08:00
    如果你得想类型检查,可以考虑上支持 Type Hints 的 Pycharm ?
    imlonghao
        13
    imlonghao  
       2015-10-22 21:15:36 +08:00
    我不是大家中的一员,我觉得只有写不好的代码没有很糟糕不好的语言
    ipconfiger
        14
    ipconfiger  
       2015-10-22 21:31:48 +08:00
    楼举神逻辑,第一句大家都知道不知道楼举是怎么知道的。

    一种我代表全国人民的既视感
    111111111111
        15
    111111111111  
       2015-10-22 21:35:48 +08:00
    "大家应该都知道, python 本身不适合用来开发支付相关的模块。"

    我怎么不知道?听谁说的
    aiqier
        16
    aiqier  
    OP
       2015-10-22 23:05:42 +08:00
    其实我觉得,如果要是不能客观分析我问的问题,就不要回答的,天天喷累不累,天天说这个是人的问题,那个是人的问题,买不起房是人的问题。我只是说动态语言,太活了,如何在一定程度上能“框住”设计懂么?做一个项目的经费就那么多,哪里招的起那么多 python 大神?那时候还不是靠 java 的静态类型检查过滤到一些错误再说,有一天你走了,别人接手这个项目,是 java 容易维护还是 python 容易维护?有些东西就是不能用 python 做的 ok ?那么既然是人的问题,那么为啥不用 lisp 写, lisp 多牛逼!写不出来也是人的问题是吧?
    https://www.quora.com/Why-does-Google-prefer-the-Java-stack-for-its-products-instead-of-Python/answer/Robert-Love-1?srid=pu2I&share=1
    aiqier
        18
    aiqier  
    OP
       2015-10-22 23:19:34 +08:00
    @domty 在知乎上看过类似的讨论,单纯说语言不是问题,是人的问题,完全没意义,类似说“找不到工作是人的问题”。我 python 还算不错,但是仔细去看 java 的写的一些东西,安全系数要高很多。 http://www.zhihu.com/question/21017354 ,我觉得一部分答案还是有道理的。
    @leavic
    @test0x01
    @binux
    @stackpop
    binux
        19
    binux  
       2015-10-22 23:26:41 +08:00   ❤️ 1
    @aiqier 蛤?! 如果要是不能客观提出你的问题, 就不要提问.
    geeklian
        20
    geeklian  
       2015-10-23 00:13:57 +08:00
    醉了,醉了,一个主观问题何必要客观的回答?
    业务流程没漏洞就 ok 了,真要是程序语言有什么安全漏洞,那就认栽吧,好像有也是 java 多。
    另外: python 现在也可以支持静态类型检查,有个库叫 typing.py
    SYP
        21
    SYP  
       2015-10-23 00:23:40 +08:00
    @geeklian 这种抽象层次很高的语言安全漏洞是会比低级语言多的,这种意义上来说确实不适合。
    xiazi
        22
    xiazi  
       2015-10-23 08:51:42 +08:00   ❤️ 1
    看了 Why-does-Google-prefer-the-Java-stack-for-its-products-instead-of-Python:
    里面提到的 python 缺点实际只有两点 Concurrency 和 Performance(完全没有提动态类型这些), 而两点实际就是性能问题, 而性能问题就是因为 GIL, 而现实中需要大量占用 cpu 的应用并不多(支付模块中应该不会存在这类问题).
    XianZaiZhuCe
        23
    XianZaiZhuCe  
       2015-10-23 09:04:34 +08:00
    喷子真多
    est
        24
    est  
       2015-10-23 09:29:40 +08:00
    LZ 挖坑机器人。大家不要理会。人的固有偏见为啥大家要白费力气去纠正呢。偏激就要放纵他偏激一辈子。
    mengzhuo
        25
    mengzhuo  
       2015-10-23 10:01:00 +08:00
    ╮(╯▽╰)╭

    无稽之谈
    我司 IAP 模块就是 Python 写的,还是 mongodb 做的存储
    收入、对账、从来没有错过~~
    youxiaer
        26
    youxiaer  
       2015-10-23 10:14:33 +08:00   ❤️ 1
    @aiqier 支付公司用 java 的确实比较多,但是动态语言做支付也是可以的,首先得看业务复杂度,其次就是开发人员对所使用的语言的掌握程度,即使使用 java ,如果出现逻辑错误也是很危险的。 php 就是动态语言,用 php 做支付的也不少。
    domty
        27
    domty  
       2015-10-23 10:37:35 +08:00   ❤️ 1
    @aiqier
    你说的这些东西实际上涉及的是技术选型和技术架构,譬如开发人员的成本,开发后产品的负载能力,代码的维护成本。你说 python 是动态类型,维护成本高,在高访问量下响应慢,我觉得的都有道理,但是这和你用它开发产品的安全性低没啥必然联系。
    作为一个程序员的角度,我只能尽可能的保证我开发的业务流程尽可能没有漏洞就够了,该效验的地方效验,该加密的地方加密,让恶意的请求被过滤掉就够了。这些业务代码,即使换门开发语言我也能轻松写出来。
    aiqier
        28
    aiqier  
    OP
       2015-10-23 15:26:23 +08:00
    @geeklian 能够天生的支持静态类型检查,和用库去实现类型检查是两码事,类似说“ c 也能写出面相对象的代码”,那和 java 直接支持一样么?
    shenqiu2015
        29
    shenqiu2015  
       2015-10-23 16:09:25 +08:00
    java 那套严苛的规则是用来约束猪队友的,只有猪队友,才离了规则就不会走路吃饭
    shenqiu2015
        30
    shenqiu2015  
       2015-10-23 16:12:05 +08:00
    java 的静态类型检查有利于 IDE 智能感知,有利于加快编译运行速度。但是跟业务逻辑没有关系,没有了静态类型检查就不会写业务逻辑?这个说法不成立。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2925 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 03:28 · PVG 11:28 · LAX 20:28 · JFK 23:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.