Example #1
0
 /**
  * start payment
  * @param OnlineShop_Framework_IPrice $price
  * @param array                       $config
  *
  * @return string
  * @throws Exception
  * @link https://devtools-paypal.com/apiexplorer/PayPalAPIs
  */
 public function initPayment(OnlineShop_Framework_IPrice $price, array $config)
 {
     // check params
     $required = ['ReturnURL' => null, 'CancelURL' => null, 'OrderDescription' => null, 'InvoiceID' => null];
     $config = array_intersect_key($config, $required);
     if (count($required) != count($config)) {
         throw new Exception(sprintf('required fields are missing! required: %s', implode(', ', array_keys(array_diff_key($required, $config)))));
     }
     // create request
     $x = new stdClass();
     $x->SetExpressCheckoutRequest = new stdClass();
     $x->SetExpressCheckoutRequest->Version = $this->protocol;
     $x->SetExpressCheckoutRequest->SetExpressCheckoutRequestDetails = new stdClass();
     $x->SetExpressCheckoutRequest->SetExpressCheckoutRequestDetails->ReturnURL = $config['ReturnURL'];
     $x->SetExpressCheckoutRequest->SetExpressCheckoutRequestDetails->CancelURL = $config['CancelURL'];
     $x->SetExpressCheckoutRequest->SetExpressCheckoutRequestDetails->NoShipping = "1";
     $x->SetExpressCheckoutRequest->SetExpressCheckoutRequestDetails->AllowNote = "0";
     $x->SetExpressCheckoutRequest->SetExpressCheckoutRequestDetails->PaymentDetails = $this->createPaymentDetails($price);
     $x->SetExpressCheckoutRequest->SetExpressCheckoutRequestDetails->OrderDescription = $config['OrderDescription'];
     $x->SetExpressCheckoutRequest->SetExpressCheckoutRequestDetails->InvoiceID = $config['InvoiceID'];
     // add optional config
     foreach ($config as $name => $value) {
         $x->SetExpressCheckoutRequest->SetExpressCheckoutRequestDetails->{$name} = $value;
     }
     // execute request
     $ret = $this->client->SetExpressCheckout($x);
     // check Ack
     if ($ret->Ack == 'Success' || $ret->Ack == 'SuccessWithWarning') {
         # pay url
         return 'https://www.' . $this->environment . '.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=' . $ret->Token;
     } else {
         $messages = null;
         $errors = is_array($ret->Errors) ? $ret->Errors : array($ret->Errors);
         foreach ($errors as $error) {
             $messages .= $error->LongMessage . "\n";
         }
         throw new Exception($messages);
     }
 }