python 做的支付模块,如何保证“可靠” - V2EX
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 6047 次点击
    这是一个创建于 3641 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家应该都知道, 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/span>
    ()

    无稽之谈
    我司 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     Solana     5971 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 02:48 PVG 10:48 LAX 19:48 JFK 22:48
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86