Я быстро настраиваю обработку платежей для своего настольного приложения OSX. Поскольку для OSX нет SDK, я использую Web View через PHP SDK для Braintree. Я хочу передать некоторые POST-данные, чтобы цена продукта динамически поступала из моего приложения, но, похоже, он не распознается и не определяется в соответствии с ошибками PHP.
Я знаю, как отправить переменную POST в PHP-скрипт, и делал это много раз, но у меня есть ощущение, что что-то может быть не так с моим быстрым кодом. Моя ошибка PHP: «Обратите внимание: неопределенная переменная: цена»
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)
}
}
}
Braintree PHP Script
if(isset($_POST["price"])){
$price = $_POST["price"];
}
<?php $tr_data = Braintree_TransparentRedirect::transactionData(
array('redirectUrl' => "http://" ,
'transaction' => array('amount' => $price, 'type' => 'sale'))) ?>
Также Paypal View, который по сути является веб-представлением, активируется, когда пользователь нажимает на кнопку через переход. Я не знаю, будет ли это как-то связано с этим или нет?
Я закончил тем, что заставил это работать!
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')))
?>
Других решений пока нет …