Неверная сумма транзакции токена Apple Pay - PullRequest
0 голосов
/ 11 июля 2019

токен Apple Pay содержит неверную информацию о транзакции.Например, если сумма транзакции составляет $ 1,10, на устройстве iOS на экране Apple Pay по-прежнему отображается правильная сумма, но paymentToken возвращает 110 при расшифровке

Я использовал эту библиотеку для дешифрования токена Apple Pay с использованием собственной пары открытых и закрытых ключей

https://github.com/sidimansourjs/applepay-token

Мой пример кода

class ViewController: UIViewController {
...
 @IBAction func payBtn(_ sender: UIButton) {
        do {
            let paymentItem = PKPaymentSummaryItem.init(label: "Test item", amount: NSDecimalNumber(value: 1.10))
            let paymentNetworks = [PKPaymentNetwork.amex, .discover, .masterCard, .visa]

            if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: paymentNetworks) {

                let request = PKPaymentRequest()
                request.currencyCode = "SGD" // 1
                request.countryCode = "SG" // 2
                request.merchantIdentifier = "merchant.com.xxxxx" // 3
                request.merchantCapabilities = PKMerchantCapability.capability3DS // 4
                request.supportedNetworks = paymentNetworks // 5
                request.paymentSummaryItems = [paymentItem] // 6

                guard let paymentVC = PKPaymentAuthorizationViewController(paymentRequest: request) else {
                    displayDefaultAlert(title: "Error", message: "Unable to present Apple Pay authorization.")
                    return
                }

                paymentVC.delegate = self
                self.present(paymentVC, animated: true, completion: nil)

            } else {
                displayDefaultAlert(title: "Error", message: "Unable to make Apple Pay transaction.")
            }
        } catch {
            print(error.localizedDescription)
        }

    }
}

extension ViewController: PKPaymentAuthorizationViewControllerDelegate {
    func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
        dismiss(animated: true, completion: nil)
    }
    func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {

        let token = String(data: payment.token.paymentData, encoding: .utf8)
        let utf8str = token!.data(using: .utf8)

        if let base64Encoded = utf8str?.base64EncodedString()
        {
            print("Encoded:  \(base64Encoded)")

            //Send token to backend server to decrypt
        }
    }
}

Я обнаружил это при попытке сделать запрос на оплату Adyen (платежный шлюз).Запрос должен содержать как поле amount, так и поле paymentToken, но он никогда не был успешным, поскольку сумма в amount и paymentToken не совпадает.Затем я попытался amount 110 вместо 1.10, тогда запрос был успешным, но по иронии судьбы на панели управления Adyen почему-то все равно было понятно, что сумма транзакции составляет 1,10

Я ожидал, что transactionAmount в токене Apple Pay будет 1,10

Пожалуйста, помогите объяснить, почему существует разница в сумме Apple Pay, отображаемой на устройстве и в токене

...