2016-11-10 24 views
0

我正在爲swift快速設置我的OSX桌面應用程序的付款處理。由於沒有用於OSX的SDK,因此我正在通過Braintree的PHP SDK使用Web視圖。我想傳遞一些POST數據,以便產品的價格從我的應用程序動態傳遞,但似乎無法識別,並且根據PHP錯誤進行了定義。
我知道如何發送POST變量到一個PHP腳本並做了很多次,但我有一種感覺,我的swift代碼可能不正確。我的PHP錯誤是: 「通知:未定義的變量:價格」布倫特裏交易中的未定義Post變量

PayPal.swift

import Cocoa 
import WebKit 

class PayPal: NSViewController { 

@IBOutlet weak var paypalWebView: WebView? 

override func viewWillAppear() { 

    self.view.window!.title = "Payment" 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    setupPP() 

} 

func setupPP(){ 

    let request: NSURL = NSURL(string: "http://")! 

    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: request as URL) 

    urlRequest.httpMethod = "POST" 
    let postString = "price=45" 
    urlRequest.httpBody = postString.data(using: String.Encoding.utf8); 

    let session = URLSession.shared 
    let task = session.dataTask(with: urlRequest as URLRequest) { 
     (data, response, error) -> Void in 

     if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { 

      print("statusCode should be 200, but is \(httpStatus.statusCode)") 
      print("response = \(response)") 

     } 

     let responseString = String(data: data!, encoding: .utf8) 
     print("responseString = \(responseString)") 

    } 

    task.resume() 

    let requesting = NSURLRequest(url: request as URL) 

    DispatchQueue.main.async(){ 
     self.paypalWebView?.mainFrame.load(requesting as URLRequest) 
    } 

} 

} 

布倫特裏PHP腳本

if(isset($_POST["price"])){ 

$price = $_POST["price"]; 

} 

<?php $tr_data = Braintree_TransparentRedirect::transactionData(
       array('redirectUrl' => "http://" , 
       'transaction' => array('amount' => $price, 'type' => 'sale'))) ?> 

而且貝寶認爲,本質上是一種網絡當用戶點擊一個按鈕時,視圖被激活。我不知道這是否與這件事有關?

+0

什麼,當你添加'的var_dump($ _ POST)'到你的PHP代碼會發生什麼? – Maximus2012

+0

我得到數組(0){}。我不確定它爲什麼沒有通過。 – Eseye

+0

很可能您的開關代碼不會將POST(或任何請求)發送到您的PHP代碼。您可以使用Firebug/Web Developer瀏覽器插件來跟蹤GET/POST請求,以查看數據是否從Swift流向PHP。 – Maximus2012

回答

0

我最終得到它的工作!

Paypal.swift

import Cocoa 
import WebKit 

class PayPal: NSViewController { 

@IBOutlet weak var paypalWebView: WebView? 

override func viewWillAppear() { 

    self.view.window!.title = "Payment" 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    setupPP() 

} 


func setupPP(){ 

    let request: NSURL = NSURL(string: "http://")! 

    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: request as URL) 

    urlRequest.httpMethod = "POST" 
    let postString = "amount=29.95" 
    urlRequest.httpBody = postString.data(using: String.Encoding.utf8); 

    let session = URLSession.shared 
    let task = session.dataTask(with: urlRequest as URLRequest) { 
     (data, response, error) -> Void in 

     if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { 

      print("statusCode should be 200, but is \(httpStatus.statusCode)") 
      print("response = \(response)") 

     } 

     let responseString = String(data: data!, encoding: .utf8) 
     print("responseString = \(responseString)") 

    } 

    paypalWebView?.mainFrame.load(urlRequest as URLRequest) 

    task.resume() 


} 

} 

PHP腳本

<?php 
      if (isset ($_POST['amount'])) { 

        $amount = $_POST['amount']; 
      } 

      $tr_data = Braintree_TransparentRedirect::transactionData(
       array('redirectUrl' => "http://" . $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH), 

       'transaction' => array('amount' => $amount, 'type' => 'sale'))) 

?>