Payum\Paypal\Masspay\Nvp\Action\ConvertPayoutAction::execute PHP Метод

execute() публичный Метод

public execute ( Payum\Core\Request\Convert $request )
$request Payum\Core\Request\Convert
    public function execute($request)
    {
        RequestNotSupportedException::assertSupports($this, $request);
        /** @var PayoutInterface $payout */
        $payout = $request->getSource();
        $this->gateway->execute($currency = new GetCurrency($payout->getCurrencyCode()));
        $divisor = pow(10, $currency->exp);
        $details = ArrayObject::ensureArrayObject($payout->getDetails());
        $details['CURRENCYCODE'] = $payout->getCurrencyCode();
        $details['L_AMT0'] = $payout->getTotalAmount() / $divisor;
        $details['L_NOTE0'] = $payout->getDescription();
        if ($payout->getRecipientEmail()) {
            $details['RECEIVERTYPE'] = 'EmailAddress';
            $details['L_EMAIL0'] = $payout->getRecipientEmail();
        } else {
            if ($payout->getRecipientId()) {
                $details['RECEIVERTYPE'] = 'UserID';
                $details['L_RECEIVERID0'] = $payout->getRecipientId();
            } else {
                throw new LogicException('Either recipient id or email must be set.');
            }
        }
        $request->setResult((array) $details);
    }

Usage Example

Пример #1
0
 /**
  * @test
  */
 public function shouldNotOverwriteAlreadySetExtraDetails()
 {
     $gatewayMock = $this->getMock(GatewayInterface::class);
     $gatewayMock->expects($this->once())->method('execute')->with($this->isInstanceOf(GetCurrency::class))->willReturnCallback(function (GetCurrency $request) {
         $request->name = 'US Dollar';
         $request->alpha3 = 'USD';
         $request->numeric = 123;
         $request->exp = 2;
         $request->country = 'US';
     });
     $payoutModel = new Payout();
     $payoutModel->setRecipientEmail('theRecipientEmail');
     $payoutModel->setCurrencyCode('USD');
     $payoutModel->setTotalAmount(123);
     $payoutModel->setDescription('the description');
     $payoutModel->setDetails(['foo' => 'fooVal']);
     $action = new ConvertPayoutAction();
     $action->setGateway($gatewayMock);
     $action->execute($convert = new Convert($payoutModel, 'array'));
     $details = $convert->getResult();
     $this->assertNotEmpty($details);
     $this->assertEquals(['CURRENCYCODE' => 'USD', 'L_AMT0' => 1.23, 'L_NOTE0' => 'the description', 'RECEIVERTYPE' => 'EmailAddress', 'L_EMAIL0' => 'theRecipientEmail', 'foo' => 'fooVal'], $details);
 }
ConvertPayoutAction