【问题标题】:Android with Volley: sending objects via POST parameters带有 Volley 的 Android:通过 POST 参数发送对象
【发布时间】:2015-12-23 09:09:22
【问题描述】:

我正在使用 volley 将 Stripe 支付数据发送到我的服务器。

这是 Stripe 文档中的代码。

final Map<String, String> params = new HashMap<>();
// Code from Stripe.com documentation..
Card card = new Card("4242424242424242", "12", "2014", "123");

Stripe stripe = new Stripe("pk_test_api_key");
stripe.createToken(
  card,
  new TokenCallback() {
      public void onSuccess(Token token) {
          // Send token to your server via POST request
          params.put("stripeToken", token);
      }
      public void onError(Exception error) {
          // Show localized error message
          Toast.makeText(getContext(),
            error.getLocalizedString(getContext()),
            Toast.LENGTH_LONG
          ).show();
      }
  }

但是,当使用 Volley 向我的服务器发送 POST 请求时,我覆盖了 getParams() 方法,但我无法发送令牌,因为地图对象应该是 Map&lt;String, String&gt; 而不是 Map&lt;String, Object&gt;

RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
StringRequest request = new StringRequest(Request.Method.POST, url, 
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        // Success
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        // Error
                    }
                }) {
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        return params;
                    }
                };
                queue.add(request);

有没有办法将令牌对象传递给服务器?

【问题讨论】:

  • 也许令牌应该在标头中发送?
  • @BNK 标头是什么?

标签: android android-volley stripe-payments


【解决方案1】:

您不应在此处发送整个令牌 object,而只需发送令牌 ID tok_XXX

final Map<String, String> params = new HashMap<>();
// Code from Stripe.com documentation..
Card card = new Card("4242424242424242", "12", "2014", "123");

Stripe stripe = new Stripe("pk_test_api_key");
stripe.createToken(
  card,
  new TokenCallback() {
      public void onSuccess(Token token) {
          // Send token to your server via POST request
          params.put("stripeToken", token.getId());
      }
      public void onError(Exception error) {
          // Show localized error message
          Toast.makeText(getContext(),
            error.getLocalizedString(getContext()),
            Toast.LENGTH_LONG
          ).show();
      }
  }

然后您可以在服务器端使用该令牌或通过Retrieve Token API 检索所有信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-15
    • 2019-03-19
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2013-12-07
    相关资源
    最近更新 更多