/** * Execute a payment or an authorization that was previously approved by the client. * * @param PayPalRestApiClient\Model\AccessToken $accessToken * @param PayPalRestApiClient\Model\Payment $payment payment previously created with the "PaymentService::create" method * @param string $payerId not null, parameter "payerId" that is passed in the success url when using paypal payment method * * @return PayPalRestApiClient\Model\Payment */ public function execute(AccessToken $accessToken, Payment $payment, $payerId) { $request = $this->client->createRequest('POST', $payment->getExecuteUrl(), array('Accept' => 'application/json', 'Accept-Language' => 'en_US', 'Authorization' => $accessToken->getTokenType() . ' ' . $accessToken->getAccessToken(), 'Content-Type' => 'application/json'), '{"payer_id":"' . $payerId . '"}', array('debug' => $this->debug)); $response = $this->send($request, 200, "Payment error:"); $data = json_decode($response->getBody(), true); if ('authorize' === $data['intent']) { $authorizationBuilder = new PaymentAuthorizationBuilder(); $authorization = $authorizationBuilder->build($data); return $authorization; } $paymentBuilder = new PaymentBuilder(); $payment = $paymentBuilder->build($data); return $payment; }
/** * Build an instance of PayPalRestApiClient\Model\Payment given an array * * @param array $data The array should contains the following keys: * id, create_time, state, intent, payer, transactions, links * The "id" key value should not be empty. * * @return PayPalRestApiClient\Model\Payment * * @throws PayPalRestApiClient\Exception\BuilderException If not all keys are set * * @see https://developer.paypal.com/docs/api/#payment-object */ public function build(array $data) { $this->validateArrayKeys(array('id', 'create_time', 'state', 'intent', 'payer', 'transactions', 'links'), $data); if (empty($data['id'])) { throw new BuilderException('id is mandatory and should not be empty'); } $links = array(); foreach ($data['links'] as $link) { $links[] = $this->linkBuilder->build($link); } $payment = new Payment($data['id'], $data['create_time'], $data['state'], $data['intent'], $this->payerBuilder->build($data['payer']), $this->transactionsBuilder->build($data['transactions']), $links, isset($data['update_time']) ? $data['update_time'] : null); $payment->setPaypalData($data); return $payment; }
public function testGetLinksUrl() { $payment = new Payment("PAY-6T42818722685883WKPPAT6I", "2014-08-03T10:07:53Z", 'created', 'sale', new Payer('paypal'), array(), array(new Link('https://api.sandbox.paypal.com/v1/payments/payment/PAY-6T42818722685883WKPPAT6I', 'self', 'GET'), new Link('https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-9VK533621R3302713', 'approval_url', 'REDIRECT'), new Link('https://api.sandbox.paypal.com/v1/payments/payment/PAY-6T42818722685883WKPPAT6I/execute', 'execute', 'POST')), "2014-08-03T10:07:53Z"); $this->assertEquals('https://api.sandbox.paypal.com/v1/payments/payment/PAY-6T42818722685883WKPPAT6I/execute', $payment->getExecuteUrl()); $this->assertEquals('https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-9VK533621R3302713', $payment->getApprovalUrl()); }