将 Paypal SDK 与原生 iOS 应用程序集成
Posted
技术标签:
【中文标题】将 Paypal SDK 与原生 iOS 应用程序集成【英文标题】:Integrating Paypal SDK with native iOS App 【发布时间】:2016-12-06 09:18:40 【问题描述】:我指的是 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;
-
集成是否成功,还是我缺少某些东西,因为在 paypal 的响应中,我没有找到唯一的订单 ID,而不是从用户那里收取的金额。
编辑 1 这是我从中得到的信息
print("这也是信息 (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'`
请指正,我的不足之处。
【问题讨论】:
您的 JSON 无效。请通过验证您的 JSON here 来发布正确的 JSON 格式。 【参考方案1】:如果你通过下面的代码
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
我希望以上信息是您要找的明确信息。
不要忘记根据您各自的环境更改 AppDelegate 中的客户端 IDPayPalMobile.initializeWithClientIdsForEnvironments([PayPalEnvironmentProduction: "", 贝宝环境沙箱: “哎呀……”])
【讨论】:
以上是关于将 Paypal SDK 与原生 iOS 应用程序集成的主要内容,如果未能解决你的问题,请参考以下文章
将 Paypal ios sdk 与 swift 5 集成时出错