虚拟商务-创建一个新的支付网关



我在处理新的支付网关创建时遇到了一个大问题。我遵循了一个教程,但我认为我做错了什么,因为它不能很好地工作。

我想创建一个"devis"(对不起,我不知道英语单词……)看起来是这样的。

当顾客买东西时,他可以选择这种只提供"设备"的付款方式。如果订单的状态可以直接为"暂停",以便在"真正的付款"完成时解除它,那将是完美的。

我希望你已经理解了我所做的努力,但如果你还没有自由问我问题。

这是我所做的:

  • 我在VirtoCommerce.PaymentGateways命名空间中创建了一个名为DevisPaymentGateway的新类,它继承自PaymentGatewayBase类。在这个类中,只有一个方法:ProcessPayment,我做:

    付款。

  • SqlOrderDatabaseInitializer.cs

    我创建了一个私有的SetupDevisGateway方法:

    private void SetupPaypalGateway(List<PaymentGateway> gateways)

    CreatePaymentGateways方法中被调用,就在paypal网关之后。

  • 我部署了数据库多亏了你的powershell脚本,网关

  • 我启用了网关支付方式然后我在网上买了一些东西,然后我
  • 选择了新的支付,它是可用的,所以它似乎工作。
  • 当我点击proceed to checkout时,我创建了一个新的订单行"待定"状态,所以它是完美的…

例如,当我用paypal买东西时,有相同的反应,但是当创建新的订单线时,有onBeforeUpdate方法检测到新线,并且一些工作是异步完成的。有了新的网关,似乎onBeforeUpdate方法不再工作了……我想我忘记了一些东西是用Paypal完成的而不是用我的网关而是什么,在哪里?

我已经知道在SqlOrderDatabaseInitializer.cs中写一些东西不是一个好主意,但我不认为这是问题…有人有解决办法吗?

感谢

编辑:解释我想要达到的目标:销售的产品实际上是一对:"图像处理"+"图像"每个客户都可以管理相册并将照片放入其中,当他点击一个产品(这是一种治疗)时,他可以选择一个相册。这就是为什么我需要这个事件,当支付完成并且状态从pending变为in progress时,我将相关信息(关于治疗,专辑…)发送到队列,并且我有工作者角色(每个治疗一个)来读取这些消息并执行一些工作。

我希望你明白我的意思,如果你不明白,请随时问我问题

你能解释一下你为什么需要那个事件吗?当事件发生时,你会怎么做?

关于如何更改以下顺序的状态的一些解释:

订单状态实际上是由作业"ProcessOrderStatusWork类"更改的,它只是在后台运行,并在订单处于等待状态一段时间后将状态订单状态从"Pending"更改为"InProgress"。我建议您创建一个"ProcessOrderStatusWork"类的副本并创建一个新作业(将其命名为MyProcessOrderStatusWork类),除了更改状态还为您的付款添加自定义工作。然后,您可以注册该Job并禁用VC中包含的Job,这样它就不会重复(通过将其添加到数据库中,类似于您做支付网关的方式)。

它可能适用于PayPal,因为它使用稍微不同的逻辑,因为在PayPal回调时创建的订单,因此在相同的web进程和事件中执行。

最新更新