OGeek|极客世界-中国程序员成长平台

标题: ios - 将 Paypal SDK 与原生 iOS 应用集成 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 13:54
标题: ios - 将 Paypal SDK 与原生 iOS 应用集成

我指的是整合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”=付款; }

  1. 集成是否成功,或者我是否遗漏了什么,因为在 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-推荐答案


如果你通过下面的代码

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 

我希望以上信息是您正在寻找的清楚信息。

PayPalMobile.initializeWithClientIdsForEnvironments([PayPalEnvironmentProduction: "", PayPalEnvironmentSandbox: "AYP......"])

关于ios - 将 Paypal SDK 与原生 iOS 应用集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38696375/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) Powered by Discuz! X3.4