关于Web应用程序的支付处理器有很多问题,但我还没有看到桌面应用程序.你有什么经历?
或许将其置于一个小环境中,要求:
我有许多客户要求在线获取客户的信用卡号码,然后在终端的POS处处理付款的请求.我想知道这样做的最佳方法是什么.
我不想以明文形式在服务器上存储信用卡号,我不想以纯文本形式发送带有该号码的电子邮件.
客户不希望注册在线支付账户,因为在线支付处理器的成本较高且额外.此外,两个客户都无法在线收费,因为由于缺货产品或客户要求的问题,总数可能会发生变化.
我还有其他选择吗?
我将使用PHP.如果规则对我应该使用哪种方法有任何影响,我也在加拿大.
我的网站将拥有一个基本上像信用卡一样工作的信用系统.每个用户都有无限制的信用额度,但在每周结束时,他们必须付清.例如,用户可能会在3月1日到7日之间进行多次购物,然后在3月7日结束时,他们会通过电子邮件发送一份发票,其中列出了本周所有购买的商品以及14日到期的总额.如果他们不付清,他们的帐户就会被取消,直到他们这样做.我只想试着解决如何实现这个问题.
我有他们所有购买的清单,这不是问题,但我只想弄清楚如何处理它.在第7天结束时,我可以设置一个cronjob来生成发票,基本上会有一个ID和到期日,然后我需要另一个多对多表来将所有购买链接到发票.然后,当用户将钱添加到他们的帐户时,我猜它是否适用于他们当前的未结帐单?如果他们在新发票到期时没有还清发票怎么办呢,那么现在他们有两个优秀的发票,我怎么知道哪个适用呢?或者,我是否对先前未完成的发票进行cronjob检查,取消它们,并将新项目添加到新发票中作为"余额转发(+兴趣)"?你如何将钱用在发票上?每笔付款是否必须与发票相关联,或者我可以将其存入他们的帐户信用,然后以某种方式弄清楚什么是已付款而哪些没有?如果他们在发票生成之前提前付款怎么办?我是否会在发票上从发票中扣除信用额,或在到期时的一周结束时扣除?有很多方法可以做到这一点......
任何人都可以描述他们会采取什么方法?
如果有人感兴趣,我的发票模型目前看起来如下(在Django中).InvoiceItems通过反向ID链接到实际的"产品"(FK在产品上,而不是发票项目以允许不同的项目类型(不同的表格)),但我想我会改变它.
class Invoice(models.Model):
user = models.ForeignKey(User, related_name='invoices')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
closed_date = models.DateTimeField(null=True, blank=True)
due_date = models.DateTimeField(default=_next_weekday())
payment_date = models.DateTimeField(null=True, blank=True) # date the invoice was fully paid
total_payments = CurrencyField(default=0)
interest_charges = CurrencyField(default=0)
@property
def days_overdue(self):
dt = self.due_date - datetime.date.today()
return dt.days if dt.days > 0 else 0
@property
def item_total(self):
return self.items.filter(amount__gt=0).aggregate(t=Sum('amount'))['t'] or Decimal('0.00')
@property
def daily_interest(self):
return _round((self.item_total - self.total_payments) * settings.INTEREST_RATE/Decimal('365.242199'))
@property
def subtotal(self):
return self.item_total + self.interest_charges
@property …Run Code Online (Sandbox Code Playgroud) 我经常存储信用卡号码varchar(16).这是有效的,但每个数字需要17个字节.
存储并不是什么大不了的事,但我喜欢高效,无论是存储需求还是表搜索时间.
如果我可以使用decimal(16) unsigned,我可以将存储需求减少到7或8个字节,并且仍然保持可读性以及大部分兼容性.
这将剥离前导零.我可以依赖所有以非零数字开头的信用卡号码吗?
我有一些设置在线支付系统的经验,接受信用卡号码,然后将它们传递到网关进行一次性付款.
但是,我现在需要设置一个可以处理自动重复计费的系统 - 用户提供其信用卡号码,并且从那时起每月自动计费.
我想知道接近这样的事情的最佳方法是什么?(我注意到Paypal Payflow Pro确实有定期计费功能,但我对它的工作原理有点不清楚.)
有关实施定期计费的最佳方法/服务/网关的建议吗?如果可能的话,我更希望避免保留信用卡号码的本地记录以便重复处理.
在此先感谢您的帮助.
paypal credit-card payment-gateway e-commerce recurring-billing
我有一个信用卡读卡器从我的银行插入麦克风插孔,他们提供Android和MacOS的应用程序以这种方式接收付款.我没有任何这些系统,也没有接受付款的需要,但我对这个设备感到好奇.我可以在笔记本电脑上录制声音.那么:是否有可以解码此信号的Linux程序?
我有一些已有15年历史的代码,可以通过POTS进行 MAPP(万事达卡自动销售点计划)信用卡交易以及带有主机数据捕获(而不是终端数据捕获)的调制解调器。它实现:获得批准(操作码#08),批准后(#60),出售(#10),退款(#30)和无效(#50)交易。我记得,MAPP还允许为给定的检索号或整批检索数据。为了进行验证,我需要实现一个或另一个(获取事务或批处理)。对于给定的检索号码,取卡和金额就足够了。但是,我再也找不到“ 60-M08V3.0 / 1096销售点规格和认证程序”的副本,并且该文档似乎不在网络上任何地方。我猜想通过检索编号进行提取将需要诸如TERMINALID,ASCII FS,OPCODE,ASCII FS,RETRIEVAL,ASCII ETX之类的东西(或者批准编号也位于其中)。
提取先前发布的交易或一批交易(通过检索号和/或批准号)以获取合适的协议是什么?网络上是否有60-M08V3.0 / 1096的副本或协议的适用部分?
我需要进行信用卡号码验证.
当我用Google搜索时,我找到了org.apache.commons.validator.CreditCardValidator.但似乎它无法正常工作.当我传递一个非数字字符时,它也是真实的.
Apache CreditCardValidator的代码:
String ccNumber = "378282246310005";
CreditCardValidator creditCardValidator = new CreditCardValidator();
if(!creditCardValidator.isValid(ccNumber)) throw new Exception("Credit Card Number is not a valid one!");
Run Code Online (Sandbox Code Playgroud)
然后,我根据卡片类型和卡号(使用luhn算法)编写了以下方法来验证信用卡号码.
CardType验证器(如果卡类型无效,则为null)
public String getCCType(String ccNumber){
String visaRegex = "^4[0-9]{12}(?:[0-9]{3})?$";
String masterRegex = "^5[1-5][0-9]{14}$";
String amexRegex = "^3[47][0-9]{13}$";
String dinersClubrRegex = "^3(?:0[0-5]|[68][0-9])[0-9]{11}$";
String discoverRegex = "^6(?:011|5[0-9]{2})[0-9]{12}$";
String jcbRegex = "^(?:2131|1800|35\\d{3})\\d{11}$";
String commonRegex = "^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$";
try {
ccNumber = ccNumber.replaceAll("\\D", "");
return (ccNumber.matches(visaRegex) ? "VISA" : ccNumber.matches(masterRegex) ? "MASTER" :ccNumber.matches(amexRegex) ? "AMEX" :ccNumber.matches(dinersClubrRegex) ? …Run Code Online (Sandbox Code Playgroud) 我正在做一些EMV测试,希望有人可以阐明我所看到的内容。我正在运行适用于我们解决方案的万事达卡M-TIP测试,并且看到一些意外结果。使用M-TIP 50测试卡运行M-TIP 50测试(1、2、3)时,在第二个GENERATE_AC命令上出现错误。从技术上讲,我们的解决方案被定义为具有在线功能的脱机,但是我们目前正在完全脱机的环境中进行测试。
我花了很多时间阅读EMV书籍并搜寻Google,但我仍然不明白为什么它会返回6985。我现在能想到的最好猜测是,它与CDA有关(在这个过程中也应该发生?)
我已经包含了第一和第二个GEN_AC请求和响应,以显示正在发生的事情。如果有人可以洞悉正在发生或正在发生的事情,我将不胜感激。
1st Generate AC (ARQC)
Request : 80 AE 90 00 2F 00 00 00 00 20 00 00 00 00 00 00 00 00 80 00 80 00 08 26 17 01 03 00 B0 32 0F C0 22 00 00 00 00 00 00 00 00 00 00 44 03 02 16 11 12 60 00 80
Class :80
Ins :AE
P1 :90
P2 :00
Lc :2F
Data :00 00 00 00 20 00 …Run Code Online (Sandbox Code Playgroud) credit-card ×10
e-commerce ×2
emv ×2
payment ×2
audio ×1
desktop ×1
encryption ×1
java ×1
linux ×1
mastercard ×1
modem ×1
paypal ×1
pci-dss ×1
php ×1
protocols ×1
transactions ×1
validation ×1