【问题标题】:Stripe integration in android and create tokenandroid中的条带集成并创建令牌
【发布时间】:2015-04-17 21:22:00
【问题描述】:

我想在 android 中集成条带并使用可发布密钥测试代码。我想在使用卡参数成功交易后创建令牌任何建议的代码。

【问题讨论】:

  • 阅读this
  • @Skizo:我做了一切它说付款人成功和 json tesponse 数据,但我没有在响应数据中得到令牌..

标签: android stripe-payments


【解决方案1】:

您不应在 Android 应用内进行收费。客户端(这里是您的 App)应该只获取一个 Stripe 令牌,然后将此令牌发送到您的后端(您的服务器),然后使用此令牌创建一个带有条带的费用。

您不能创建收费客户端,因为它不安全:您的密钥不应该在应用程序内部,因为它不再是秘密的。

这就是为什么 lib stripe-android 没有charge 类的原因:它不是为了那个。 stripe-java lib 旨在用于 java 服务器。

【讨论】:

    【解决方案2】:

    遵循此代码并导入条带库。

    public class StripePaymentActivity extends FragmentActivity {
    
    /*
     * Change this to your publishable key.
     * 
     * You can get your key here: https://manage.stripe.com/account/apikeys
     */
    // public static final String PUBLISHABLE_KEY =
    // "pk_test_Tw0HyQcWAVM9R5dBdiiS90X9"; Client Key
    
    public static final String PUBLISHABLE_KEY = "your key";
    private ProgressDialogFragment progressFragment;
    String[] id, memberId, userEmail, endDate;
    Dialog dialog;
    
    @SuppressLint("NewApi")
    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    setContentView(R.layout.payment_activity);
    dialog = new Dialog(StripePaymentActivity.this);
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    progressFragment = ProgressDialogFragment
            .newInstance(R.string.progressMessage);
    }
    
    public void saveCreditCard(PaymentForm form) {
    
    Card card = new Card(form.getCardNumber(), form.getExpMonth(),
            form.getExpYear(), form.getCvc());
    Log.e("card ", "27th March ::- " + card);
    boolean validation = card.validateCard();
    Log.e("Validation", "27th March::-" + validation);
    if (validation) {
        startProgress();
        new Stripe().createToken(card, PUBLISHABLE_KEY,
                new TokenCallback() {
                    public void onSuccess(Token token) {
                        try {
                            // getTokenList().addToList(token);
                            Log.e("Token Json", "27th March::-" + token);
                            final Map<String, Object> chargeParams = new     HashMap<String, Object>();
                            chargeParams.put("amount", 999);
                            chargeParams.put("currency", "usd");
                            chargeParams.put("card", token.getId());
                            // chargeParams.put("captured", false);
                            com.stripe.Stripe.apiKey = "sk.. your key";
                            // Charge charge = Charge.create(chargeParams);
                            // Charge ch = Charge.retrieve(charge.getId());
                            // // Used it here for demonstration
                            // ch.capture();
                            // Charge.create(chargeParams);
                            new AsyncTask<Void, Void, Void>() {
    
                                Charge charge;
    
                                @Override
                                protected Void doInBackground(
                                        Void... params) {
                                    try {
                                        com.stripe.Stripe.apiKey = "sk_your key";
                                        charge = Charge
                                                .create(chargeParams);
                                    } catch (Exception e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                        // showAlert("Exception while charging the card!",
                                        // e.getLocalizedMessage());
                                    }
                                    return null;
                                }
    
                                protected void onPostExecute(Void result) {
                                    Toast.makeText(
                                            StripePaymentActivity.this,
                                            "Card Charged : "
                                                    + charge.getCreated()
                                                    + "\nPaid : "
                                                    + charge.getPaid(),
                                            Toast.LENGTH_LONG).show();
                                };
    
                            }.execute();
                            final Map<String, Object> chargeParams1 = new HashMap<String, Object>();
                            chargeParams1.put("amount", 999);
                            chargeParams1.put("currency", "usd");
                            chargeParams1.put("card", token.getId());
                            chargeParams1.put("captured", false);
                            com.stripe.Stripe.apiKey = "sk_your key";
                            Charge charge1 = Charge.create(chargeParams1);
                            com.stripe.Stripe.apiKey = "sk_your key";
                            Charge ch2 = Charge.retrieve(charge1.getId()); //    Use
                                                                            // saved
                                                                            // charged
                                                                            // Id
                                                                            // instead
                                                                            // of
                                                                            // charge.getId()
                                                                            // Used
                                                                            // it
                                                                            // here
                                                                            // for
                                                                            // demonstration
                            ch2.capture();
                            com.stripe.Stripe.apiKey = "sk_your key";
    
                            // Customer Parameters HashMap
                            Map<String, Object> customerParams = new HashMap<String, Object>();
                            customerParams
                                    .put("description",
                                            com.essexpass.Global
                                                    .getPreferenceString(
                                                            getApplicationContext(),
                                                            "email", ""));
                            customerParams.put("card", token.getId()); // Obtained
                                                                        // in
                                                                        // onSuccess()
                                                                        // method
                                                                        // of
                                                                        // TokenCallback
                                                                        // while
                                                                        // creating
                                                                        // token
                                                                        // above
    
                            // Create a Customer
                            Customer cust = Customer.create(customerParams);
                            com.stripe.Stripe.apiKey = "sk_your key";
    
                            // Retrieve saved customer ID from database
                            // String cust_id = getSavedCustomerId();
                            // //getSavedCustomerId() method should retrieve
                            // saved customer Id from db
    
                            // Charge Parameters HashMap
                            final Map<String, Object> chargeParams2 = new HashMap<String, Object>();
                            chargeParams2.put("amount", 999);
                            chargeParams2.put("currency", "usd");
                            chargeParams2.put(
                                    "customer",
                                    com.essexpass.Global
                                            .getPreferenceString(
                                                    getApplicationContext(),
                                                    "email", "")); // Use
                                                                    // customer
                                                                    // instead
                                                                    // of
                                                                    // card
    
                            Charge.create(chargeParams2);
                        } catch (AuthenticationException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (InvalidRequestException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (APIConnectionException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (CardException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (APIException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        finishProgress();
                        // Now Call The Services for the and generate New
                        // Member Id
                        GetUserPassDeal();
                    }
    
                    public void onError(Exception error) {
                        handleError(error.getLocalizedMessage());
                        finishProgress();
                    }
                });
    } else if (!card.validateNumber()) {
        handleError("The card number that you entered is invalid");
    } else if (!card.validateExpiryDate()) {
        handleError("The expiration date that you entered is invalid");
    } else if (!card.validateCVC()) {
        handleError("The CVC code that you entered is invalid");
    } else {
        handleError("The card details that you entered are invalid");
    }
    }
    
    private void startProgress() {
    progressFragment.show(getSupportFragmentManager(), "progress");
    }
    
    private void finishProgress() {
    progressFragment.dismiss();
    
    }
    
    private void handleError(String error) {
    ErrorDialogFragment fragment = ErrorDialogFragment.newInstance(
            R.string.validationErrors, error);
    fragment.show(getFragmentManager(), "error");
    }
    

    我在我的应用程序中使用了此代码。 谢谢。

    【讨论】:

    • 我在库中没有 Charge 类(编译 'com.stripe:stripe-android:2.0.2')。为什么?
    • 你能添加充电类 fopr 面糊明白吗? @Hardik Parmar
    • @KuldeepJindani 它是一个系统类。
    • 这个答案实际上是获得了一个令牌,但也在创建一个收费客户端,这是非常不推荐的:你的条带密钥不应该在野外(=在客户端),收费应该始终由您的服务器制作。请不要使用这种方法!
    • 你应该创建收费服务器端!
    【解决方案3】:

    Charge 旧的 stripe sdk 中不包含类,我刚刚从 Download gson-2.2.2.jar : gson « g « Jar File Download 下载了最新的 stripe 和 gson jars 文件并将其放在 lib 下,从而解决了这个问题我的项目目录中的文件夹并将compile fileTree(dir: 'libs', include: ['*.jar']) 添加到 build.gradle 并从我的项目中删除旧的条带模块,现在它工作正常我的 gradle 文件是

    dependencies {
      compile fileTree(dir: 'libs', include: ['*.jar'])
      compile 'com.android.support:appcompat-v7:25.1.0'
      compile 'com.android.support:design:25.1.0'
      testCompile 'junit:junit:4.12'
      compile 'com.stripe:stripe-android:2.0.2'
      compile 'com.google.android.gms:play-services-appindexing:8.4.0'
    }
    

    现在您可以使用 stripe

    charge

    【讨论】:

      【解决方案4】:

      很抱歉回答迟了,但它会在将来帮助某人。

      您还可以将以下依赖项添加到 build.gradle 文件中。

      compile "com.stripe:stripe-java:5.7.1"
      

      You can see all its classes here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        • 2014-12-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-21
        • 2015-02-24
        • 2017-04-15
        相关资源
        最近更新 更多