android中的条带支付网关

时间:2016-05-24 04:45:25

标签: android stripe-payments

我正在我的Android应用程序中集成Stripe。 我发现了两个问题,我被困住了。

第一个(主要)问题是 - 我从卡信息中获得了令牌密钥。但是当我试图进行第一次充电时,它在下一行显示错误。

Stripe.apiKey = "sk_test_0000000000000";

我也用Google搜索但找不到任何解决方案。

Creating Stripe Customer - cannot resolve symbol apiKey

我甚至也见过这样的问题。但我没理解它的解决方案。

以下是我的收费代码:

    final String publishableApiKey = BuildConfig.DEBUG ?
            "pk_test_000000000000000000" :
            //"sk_test_00000000000000000000000" :
            getString(R.string.com_stripe_publishable_key);

    final TextView cardNumberField = (TextView) findViewById(R.id.cardNumber);
    final TextView monthField = (TextView) findViewById(R.id.month);
    final TextView yearField = (TextView) findViewById(R.id.year);
    TextView cvcField = (TextView) findViewById(R.id.cvc);

    Card card = new Card(cardNumberField.getText().toString(),
            Integer.valueOf(monthField.getText().toString()),
            Integer.valueOf(yearField.getText().toString()),
            cvcField.getText().toString());

    Stripe stripe = new Stripe();
    stripe.createToken(card, publishableApiKey, new TokenCallback() {
        public void onSuccess(Token token) {
            // TODO: Send Token information to your backend to initiate a charge
            Toast.makeText(
                    getApplicationContext(),
                    "Charge Token created: " + token.getId(),
                    Toast.LENGTH_LONG).show();


            /*make a charge starts*/

            // Set your secret key: remember to change this to your live secret key in production
            // Create the charge on Stripe's servers - this will charge the user's card
            Stripe.apiKey = "sk_test_0000000000000000000000";
            try {
                Map<String, Object> chargeParams = new HashMap<String, Object>();
                chargeParams.put("amount", 100); // amount in cents, again
                chargeParams.put("currency", "usd");
                chargeParams.put("source", token.getId());
                chargeParams.put("description", "Example charge");

                Charge charge = Charge.create(chargeParams);
                System.out.println("Charge Log :" + charge);
            } catch (CardException e) {
                // The card has been declined
            } catch (APIException e) {
                e.printStackTrace();
            } catch (AuthenticationException e) {
                e.printStackTrace();
            } catch (InvalidRequestException e) {
                e.printStackTrace();
            } catch (APIConnectionException e) {
                e.printStackTrace();
            }

            /*charge ends*/
        }

我从不同的例子中尝试过这些代码。我也跟着Stripe doc。

但我收到了这个错误:

  

com.stripe.exception.AuthenticationException:未提供API密钥。 (提示:使用'Stripe.apiKey ='设置API密钥。

第二个问题是 - 关于验证。 如果我输入自己的卡片详情,如果我写错了cvv号码。它仍然生成令牌密钥。

我已经使用Stripe的官方文档实现了字段验证。我不知道如何用实时数据验证它。

第一期的解决方案:

 com.stripe.Stripe.apiKey = "sk_test_xxxxxxxxxxxxxxxxxxx";
                        try {
                            final Map<String, Object> chargeParams = new HashMap<String, Object>();
                            chargeParams.put("amount", 500); // amount in cents, again
                            chargeParams.put("currency", "usd");
                            chargeParams.put("source", token.getId());
                            chargeParams.put("description", "Example charge");
                            new Thread(new Runnable() {
                                @Override
                                public void run() {
                                    Charge charge = null;
                                    try {
                                        charge = Charge.create(chargeParams);
                                    } catch (AuthenticationException e) {
                                        e.printStackTrace();
                                    } catch (InvalidRequestException e) {
                                        e.printStackTrace();
                                    } catch (APIConnectionException e) {
                                        e.printStackTrace();
                                    } catch (CardException e) {
                                        e.printStackTrace();
                                    } catch (APIException e) {
                                        e.printStackTrace();
                                    }
                                    System.out.println("Charge Log :" + charge);
                                }
                            }).start();

                        } catch (Exception e) {
                            e.printStackTrace();
                        }

1 个答案:

答案 0 :(得分:1)

Stripe的Android绑定只允许您对卡信息进行标记。创建令牌后,必须将其发送到外部服务器,您可以在API服务器中使用它。

您无法直接从应用中使用该令牌,因为该应用必须永远无法访问您的密钥,攻击者可以轻松将其提取,然后该攻击者可以访问您的帐户。

重新。第二个问题,当创建令牌时,该卡未经银行验证(仍有一些基本的健全性检查,例如检查数字位数,未来到期日的事实等等)。 )。只有当您在服务器端API请求中使用令牌时,才会向银行核对该卡。