applepay не работает на реальном устройстве

Я реализовал Apple Pay с полосой в iOS с помощью Swift. Таким образом, во время тестирования программа работает нормально с симуляторами, но не на реальном устройстве. Чтобы протестировать Apple Pay на реальном устройстве, он не показывает платежный лист для обработки транзакции. Я сомневаюсь, что для тестирования с помощью Apple Pay на реальном устройстве мы можем добавить тестовые карты в кошелек или иметь учетную запись в песочнице? требуется ли добавлять тестовые карты в кошелек при использовании способа Stripe Gate? Не могли бы вы дать мне ясность?

Это мой код:

import UIKit
import PassKit
import Stripe

class ViewController: UIViewController {

    let request = PKPaymentRequest()
    var paymentStatus = PKPaymentAuthorizationStatus.failure
    var paymentController: PKPaymentAuthorizationController?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func applepay(_ sender: Any) {
        let merchantIdentifier = "merchant.Appplepay"
        let paymentNetworks = [PKPaymentNetwork.masterCard, PKPaymentNetwork.visa,PKPaymentNetwork.amex,PKPaymentNetwork.discover,PKPaymentNetwork.interac]
        if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: paymentNetworks)
        {

            request.merchantIdentifier = "merchant.Appplepay"
            request.countryCode = "US"
            request.currencyCode = "USD"
            request.supportedNetworks = paymentNetworks
            request.merchantCapabilities = .capability3DS
            request.requiredShippingAddressFields = [.phone, .email,.postalAddress,.all]
            request.paymentSummaryItems  = [PKPaymentSummaryItem(label: "Fancy Hat", amount: 50.00),
                                            // The final line should represent your company;
                // it'll be prepended with the word "Pay" (i.e. "Pay iHats, Inc $50")
                                            PKPaymentSummaryItem(label: "iHats, Inc", amount: 50.00),]
        } else {
            // Traditional checkout flow
        }
        func applePaySupported() -> Bool {
            return PKPaymentAuthorizationViewController.canMakePayments() && PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: [.amex, .visa, .masterCard])
        }
           // Setup payment authorization view controller
        if Stripe.canSubmitPaymentRequest(request) {
            // Setup payment authorization view controller
            let paymentAuthorizationViewController = PKPaymentAuthorizationViewController(paymentRequest: request)
            paymentAuthorizationViewController?.delegate = self

            // Present payment authorization view controller
            self.present((paymentAuthorizationViewController)!, animated: true,completion: nil)
        }
        else {
            // There is a problem with your Apple Pay configuration
            print("Failed to present PaymentSheet");
        }

    }

}
extension ViewController : PKPaymentAuthorizationViewControllerDelegate {

    func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment  payment: PKPayment, completion: @escaping (PKPaymentAuthorizationStatus) -> Void) {
        if payment.shippingContact?.emailAddress == nil || payment.shippingContact?.phoneNumber == nil {
            paymentStatus = .invalidShippingContact
        } else {
            STPAPIClient.shared().createToken(with: payment) { (token: STPToken?, error)-> Void  in
            print("Stripe token is \(String(describing: token!))")
                //self.paymentStatus = .success
                 completion(.success)

        }
        }

    }

    func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
        controller.dismiss(animated: true, completion: nil)
    }


}

person vijju    schedule 23.03.2018    source источник
comment
есть все, что хорошо объясняется Apple на их собственном сайте.   -  person holex    schedule 23.03.2018


Ответы (1)


Чтобы ответить на ваши вопросы о тестировании на реальном устройстве: вы можете добавлять в свой кошелек только настоящие карты для использования с Apple Pay, однако, если вы используете ключ API тестовой полосы, , который определяется полосой, и с вашей настоящей карты средства не списываются

Не уверен, почему лист оплаты не отображается на реальном устройстве, не видя кода, но вы бы хотели убедиться, что устройство настроено для оплаты Apple Pay, в основном, что в его кошелек добавлены карты (что вы поддерживаете)

Не все страны поддерживают Apple Pay, поэтому не всегда есть возможность добавить карту. в кошелек это будет означать, что лист Apple Pay не будет отображаться из-за if Stripe.canSubmitPaymentRequest(request) возврата false.

person darrenallen7    schedule 23.03.2018
comment
Я обновил свой вопрос. Я включил возможности Apple Pay in и добавил сертификат Apple Pay в учетную запись Stripe, создал идентификатор продавца в разработчиках Apple и добавил этот идентификатор в идентификатор приложения. Итак, когда я тестирую на реальном устройстве, мне нужно добавить настоящую карту в кошелек? - person vijju; 23.03.2018
comment
Из документации Stripe кажется, что вам нужно создать платежный запрос следующим образом: let paymentRequest = Stripe.paymentRequest(withMerchantIdentifier: merchantIdentifier, country: "US", currency: "usd") вместо использования стандартного PKPaymentRequest (). Может быть, попробуйте это (хотя не уверен, что это приведет к тому, что он перестанет работать на устройстве, но будет работать на симуляторе). - person darrenallen7; 23.03.2018
comment
Нет особой разницы, я пробовал оба способа. В обоих случаях возникла такая же ошибка - person vijju; 23.03.2018
comment
Извините, я пропустил ваш вопрос в вашем предыдущем комментарии. Да, вам понадобится карта в кошельке. Если у вас нет карты, тогда if Stripe.canSubmitPaymentRequest(request) будет ложным, что объясняет, почему платежный лист не отображается. Убедитесь, что вы используете свой ключ с тестовой полосой, чтобы с вас не списали деньги. - person darrenallen7; 23.03.2018
comment
Я использовал Apple Pay с полосой, тогда полоса не должна обеспечивать тест песочницы по умолчанию, такой как дерево мозга. Дерево мозга обеспечивает среду песочницы по умолчанию. - person vijju; 23.03.2018
comment
Я не совсем понимаю, что вы здесь имеете в виду. Для работы ваших платежей вам понадобится ключ Stripe API, вы создаете активный ключ и тестовый ключ. Пока ваше приложение не будет готово к запуску, я буду использовать тестовый ключ, чтобы с вас не взимались деньги. На панели инструментов Stripe вы также можете переключаться между живыми и тестовыми данными. Просто для подтверждения, появляется ли лист оплаты, когда вы добавляете реальную карту на свое устройство? - person darrenallen7; 23.03.2018
comment
Я не добавлял настоящую карту в кошелек. так что я проверю это сейчас - person vijju; 23.03.2018
comment
Это была проблема @vijju? - person darrenallen7; 24.03.2018
comment
Я думаю, это была проблема. Я попытался добавить карты в кошелек, но в кошельке я не увидел ни одной опции, такой как добавить кредитную или дебетовую карту. Он показывает только установку любого кошелька из магазина приложений или сканирование кода. Тестирую код в iphone6. - person vijju; 24.03.2018
comment
Я правильно добавляю карты в кошелек или нет? @ Darrenallen7 - person vijju; 26.03.2018
comment
support.apple.com/en-gb/HT204506 объясняет, как правильно добавить карточка - person darrenallen7; 26.03.2018
comment
Я использую iphone6. в том, что я не видел кнопку +, чтобы добавить карты в walllet. - person vijju; 26.03.2018
comment
Трудно предположить, в чем ваша проблема, не глядя на снимок экрана или что-то в этом роде. Может быть, начните чат вместо комментариев здесь, и мы сможем разобраться. - person darrenallen7; 26.03.2018
comment
И еще кое-что: support.apple.com/en-gb/HT207957 это список стран, в которых доступен Apple Pay. Ваше в этом списке? Если это не так, возможно, вы не видите возможность добавить карту. - person darrenallen7; 26.03.2018
comment
Позвольте нам продолжить это обсуждение в чате. - person vijju; 26.03.2018