2015-09-25 75 views
2

我使用volley将Stripe支付数据发送到我的服务器。Android with Volley:通过POST参数发送对象

这是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(); 
     } 
    } 

但是,使用抽射发送POST请求到我的服务器时,我重写getParams()方法,但我不能发送令牌因为地图对象应该是Map<String, String>,而不是Map<String, Object>

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); 

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

+0

也许令牌应该在标头中发送? – BNK

+0

@BNK什么是标题? –

回答

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检索所有信息。

+0

谢谢我的朋友.. –