Получить данные, возвращаемые Google Pay API на серверной части

При выполнении платежа через Google Pay в моем приложении для Android после подтверждения платежа я получаю PaymentData переменная, из которой я могу получить некоторую информацию, такую ​​как электронная почта, адрес доставки, платежный адрес,...

Есть ли способ получить эту информацию на моем бэкэнде, не отправляя их, чтобы избежать изменений?

Например, когда я выполняю Google Connect с OAuth, я получаю токен, который позволяет мне выполнять запрос к серверам Google и самостоятельно получать данные, такие как "почта", ... Таким образом, я могу проверить, была ли почта изменена,

Спасибо,

РЕДАКТИРОВАТЬ: вот код из приложения Android

private void payWithGooglePay() {
    PaymentDataRequest.Builder request =
            PaymentDataRequest.newBuilder()
                    .setEmailRequired(true)
                    .setShippingAddressRequired(needShippingAddress)
                    .setTransactionInfo(
                            TransactionInfo.newBuilder()
                                    .setTotalPriceStatus(WalletConstants.TOTAL_PRICE_STATUS_FINAL)
                                    .setTotalPrice(String.valueOf(amountToPay / 100))
                                    .setCurrencyCode(currency.getCurrencyCode())
                                    .build())
                    .addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_CARD)
                    .addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD)
                    .setCardRequirements(
                            CardRequirements.newBuilder()
                                    .setBillingAddressRequired(needBillingAddress)
                                    .addAllowedCardNetworks(Arrays.asList(
                                            WalletConstants.CARD_NETWORK_VISA,
                                            WalletConstants.CARD_NETWORK_MASTERCARD))
                                    .build());

    PaymentMethodTokenizationParameters tokenizationParameters =
            PaymentMethodTokenizationParameters.newBuilder()
                    .setPaymentMethodTokenizationType(WalletConstants.PAYMENT_METHOD_TOKENIZATION_TYPE_PAYMENT_GATEWAY)
                    .addParameter("gateway", "stripe")
                    .addParameter("stripe:publishableKey", liveMode ? getString(R.string.stripe_live_pk_key) : getString(R.string.stripe_test_pk_key))
                    .addParameter("stripe:version", "5.1.0")
                    .build();

    PaymentDataRequest paymentDataRequest = request
            .setPaymentMethodTokenizationParameters(tokenizationParameters)
            .build();

    if (paymentDataRequest == null) {
        return;
    }

    AutoResolveHelper.resolveTask(paymentsClient.loadPaymentData(paymentDataRequest),
            getActivity(), ProgressViewActivity.PAYMENT_WITH_GOOGLE_PAY_REQUEST_CODE);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case ProgressViewActivity.PAYMENT_WITH_GOOGLE_PAY_REQUEST_CODE:
            if (resultCode == Activity.RESULT_OK) {
                PaymentData paymentData = PaymentData.getFromIntent(data);
                Log.d("MyGooglePay", "Google transaction ID: " + paymentData.getGoogleTransactionId());
                Log.d("MyGooglePay", "mail: " + paymentData.getEmail());
                Log.d("MyGooglePay", "token:" + paymentData.getPaymentMethodToken().getToken());
                Log.d("MyGooglePay", "extra: " + (paymentData.getExtraData() != null ? paymentData.getExtraData().toString() : ""));

                CardInfo cardInfo = paymentData.getCardInfo();
                String description = cardInfo.getCardDescription();
                Log.d("MyGooglePay", description);

                UserAddress shippingAddress = paymentData.getShippingAddress();
                UserAddress billingAddress = cardInfo.getBillingAddress();
                Log.d("MyGooglePay", "shipping: " + shippingAddress);
                Log.d("MyGooglePay", "billing: " + billingAddress);

                String rawToken = paymentData.getPaymentMethodToken().getToken();

                // Now that you have a Stripe token object, charge that by using the id
                Token stripeToken = Token.fromString(rawToken);
                if (stripeToken != null) {
                    // This chargeToken function is a call to your own server, which should then connect
                    // to Stripe's API to finish the charge.
                    Log.d("MyGooglePay", stripeToken.getCard().toJson().toString());
                    //sendFinalRequestAndGoToNext(stripeToken.getId());
                }
                break;
            }
    }
}

И чтобы было ясно, что я хочу, это получать PaymentData напрямую из моего бэкэнда, а не отправлять их из приложения в мой бэкэнд, чтобы избежать изменений.

0 ответов

Это разделенное поведение от процессоров и шлюзов предназначено, и это там, чтобы максимизировать совместимость для всех вовлеченных агентов.

Конфиденциальная информация, полученная из Google Pay, зашифрована так, что только обработчик платежа может раскрыть содержимое полезной нагрузки. Подделка содержимого в середине просто сделает полезную нагрузку недействительной.

Чтобы иметь доступ к этому контенту, вы также можете выбрать использование Google Pay с помощью DIRECT интеграция. При этом обратите внимание, что обработка платежей включает в себя сложность и соответствие нормативным условиям, таким как PCI DSS, и поэтому не рекомендуется, если не требуется иное.

Другие вопросы по тегам