所以我想做的是让我的eccomerce网站处理Paypal和Stripe付款。但是,我不确定这是怎么做的。
这就是我所拥有的。
class BillingProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('App\Contracts\BillingInterface','App\Services\Billing\PaypalBilling');
}
}

如果我只需要Paypal,这可以正常工作。但是,我需要Paypal和Stripe。
知道我们如何实现这个目标吗?因此,当我们输入提示时,我们可以获得paypal或条纹。
public function stripe(Request $request, BillingInterface $bill){// Handle stripe payment.}
public function paypal(Request $request, BillingInterface $bill){// Handle paypal payment.}
答案 0 :(得分:1)
首先,看一下服务容器的contextual binding。如果您在结帐过程中使用不同的类,则可以根据实际使用合同的人设置解决策略。
但是,我可能会选择不同的东西。
我们将strategy design pattern应用于此。
基本上,分两个步骤:
BillingManager
; paypal()
和stripe()
方法错误because of this)。假设这个接口有一个'process($ orderId)`方法; 现在,将调用BillingManager
类。也许,你会调用一个通用的方法pay
,它将作为一个参数来理解它将使用什么策略。
像
这样的东西public function pay($strategy, $orderId) {
// use $strategy to understand which service must be used.
// very raw example:
$strategy = app()->make($strategy . 'Strategy');
$strategy->process($orderId);
}
当然,您需要一种安全机制来了解您需要使用哪种服务。之后,您每次都可以使用BillingManager
课程,使用许多不同的付款系统,而无需担心任何其他问题。