我指的是整合PayPal-iOS-SDK使用我的 native 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 = "ayPal 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("ayPal 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("ayment not processalbe: \(payment)")
}
}
func payPalPaymentDidCancel(paymentViewController: PayPalPaymentViewController) {
print("ayPal Payment Cancelled")
resultText = ""
// successView.hidden = true
paymentViewController.dismissViewControllerAnimated(true, completion: nil)
}
func payPalPaymentViewController(paymentViewController: PayPalPaymentViewController, didCompletePayment completedPayment: PayPalPayment) {
print("ayPal 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.这些是我得到的回应
[客户:{
环境=模拟;
"paypal_sdk_version"= "2.14.3";
平台 = iOS;
"product_name"= " Paypal iOS SDK";
},response_type:付款,响应:{
“创建时间”=“2016-08-01T09:16:40Z”;
id = "PAY-NONETWORKPAYIDEXAMPLE123";
意图=销售;
状态=批准;
}]
对于另一个,
{
客户= {
环境=模拟;
"paypal_sdk_version"= "2.14.3";
平台 = iOS;
"product_name"= " Paypal iOS SDK";
};
回应 = {
“创建时间”=“2016-08-01T09:59:31Z”;
id = "API-PAYMENT-ID-1843";
意图=销售;
状态=批准;
};
“response_type”=付款;
}
- 集成是否成功,或者我是否遗漏了什么,因为在 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" = "ayPal iOS SDK";
};
response = {
"create_time" = "2016-08-01T11:05:51Z";
id = "AY-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}'`
不足之处请指正
Best Answer-推荐答案 strong>
如果你通过下面的代码
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)
}
}
}
然后,如果您尝试与任何其他用户而不是注册沙箱用户一起尝试,它将给您错误。这仅适用于沙箱用户。
还有一个称为生产的环境,它用于实时目的,您需要向客户询问凭据。
PayPalEnvironmentProduction
我希望以上信息是您正在寻找的清楚信息。
- 不要忘记根据您各自的环境更改 AppDelegate 中的客户端 ID
PayPalMobile.initializeWithClientIdsForEnvironments([PayPalEnvironmentProduction:
"", PayPalEnvironmentSandbox:
"AYP......"])
关于ios - 将 Paypal SDK 与原生 iOS 应用集成,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/38696375/
|