人生中第一次准备开发网站的支付系统,有什么安全事项需要注意的?

2017-05-18 11:07:47 +08:00
 Reign

做外贸站,有流量靠山,所以成交量预计应该还是不错,而且从用户反馈情况来看,应该很有前景,现在准备薅欧美资本主义羊毛,开始出售虚拟服务,准备实施的方案为:用户按月付费订阅我们的服务。目前就准备着手开发网站的支付系统了,但有几点需要疑问:

  1. 国外开发是不是一个 PayPal 打天下就行,如果不行,那这么多支付系统选哪个好?有没有统一集成的接口简单方案?
  2. 涉及到金钱,最关键的就是安全问题,用户注册我的网站,我准备的是将 uid 用 php 的可逆式加密生成 cookie 来检测客户端,但是这样的话,另一个用户拷贝走这个 cookie 不就盗用账户了么?怎么防止这种行为?
  3. 用户 cookie 一般的过期时间设置多少合适
  4. 存储到 MySQL 中的金钱信息是否需要可逆式加密?
  5. 是否一定需要 https ?
  6. 如果最坏的情况,最终这个项目失败,怎样退款给那些付费但还未到期的用户?

另外还有哪些需要注意的求好心 V 友提示一下避免踩坑,第一次开发支付系统难免有点摸不着头脑,求好心 V 友解答一下,谢谢

8492 次点击
所在节点    程序员
58 条回复
jellybool
2017-05-18 11:13:23 +08:00
国外的话,stripe 不是最好的选择么
littleylv
2017-05-18 11:16:07 +08:00
1、基本 paypal 就行了,paypal 有官方的 sdk 可以用
2、正常的网站怎么登陆就怎么登陆,跟金钱不金钱没关系,都要注重安全问题
3、同上
4、不需要
5、涉及到支付的,强烈建议 https
6、paypal 系统后台可以操作
qinxi
2017-05-18 11:23:11 +08:00
锁锁锁锁.

对账.
Reign
2017-05-18 11:24:08 +08:00
@littleylv 谢谢,但最后一点搞不明白,用户的支付结果存储在我的 mysql 中,我怎么通过 PayPal 来返给用户余额?
littleylv
2017-05-18 11:30:23 +08:00
@Reign #4 不,客户的支付结果不仅仅只在你的系统中,paypal 也有,客户可以在他的 paypal 中心看到。
所以,针对订阅制的服务,客户也可以在他的 paypal 账户中心随时取消订阅,因此你的系统中需要有个 hook 让 paypal 通知你“客户在 paypal 取消订阅了,你把你系统的信息也改成取消吧”。
当然,你也可以在你的系统中做取消的功能,客户可以在你的系统里取消,系统再调用 paypal 取消订阅的接口去取消。
johnlui
2017-05-18 11:47:24 +08:00
钱的单位要用分。
kulove
2017-05-18 11:53:15 +08:00
权限控制好别被绕过,比如优惠券是否本人,后台计算订单金额。
koolob
2017-05-18 11:56:56 +08:00
好好研究支付渠道的文档,各种情况的回调都要处理,支付成功、争议、退款等。
记录用户订单产生变化时的当时用户状态,这样有客诉过来时,有据可查。
airyland
2017-05-18 11:58:50 +08:00
做好权限校验,做好金额校验,金额用分,不要出现前端可改价格这类错误。
duola
2017-05-18 12:04:57 +08:00
希望楼主避开这一抗,PayPal 环境必须是线上的,本地就拿不到参数的。
kmahyyg
2017-05-18 12:29:16 +08:00
paymentwall 国内国际通用
paw
2017-05-18 12:31:02 +08:00
注意不要直接用浮点数存 xx.xx 元...
gamexg
2017-05-18 12:35:26 +08:00
2.可以绑定 ip,服务器发现客户端 ip 变更后敏感操作要求重新登录。
zocome
2017-05-18 13:44:59 +08:00
@paw #11 不用浮点数存金额 请问是出于什么考虑呢?
ljy2010a
2017-05-18 13:55:09 +08:00
国外小心信用卡使用
slime7
2017-05-18 14:00:43 +08:00
@zocome 用 xx.xx 元,到时候合计会不准
hshw
2017-05-18 14:05:27 +08:00
先拿到 ICP 许可证再说 (不是备案)
isno
2017-05-18 14:07:17 +08:00
2. 注意 JS 注入,所有外界输出的信息在网站输出的时候做一次 html 转义
4. 存储到 mysql 不用再加密
6. 支付后保存 支付订单 ID 等信息, 支付网站有退款接口的

价格信息在数据结构建议用 int, 单位最小分, (用浮点数会有 IEEE754 浮点数误差问题, 容易出错)
gdtv
2017-05-18 14:13:04 +08:00
@isno “价格信息在数据结构建议用 int ” 学到了,感谢。
imnpc
2017-05-18 14:34:54 +08:00
不要考虑 paypal
用 stripe

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/362162

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX