【问题标题】:Android Stripe app crashes on adding new payment sourceAndroid Stripe 应用程序在添加新支付源时崩溃
【发布时间】:2019-02-01 22:01:44
【问题描述】:

我正在尝试使用此文档https://stripe.com/docs/mobile/android/customer-information 在 android 中使用条带 SDK 实现上述结帐流程。我创建了一个后端调用,它返回像这样的临时密钥

{
    "id": "ephkey_EPHEMERAL_KEY_HERE",
    "object": "ephemeral_key",
    "associated_objects": [
        {
            "id": "cus_CUSTOMER_ID_HERE",
            "type": "customer"
        }
    ],
    "created": 1535352558,
    "expires": 1535356158,
    "livemode": true,
    "secret": "ek_live_SECRET_HERE"
}

在我的应用程序中,正在初始化我的 CustomerSession 并像这样启动 PaymentMethodsActivity

CustomerSession.initCustomerSession(
                new MyEphemeralKeyProvider(
                        new MyEphemeralKeyProvider.ProgressListener() {
                            @Override
                            public void onStringResponse(String string) {

                                if (string.startsWith("Error: ")) {
                                    new android.support.v7.app.AlertDialog.Builder(SelectCardActivity.this).setMessage(string).show();
                                }

                                Intent payIntent = PaymentMethodsActivity.newIntent(SelectCardActivity.this);
                                startActivityForResult(payIntent, REQUEST_CODE_SELECT_SOURCE);
                            }
                        }));

然后我有这个 onActivityResult 方法

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_SELECT_SOURCE && resultCode == RESULT_OK) {
            String selectedSource = data.getStringExtra(PaymentMethodsActivity.EXTRA_SELECTED_PAYMENT);
            Source source = Source.fromString(selectedSource);
            // This is the customer-selected source.
            // Note: it isn't possible for a null or non-card source to be returned at this time.
        }
    }

当我尝试使用以下堆栈跟踪提交应用程序崩溃时,它会很好地打开 PaymentMethodsActivity 并添加新的付款方式。我可能错过了什么?

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.stealthdroids.itransfer, PID: 22404
                  java.lang.IllegalStateException: Attempted to get instance of PaymentConfiguration without initialization.
                      at com.stripe.android.PaymentConfiguration.getInstance(PaymentConfiguration.java:29)
                      at com.stripe.android.view.AddSourceActivity.onActionSave(AddSourceActivity.java:133)
                      at com.stripe.android.view.StripeActivity.onOptionsItemSelected(StripeActivity.java:88)
                      at com.stripe.android.view.AddSourceActivity.onOptionsItemSelected(AddSourceActivity.java:33)
                      at android.app.Activity.onMenuItemSelected(Activity.java:2970)
                      at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:407)
                      at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
                      at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
                      at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
                      at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:63)
                      at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:203)
                      at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:780)
                      at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
                      at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171)
                      at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973)
                      at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:963)
                      at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:624)
                      at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:150)
                      at android.view.View.performClick(View.java:4848)
                      at android.view.View$PerformClick.run(View.java:20270)
                      at android.os.Handler.handleCallback(Handler.java:815)
                      at android.os.Handler.dispatchMessage(Handler.java:104)
                      at android.os.Looper.loop(Looper.java:194)
                      at android.app.ActivityThread.main(ActivityThread.java:5668)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:963)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:758)

【问题讨论】:

    标签: android android-volley stripe-payments


    【解决方案1】:

    它抱怨您没有使用可发布的密钥初始化 PaymentConfiguration 对象。

    PaymentConfiguration.init(<<YOUR PUBLISHABLE KEY HERE>>);
    

    【讨论】:

    • 哇,太感谢你了,我差点把自己弄死了
    • @korben 从哪里可以得到这个可发布的密钥?
    【解决方案2】:

    应该是这样的

    PaymentConfiguration.init(applcationContext, "publishableKey");
    

    【讨论】:

      【解决方案3】:

      为了修复此错误,您需要在客户会话初始化之前添加以下代码行

          `PaymentConfiguration.init(this,"<past your publishable key here>");`
      

      现在您可以在登录帐户后通过此链接https://dashboard.stripe.com/test/apikeys 获取您的可发布密钥。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-22
        • 2021-02-11
        • 1970-01-01
        • 1970-01-01
        • 2020-08-16
        • 2021-08-24
        • 2014-05-23
        • 1970-01-01
        相关资源
        最近更新 更多