2015-09-25 98 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

謝謝我的朋友.. –