我指的是将PayPal-iOS-SDK与我的原生iOS应用集合在一起。
我已经成功整合了应用程序(这就是我的感受)
请参阅代码
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
PayPalMobile .initializeWithClientIdsForEnvironments([PayPalEnvironmentProduction: "YOUR_CLIENT_ID_FOR_PRODUCTION",
PayPalEnvironmentSandbox: "SANDBOX CODE"])
return true
}
View Controller
//
// ViewController.swift
// PaypalDemo
//
import UIKit
class ViewController: UIViewController,PayPalPaymentDelegate {
var environment:String = PayPalEnvironmentNoNetwork {
willSet(newEnvironment) {
if (newEnvironment != environment) {
PayPalMobile.preconnectWithEnvironment(newEnvironment)
}
}
}
#if HAS_CARDIO
// You should use the PayPal-iOS-SDK+card-Sample-App target to enable this setting.
// For your apps, you will need to link to the libCardIO and dependent libraries. Please read the README.md
// for more details.
var acceptCreditCards: Bool = true {
didSet {
payPalConfig.acceptCreditCards = acceptCreditCards
}
}
#else
var acceptCreditCards: Bool = false {
didSet {
payPalConfig.acceptCreditCards = acceptCreditCards
}
}
#endif
var resultText = "" // empty
var payPalConfig = PayPalConfiguration() // default
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// Do any additional setup after loading the view.
title = "PayPal SDK Demo"
//successView.hidden = true
// Set up payPalConfig
print("this is credit card status \(acceptCreditCards)")
payPalConfig.acceptCreditCards = true;
payPalConfig.merchantName = "Awesome Shirts, Inc."
payPalConfig.merchantPrivacyPolicyURL = NSURL(string: "https://www.paypal.com/webapps/mpp/ua/privacy-full")
payPalConfig.merchantUserAgreementURL = NSURL(string: "https://www.paypal.com/webapps/mpp/ua/useragreement-full")
payPalConfig.languageOrLocale = NSLocale.preferredLanguages()[0]
// Setting the payPalShippingAddressOption property is optional.
//
// See PayPalConfiguration.h for details.
payPalConfig.payPalShippingAddressOption = .PayPal;
print("PayPal iOS SDK Version: \(PayPalMobile.libraryVersion())")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
PayPalMobile.preconnectWithEnvironment(environment)
}
@IBAction func payByPaypal(sender: UIButton) {
print("integrate paypal here")
resultText = ""
// Note: For purposes of illustration, this example shows a payment that includes
// both payment details (subtotal, shipping, tax) and multiple items.
// You would only specify these if appropriate to your situation.
// Otherwise, you can leave payment.items and/or payment.paymentDetails nil,
// and simply set payment.amount to your total charge.
// Optional: include multiple items
let item1 = PayPalItem(name: "Old jeans with holes", withQuantity: 2, withPrice: NSDecimalNumber(string: "84.99"), withCurrency: "USD", withSku: "Hip-0037")
let item2 = PayPalItem(name: "Free rainbow patch", withQuantity: 1, withPrice: NSDecimalNumber(string: "0.00"), withCurrency: "USD", withSku: "Hip-00066")
let item3 = PayPalItem(name: "Long-sleeve plaid shirt (mustache not included)", withQuantity: 1, withPrice: NSDecimalNumber(string: "37.99"), withCurrency: "USD", withSku: "Hip-00291")
let items = [item1, item2, item3]
let subtotal = PayPalItem.totalPriceForItems(items)
// Optional: include payment details
let shipping = NSDecimalNumber(string: "5.99")
let tax = NSDecimalNumber(string: "2.50")
let paymentDetails = PayPalPaymentDetails(subtotal: subtotal, withShipping: shipping, withTax: tax)
let total = subtotal.decimalNumberByAdding(shipping).decimalNumberByAdding(tax)
let payment = PayPalPayment(amount: total, currencyCode: "AUD", shortDescription: "My Shop", intent: .Sale)
payment.items = items
payment.paymentDetails = paymentDetails
if (payment.processable) {
let paymentViewController = PayPalPaymentViewController(payment: payment, configuration: payPalConfig, delegate: self)
presentViewController(paymentViewController!, animated: true, completion: nil)
}
else {
// This particular payment will always be processable. If, for
// example, the amount was negative or the shortDescription was
// empty, this payment wouldn't be processable, and you'd want
// to handle that here.
print("Payment not processalbe: \(payment)")
}
}
func payPalPaymentDidCancel(paymentViewController: PayPalPaymentViewController) {
print("PayPal Payment Cancelled")
resultText = ""
// successView.hidden = true
paymentViewController.dismissViewControllerAnimated(true, completion: nil)
}
func payPalPaymentViewController(paymentViewController: PayPalPaymentViewController, didCompletePayment completedPayment: PayPalPayment) {
print("PayPal Payment Success !")
paymentViewController.dismissViewControllerAnimated(true, completion: { () -> Void in
// send completed confirmaion to your server
// print("Here is your proof of payment:\n\n\(completedPayment.confirmation)\n\nSend this to your server for confirmation and fulfillment.")
self.resultText = completedPayment.description
self.showSuccess(completedPayment.confirmation)
})
}
func showSuccess(inputString: NSObject) {
print("this is done successfully :) ")
print("send this to server \(inputString)")
}
}
我对该应用的担忧是
1.无论我使用什么登录,我都可以登录。我已尝试tim@cook.com
作为电子邮件,1234
作为密码,但我仍然可以登录。
2.我已尝试使用信用卡作为4242-4242-4242-4242,cvv 123 12/12并仍然付款成功。
3.这些是我得到的回应
[client: {
environment = mock;
"paypal_sdk_version" = "2.14.3";
platform = iOS;
"product_name" = "PayPal iOS SDK";
}, response_type: payment, response: {
"create_time" = "2016-08-01T09:16:40Z";
id = "PAY-NONETWORKPAYIDEXAMPLE123";
intent = sale;
state = approved;
}]
换另一个,
{
client = {
environment = mock;
"paypal_sdk_version" = "2.14.3";
platform = iOS;
"product_name" = "PayPal iOS SDK";
};
response = {
"create_time" = "2016-08-01T09:59:31Z";
id = "API-PAYMENT-ID-1843";
intent = sale;
state = approved;
};
"response_type" = payment;
}
编辑1 这是我从
获得的信息打印("这也是信息(completedPayment.description)") 从
func payPalPaymentViewController(paymentViewController: PayPalPaymentViewController, didCompletePayment completedPayment: PayPalPayment)
`CurrencyCode: AUD
Amount: 216.46
Short Description: My Shop
Intent: sale
Processable: Already processed
Display: $216.46
Confirmation: {
client = {
environment = mock;
"paypal_sdk_version" = "2.14.3";
platform = iOS;
"product_name" = "PayPal iOS SDK";
};
response = {
"create_time" = "2016-08-01T11:05:51Z";
id = "PAY-NONETWORKPAYIDEXAMPLE123";
intent = sale;
state = approved;
};
"response_type" = payment;
}
Details: Subtotal: 207.97, Shipping: 5.99, Tax: 2.5
Shipping Address: (null)
Invoice Number: (null)
Custom: (null)
Soft Descriptor: (null)
BN code: (null)
Item: '{2|Old jeans with holes|84.99|USD|Hip-0037}'
Item: '{1|Free rainbow patch|0.00|USD|Hip-00066}'
Item: '{1|Long-sleeve plaid shirt (mustache not included)|37.99|USD|Hip-00291}'`
请纠正,我缺少的地方。
答案 0 :(得分:3)
如果您查看以下代码
var environment:String = PayPalEnvironmentNoNetwork {
willSet(newEnvironment) {
if (newEnvironment != environment) {
PayPalMobile.preconnectWithEnvironment(newEnvironment)
}
}
}
这不是网络环境,它会让你一直成功。
您需要根据您的要求更改环境。对于例如如果您在PayPal上注册了沙箱用户,那么您需要像这样更改
var environment:String = PayPalEnvironmentSandbox
{
willSet(newEnvironment) {
if (newEnvironment != environment)
{
PayPalMobile.preconnectWithEnvironment(newEnvironment)
}
}
}
然后,如果您尝试与任何其他用户而不是注册的沙盒用户,它将给您错误。这仅适用于沙盒用户。
还有一个名为Production的环境,用于实时目的,您需要向客户询问凭据。
PayPalEnvironmentProduction
我希望以上信息清楚您正在寻找。
PayPalMobile.initializeWithClientIdsForEnvironments([PayPalEnvironmentProduction: "",PayPalEnvironmentSandbox: " AYP ......"])