2016-12-28 60 views
0

問題是,我無法將PayPal腳本需要的paymentID變量傳遞給JS。 (這個或者PHP腳本永遠不會運行)。無法將變量傳遞給PayPal Payments Rest的API腳本API

我在這裏以下步驟:https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/advanced-integration/#set-up-the-payment

和我卡在步驟4

我使用本教程中的代碼:http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payments/CreatePaymentUsingPayPal.html

下面是HTML:

{% extends 'layout/master.twig' %} 

{% block title %} {{ parent() }}PayPal {% endblock title %} 

{% block head %} 
    <script src="https://www.paypalobjects.com/api/checkout.js"></script> 
{% endblock %} 

{% block header %} Testing PayPal {% endblock header %} 


{% block content %} 

    <div id="paypal-button"></div> 

{% endblock content %} 


{% block scripts %} 
    <script> 
     paypal.Button.render({ 

      env: 'sandbox', // Optional: specify 'production' environment 

      payment: function(resolve, reject) { 

       var CREATE_PAYMENT_URL = 'http://patch-request.app/paypal/payment/create'; 

       paypal.request.get(CREATE_PAYMENT_URL) 
        .then(function(data) { 
         alert(data); 
         console.log(data); 
         resolve(data.paymentID); 
        }) 
        .catch(function(err) { 
         alert(data); 
         console.log(data); 
         reject(err); 
        }); 
      }, 

      onAuthorize: function(data) { 

       // Note: you can display a confirmation page before executing 

       var EXECUTE_PAYMENT_URL = 'http://patch-request.com/paypal/execute-payment'; 

       paypal.request.post(EXECUTE_PAYMENT_URL, 
        { paymentID: data.paymentID, payerID: data.payerID }) 

        .then(function(data) { /* Go to a success page */ }) 
        .catch(function(err) { /* Go to an error page */ }); 
      } 

     }, '#paypal-button'); 
    </script> 
{% endblock scripts %} 

這裏是我試圖運行腳本:

public function create_payment() 
    { 
     $payer = new Payer(); 
     $payer->setPaymentMethod("paypal"); 

     $item1 = new Item(); 
     $item1->setName('Ground Coffee 40 oz') 
      ->setCurrency('USD') 
      ->setQuantity(1) 
      ->setSku("123123")// Similar to `item_number` in Classic API 
      ->setPrice(7.5); 
     $item2 = new Item(); 
     $item2->setName('Granola bars') 
      ->setCurrency('USD') 
      ->setQuantity(5) 
      ->setSku("321321")// Similar to `item_number` in Classic API 
      ->setPrice(2); 

     $itemList = new ItemList(); 
     $itemList->setItems([$item1, $item2]); 

     $details = new Details(); 
     $details->setShipping(1.2) 
      ->setTax(1.3) 
      ->setSubtotal(17.50); 

     $amount = new Amount(); 
     $amount->setCurrency("USD") 
      ->setTotal(20) 
      ->setDetails($details); 

     $transaction = new Transaction(); 
     $transaction->setAmount($amount) 
      ->setItemList($itemList) 
      ->setDescription("Payment description") 
      ->setInvoiceNumber(uniqid()); 

//  $baseUrl = getBaseUrl(); 
     $baseUrl = "http://patch-request.app"; 
     $redirectUrls = new RedirectUrls(); 
     $redirectUrls->setReturnUrl("$baseUrl/ExecutePayment.php?success=true") 
      ->setCancelUrl("$baseUrl/ExecutePayment.php?success=false"); 

     $payment = new Payment(); 
     $payment->setIntent("sale") 
      ->setPayer($payer) 
      ->setRedirectUrls($redirectUrls) 
      ->setTransactions([$transaction]); 

     $request = clone $payment; 

     try 
     { 
       $payment->create($this->apiContext); //$payment is a JSON 
     } 
     catch (Exception $ex) 
     { 
      echo 'Sth went wrong'; 
     } 

     $approvalUrl = $payment->getApprovalLink(); 


     return json_encode(['paymentID' => $payment->id]); 
    } 

任何想法?

回答

0

我有不知道你正在使用的模板系統,但你可以試試這個

{% block head %} 
    <script src="https://www.paypalobjects.com/api/checkout.js"></script> 
    // add it here 
    <script> 
     window.paymentID = '<?= getPaymentID(); ?>'; // you need to implement this 
    </script> 
{% endblock %} 

現在,你可以在任何地方你其他JS

+0

訪問window.paymentID謝謝您的回答。 (僅供參考我正在使用Twig)但PayPal JS請求在此行'paypal.request.get(CREATE_PAYMENT_URL)'中運行時,payID應被PHP腳本傳遞,該Paypal必須是'paypal.request'。發佈(CREATE_PAYMENT_URL)'所以問題解決了:) – padawanTony