【问题标题】:Why i can't get paymentId with PayPal Native-Checkout Android为什么我无法使用 PayPal Native-Checkout Android 获取 paymentId
【发布时间】:2026-01-04 04:40:01
【问题描述】:

您好,我有使用 paypal sdk 的移动应用程序,

我已经创建了使用 paypal 配置我的应用程序,所有过程都很顺利,但是当付款完成后,我只得到 PayerId 和 OrderId,

对于 PaymentId 我得到了 null ,

付款 ID 对我来说非常重要,因为我将其发送到我的服务器以检查付款是否为客户端处理服务器。

这是我的应用配置

         config = new CheckoutConfig(
            getApplication(),
            "APP_PAYPAL_CLIENT_ID",
            Environment.SANDBOX,
            String.format("%s://paypalpay", "APPLICATION_ID"),
            CurrencyCode.USD,
            UserAction.PAY_NOW,
            new SettingsConfig(
                    true,
                    false
            )
    );
    PayPalCheckout.setConfig(config);


    payPalButton = findViewById(R.id.payPalButton);

    payPalButton.setup(
            new CreateOrder() {
                @Override
                public void create(@NotNull CreateOrderActions createOrderActions) {
                    ArrayList purchaseUnits = new ArrayList<>();
                    purchaseUnits.add(
                            new PurchaseUnit.Builder()
                                    .amount(
                                            new Amount.Builder()
                                                    .currencyCode(CurrencyCode.USD)
                                                    .value("10.00")
                                                    .build()
                                    )
                                    .build()
                    );
                    Order order = new Order(
                            OrderIntent.CAPTURE,
                            new AppContext.Builder()
                                    .userAction(UserAction.PAY_NOW)
                                    .build(),
                            purchaseUnits
                    );
                    createOrderActions.create(order, (CreateOrderActions.OnOrderCreated) null);
                }
            },
            new OnApprove() {
                @Override
                public void onApprove(@NotNull Approval approval) {
                    approval.getOrderActions().capture(new OnCaptureComplete() {
                        @Override
                        public void onCaptureComplete(@NotNull CaptureOrderResult result) {
                            Log.i("CaptureOrder", String.format("CaptureOrderResult: %s", result));
                            Log.i("CaptureOrder", String.format("CaptureOrderResult: %s", approval.getData().getOrderId()));
                            Log.i("CaptureOrder", String.format("CaptureOrderResult: %s", approval.getData().getPaymentId()));
                            Log.i("CaptureOrder", String.format("CaptureOrderResult: %s", approval.getData().getPayerId()));

                            

                        }


                    });



                }
            }

    );

【问题讨论】:

    标签: android paypal paypal-android-sdk


    【解决方案1】:

    终于找到了解决办法:

    1. 在新的 PayPal Native-Checkout Android SDK 中,他们不提供paymentId;你只能得到PayerIdOrderId
    2. 我使用OrderId;然后我将OrderId 发送到我的服务器。我使用 PayPal PHP SDK V2 来获取订单详细信息响应,其中包含 PaymentId 和所有其他付款信息。

    【讨论】:

    • 你的意思是PuyerId?或者你的意思是例如PayerIdBuyerId?
    • PayerId,付款的PayPal账户的唯一ID。比主要电子邮件更有用,因为电子邮件可以在帐户之间更改和移动
    • 我的意思是我无法获得 PayementId
    【解决方案2】:

    它不会在approval 对象中,它会在捕获result 中,因为它是在捕获之后创建的。您已经在记录result,因此您应该在那里或通过其中一种方法查看数据。

    查找捕获 ID,它与订单 ID 具有相同的 17 个字母数字格式,但值不同。捕获 ID 对应于 PayPal.com 详细信息、报告和发送给接收者的电子邮件通知中用于记帐目的的 PayPal 交易 ID。

    (订单id仅在审批时使用,没有理由永久存储,仅用于调试目的)

    【讨论】:

    • 感谢您的回复,但结果对象只有 OrderResponse(订单 id 和状态)。如果我能获得交易 ID 将是很好的一步。
    最近更新 更多