2016-11-10 1 views
0

OSXデスクトップアプリケーションの支払い処理を迅速に設定しています。 OSX用のSDKはないので、私はBraintree用のPHP SDK経由でWeb Viewを使用しています。私はいくつかのPOSTデータを渡して、製品の価格が私のアプリケーションから動的に来るようにしたいが、それは認識されないようで、PHPのエラーに基づいて弱っている。
私はPOST変数をPHPスクリプトに送信する方法を知っていて何度もやりましたが、私の素早いコードでは正しくないかもしれないという気持ちがあります。私のPHPのエラーがある: "注意:未定義の変数:価格"Braintree取引で未定義のポスト変数

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

あなたのPHPコードに 'のvar_dump($ _ POST)を'追加したときはどうなりますか? – Maximus2012

+0

array(0){}を取得します。なぜそれが通っていないのか分かりません。 – Eseye

+0

おそらく、あなたのスイッチコードがあなたのPHPコードにPOST(または何らかの要求)を送信していない可能性があります。 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'))) 

?>