2012-11-29 52 views
2

我正在使用card.io android sdk来集成信用卡支付功能,但它不允许我扫描卡片信息,它只是告知输入卡片信息,然后什么也不做。Card.io不允许扫描信用卡

以下是我的代码

package org.my.scanExample;

import io.card.payment.CardIOActivity; 
import io.card.payment.CreditCard; 
import org.my.scanExample.R; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class MyScanActivity extends Activity 
{ 
    // You MUST register with card.io to get an app token. Go to https://card.io/apps/new/ 
    private static final String MY_CARDIO_APP_TOKEN = "App_Token"; 

    final String TAG = getClass().getName(); 

    private Button scanButton; 
    private TextView resultTextView; 

    private int MY_SCAN_REQUEST_CODE = 100; // arbitrary int 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     resultTextView = (TextView)findViewById(R.id.resultTextView); 
     scanButton = (Button)findViewById(R.id.scanButton); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     resultTextView.setText("card.io library version: " + CardIOActivity.sdkVersion() + "\nBuilt: " + CardIOActivity.sdkBuildDate()); 

     if (CardIOActivity.canReadCardWithCamera(this)) { 
      scanButton.setText("Scan a credit card with card.io"); 
     } 
     else { 
      scanButton.setText("Enter credit card information"); 
     } 
    } 

    public void onScanPress(View v) { 
     // This method is set up as an onClick handler in the layout xml 
     // e.g. android:onClick="onScanPress" 

     Intent scanIntent = new Intent(this, CardIOActivity.class); 

     // required for authentication with card.io 
     scanIntent.putExtra(CardIOActivity.EXTRA_APP_TOKEN, MY_CARDIO_APP_TOKEN); 

     // customize these values to suit your needs. 
     scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, true); // default: true 
     scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, false); // default: false 
     scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_ZIP, false); // default: false 

     // hides the manual entry button 
     // if set, developers should provide their own manual entry mechanism in the app 
     scanIntent.putExtra(CardIOActivity.EXTRA_SUPPRESS_MANUAL_ENTRY, false); // default: false 

     // MY_SCAN_REQUEST_CODE is arbitrary and is only used within this activity. 
     startActivityForResult(scanIntent, MY_SCAN_REQUEST_CODE); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     String resultStr; 
     if (data != null && data.hasExtra(CardIOActivity.EXTRA_SCAN_RESULT)) { 
      CreditCard scanResult = data.getParcelableExtra(CardIOActivity.EXTRA_SCAN_RESULT); 

      // Never log a raw card number. Avoid displaying it, but if necessary use getFormattedCardNumber() 
      resultStr = "Card Number: " + scanResult.getRedactedCardNumber() + "\n"; 

      // Do something with the raw number, e.g.: 
      // myService.setCardNumber(scanResult.cardNumber); 

      if (scanResult.isExpiryValid()) { 
       resultStr += "Expiration Date: " + scanResult.expiryMonth + "/" + scanResult.expiryYear + "\n"; 
      } 

      if (scanResult.cvv != null) { 
       // Never log or display a CVV 
       resultStr += "CVV has " + scanResult.cvv.length() + " digits.\n"; 
      } 

      if (scanResult.zip != null) { 
       resultStr += "Zip: " + scanResult.zip + "\n"; 
      } 
     } 
     else { 
      resultStr = "Scan was canceled."; 
     } 
     resultTextView.setText(resultStr); 

    } 
} 
+0

logcat中是否有任何提示? (我假设你用真实代码中的https://www.card.io/accounts/register/developer代替了“我的应用令牌”) – tomwhipple

+0

不,我没有在logcat中发现任何异常。我已将生成的应用程序令牌放入我的应用程序中。还有一个问题是,它是免费的API或使用sdk收取费用。 –

+0

你可以粘贴logcat吗?即使没有记录异常,也可能有一些其他消息提供线索。 – tomwhipple

回答

0
private static final String MY_CARDIO_APP_TOKEN = "App_Token"; 

您的应用程序令牌是无效的。使用有效的令牌