Nativescript пустой PKPayment в платежеAuthorizationViewControllerDidAuthorizePaymentHandler

Я пытаюсь сделать Apple Pay в приложении NativeScript, используя собственный код.

<script>
    var PKPaymentAuthorizationViewControllerDelegateIml = (function (_super) {
        __extends(PKPaymentAuthorizationViewControllerDelegateIml, _super);
        function PKPaymentAuthorizationViewControllerDelegateIml() {
            return _super !== null && _super.apply(this, arguments) || this;
        }
        PKPaymentAuthorizationViewControllerDelegateIml.new = function () {
            return _super.new.call(this);
        };

        PKPaymentAuthorizationViewControllerDelegateIml.prototype.paymentAuthorizationViewControllerDidFinish = function(controller){
            console.log('did finish', controller)
            controller.dismissViewControllerAnimatedCompletion(true, null);
        }

        PKPaymentAuthorizationViewControllerDelegateIml.prototype.paymentAuthorizationViewControllerDidAuthorizePaymentHandler = function(controller, payment, completion){
            console.log('authorization',  payment.token.paymentData)
            completion(PKPaymentAuthorizationStatus.Success)
        }

        PKPaymentAuthorizationViewControllerDelegateIml.ObjCProtocols = [PKPaymentAuthorizationViewControllerDelegate];

        return PKPaymentAuthorizationViewControllerDelegateIml;
    }(NSObject));

    export default {
        methods:{
            applePay(){
                let SupportedPaymentNetworks = [PKPaymentNetworkVisa, PKPaymentNetworkMasterCard]
                let ApplePaySwagMerchantID = "merchant.APPLICATION_ID"

                let paymentRequest = new PKPaymentRequest();
                paymentRequest.merchantIdentifier = ApplePaySwagMerchantID
                paymentRequest.supportedNetworks = SupportedPaymentNetworks
                paymentRequest.merchantCapabilities = PKMerchantCapability.Capability3DS
                paymentRequest.countryCode = "RU"
                paymentRequest.currencyCode = "RUB"


                let item = new PKPaymentSummaryItem();
                item.label = 'Test payment';
                item.amount = new NSDecimalNumber({ string: '1' });

                paymentRequest.paymentSummaryItems = [
                    item
                ]

                var listener = PKPaymentAuthorizationViewControllerDelegateIml.new();

                let applePayController = new PKPaymentAuthorizationViewController(paymentRequest);
                applePayController.delegate = listener;

                var rootViewController = UIApplication.sharedApplication.keyWindow.rootViewController;
                rootViewController.presentViewControllerAnimatedCompletion(applePayController, true, null)
            }
        }
    }
</script>

Я запускаю приложение с тестовой учетной записью Sandbox. Но переменная payment в PKPaymentAuthorizationViewControllerDelegateIml.prototype.paymentAuthorizationViewControllerDidAuthorizePaymentHandler пуста. В TestFlight с реальной кредитной картой такая же ошибка.


person Almaz Ilyasov    schedule 19.11.2019    source источник
comment
Вам нужно будет хранить экземпляр делегата где-то постоянно в переменной, в вашем коде он находится в локальной переменной, как только код будет выполнен, он может быть уничтожен сборщиком мусора.   -  person Manoj    schedule 19.11.2019


Ответы (1)


Спасибо, @Manoj, я делаю плагин, и он работает! https://docs.nativescript.org/plugins/building-plugins

person Almaz Ilyasov    schedule 19.11.2019