类似于停车场收费的问题,怎么结算??、

现在有这样的一个需求,一直搞不明白最优解:
类似于停车场收费项目,现在使用微信支付充值了一笔 10 元的,又充值了一笔 10 元,现在用户使用了 11 元,要需用微信退款,就是说现在退款9元,该怎么设计(程序哪里来哪里去,不使用微信付款到零钱)
我的问题:他现在使用了 11 元,我只能计算,一次充值了多少钱,从里面扣,不够,把这笔扣完,够了,下次再扣。这个扣的思路有点复杂,怎么设计比较好

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 25
AloneUtopia

感觉你们的业务逻辑设计的问题...

根据你的描述 用户是先充值后消费,用户每次消费使用的是自己的余额, 那么如果用户要把余额退回 那该功能的本质就应该是提现,而不是通过用户订单啥的处理计算实现所谓的 退款

退款是退款,提现是提现,不要把本质搞混了。

就好比你在支xx中充值了100,,然后使用支xx余额在淘x消费了两笔订单,共计90,剩余10,后面需要把支xx余额中的10块钱拿出来,那你只能是提现

3年前 评论
不正 3年前

针对最后一笔订单退差额,原路返回

3年前 评论
sunny123456 (楼主) 3年前

啥停车场收费设计这么....nt

3年前 评论
sunny123456 (楼主) 3年前

我想知道 用户使用了 11 元 这个怎么出现的

3年前 评论
sunny123456 (楼主) 3年前
boolstone (作者) 3年前
sunny123456 (楼主) 3年前

没有会员卡充值这样的机制吗,一次性充完消费后余额就要退回去?

3年前 评论
sunny123456 (楼主) 3年前
AloneUtopia

感觉你们的业务逻辑设计的问题...

根据你的描述 用户是先充值后消费,用户每次消费使用的是自己的余额, 那么如果用户要把余额退回 那该功能的本质就应该是提现,而不是通过用户订单啥的处理计算实现所谓的 退款

退款是退款,提现是提现,不要把本质搞混了。

就好比你在支xx中充值了100,,然后使用支xx余额在淘x消费了两笔订单,共计90,剩余10,后面需要把支xx余额中的10块钱拿出来,那你只能是提现

3年前 评论
不正 3年前

@AloneUtopia 不好意思,看到你的回复了,但是帖子中一直无法查看,不知道怎么回事

3年前 评论
AloneUtopia 3年前
lyxxxh 3年前
sunny123456 (作者) (楼主) 3年前

加一个 待付款 字段就好了吧。

专门封装一个充值类,除了此类, 禁止 通过其他类充值 (这就好维护了)

模型的 用户金额 加黑名单(防止别人通过其他方式修改), 这个类充值取消黑白名单

3年前 评论
sunny123456 (楼主) 3年前

加个 总共充值额 字段 每充值一次就增加额度,最后减去花费的价格,剩下的就回退客户,并且额度置为0

3年前 评论
sunny123456 (楼主) 3年前
柠檬土豆 (作者) 3年前
sunny123456 (楼主) 3年前
柠檬土豆 (作者) 3年前
柠檬土豆 (作者) 3年前
sunny123456 (楼主) 3年前

没法理解这样设计的意义,余额每一次变动无论是支出还是充值还是退款都是记录性的只维护变动记录不就可以了嘛,余额应该是一个单独的字段。

3年前 评论

非要这样设计只能在支付的时候要有一个字段来存这钱的来源是来自哪些id的充值记录,这样才能不出错的退回。

3年前 评论
sunny123456 (楼主) 3年前

1.以前很多公司的做法是充钱+提现的做法,但是做大之后,好像是犯法的,国家不允许。 2.sass。 3.简单的买卖,不涉及退款,或者退款简单的,可以直接用原生支付宝,微信扫码支付。

3年前 评论
sunny123456 (楼主) 3年前
赌赌赌赌赌赌赌圣! (作者) 3年前
sunny123456 (楼主) 3年前
赌赌赌赌赌赌赌圣! (作者) 3年前

上边那个哥们说的很对,多次充值不应该走退款逻辑的,应该是提现。递归退款还是很坑的。应该是充值到用户余额中,然后余额进行提现,每次停车扣费也应该是扣除余额。

3年前 评论
sunny123456 (楼主) 3年前

需求不合理啊,既然是充值,就不应该有充多了自动退款的。充值成为余额,余额就是提现了撒。再说,你使用11元,两笔充值10元,一笔支付宝,一笔微信,你既可以使用完微信10元,也可以使用完支付宝10元。所以剩余的钱即可以退回支付宝,也可以退回微信。 你这怎么弄?

3年前 评论
sunny123456 (楼主) 3年前

没注意看各楼层的大佬回复,是否可以每小时为单位把金额拆分成券的形式,比如,一小时1元钱,充值10原,给他生成10张票,按消耗的小时数去按顺序取固定的券数,充值2次按顺序生成10-10张券取11张,剩余的9张退款

3年前 评论
sunny123456 (楼主) 3年前

这种不应该做充值这个业务逻辑,每次支付费用就是一笔单独的订单,同理退款针对不同的订单退款即可

3年前 评论
sunny123456 (楼主) 3年前

机场,医院的收费逻辑是:车牌进,车牌出(同一车牌)。记录进场时间,根据时长来指定收费标准。无需充值,直接绑定对应的车牌获取停车时间缴纳对应的收费,即收费完成可离场

3年前 评论
sunny123456 (楼主) 3年前

这是啥业务流程唉 ,怪怪的

3年前 评论
sunny123456 (楼主) 3年前

一看就是穷逼老板舍不得手续费,想原路退回,这事搞过,专门写了个算法计算,然后分别按充值的金额原路退回,另外有个注意的事原路退回只能退1年内的所以先排除1年后的,进行退,剩下的转账到余额,当时做出来我都在想这么退用户应该会很懵逼,哈哈,反正做完了也没上线

3年前 评论
sunny123456 (楼主) 3年前
臭鼬 (作者) 3年前
臭鼬 (作者) 3年前
sunny123456 (楼主) 3年前
臭鼬 (作者) 3年前
sunny123456 (楼主) 3年前
sunny123456 (楼主) 3年前

其实这需求处理也还好吧,技术不就是治疗脑残。
我就不飙中文英语了,直接中文😄

你在每笔订单后面增加一个字段【已退款金额】,查询条件【必须是一年内&&(支付金额-已提现金额>0)】,这样查出来就是可退和退过剩余的

然后排列数组(这个地方就看自己需求了,我是从小到大排,目的就是尽可能保留大额度,鬼知道他会退多小多大),然后遍历数组,依次往下减,直到够了11元,然后你就有了退款单号,依次按单号退款并将退款金额记录【已退款金额】,自己在做一个退款表好对账

【已退款金额】的用处就是假如你退1元,但是只有10元订单,所以就只能先退1元,下次可以继续退他9元(微信支持这样退款,其他支付平台未研究)。

前面排除一年已外的订单金额和数组遍历完剩余的金额,只能转账或是别的方式了(具体老板拍桌子)我们是直接转账

3年前 评论

上面说采用“提现”来做,是极度不合理的、不满足需求的:

  • 充值是有成本的,手续费!
  • 提现的付款也是有成本的(具体参考个大品台的付款接口付款手续费。 付款到银行卡最低每笔2-5元,付款到微信、支付宝倒是免费,但有额度限制,一般20-100万/月)。
  • 如果提现做法,那么是先要充值大量资金到第三方付款平台的。因为企业没办法直接把付给客户,只能走支付平台。
  • 客户使用的成本。提现是需要人工操作的,体验非常不好。

而采用原路退回的优势也是显而易见的:

  • 全流程自动的。 客户体验超好。
  • 无退款成本。一笔订单全额退款,手续费是免收的。(第三方支付平台资金结算周期为 t1-t7,在这个周期内退款手续费是免掉的)
  • 不占用资金。无需预先充值到三方平台。

我们的采用的是类似做法,给个图你参考:
file

另外,现在很多系统采用这种先充值,消费后退款的做法。 比如停车场里面的充电站等等,在深圳很常见的。

3年前 评论
臭鼬 3年前
sunny123456 (楼主) 3年前
sunny123456 (楼主) 3年前
臭鼬 3年前
cmzz (作者) 3年前
sunny123456 (楼主) 3年前
臭鼬 3年前
sunny123456 (楼主) 3年前
臭鼬 3年前
sunny123456 (楼主) 3年前

订单退款,用户充值3笔,每笔5元,退款退6元的话,那就是同时退两笔订单。想想就头大 :disappointed:

3年前 评论
sunny123456 (楼主) 3年前

可以使用微信公众号来退款,微信公众号使用红包的形式退款,自己做好记录就行。

3年前 评论
sunny123456 (楼主) 3年前
pan_zoe (作者) 3年前
sunny123456 (楼主) 3年前

@cmzz 兄弟,我告诉你为什么很多小公司走充值,你只看到了充值之后提现银行会收手续费,却没看到公司拿着这些人的充值金额去投资,去银行贷款,去利滚利。如果你是一个餐馆老板,你希望用户是在你这充值吃饭,还是每次吃饭付款?我想任何一个聪明的老板,都会好好利用用户充值的钱来做事,集资永远是不会亏的。另外我说了,国家现在不允许这样做,是违法的,但是小公司基本都这样做。

3年前 评论
臭鼬 3年前
sunny123456 (楼主) 3年前

@cmzz 另外,也许你见过很多提现的公司为什么要设置每天提现额度?为什么要设置每天提现次数?因为他们和银行合作,低于多少钱是不收手续费的,另外也是为了防止客户钱被骗被盗提。另外,由于是违法的,我不建议你们这样做,除非你们像 美团,支付宝,腾讯 那样有支付牌照。另外我再说一句,很多公司的做法,比如你骑单车,要你交押金,这个押金你就可以看做是充值,充值是违法的,换种说法就好了。不提倡你们犯经济罪。

3年前 评论

每笔 订单记录 加一个 未消费 字段,默认与充值金额相等

比如:

  • 订单号1,充值10.00,未消费10.00
  • 订单号2,充值5.00,未消费5.00
  • 订单号3,充值3.00,未消费3.00

此时用户消费 11元,此时应取出 订单记录未消费 大于 0 的记录来做循环

结果:

  • 订单号1,充值10.00,未消费0.00
  • 订单号2,充值5.00,未消费4.00
  • 订单号3,充值3.00,未消费3.00

如果发生退款,再取 未消费 大于 0 的记录直接退 未消费 的金额即可

3年前 评论
sunny123456 (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!