我在处理新的支付网关创建时遇到了一个大问题。我遵循了一个教程,但我认为我做错了什么,因为它不能很好地工作。
我想创建一个"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进程和事件中执行。