2012-03-16 42 views
1

我工作的移動快速結賬庫付款方式。我有一些與重定向貝寶登錄頁面的網址混淆。而且,下面的鏈接是我已經使用過的。安卓移動快速結賬圖書館

1 - Sandbox.Paypal.com它給了我登錄頁面,不能用卡方法付款。而且,如果我使用PayPal賬戶登錄,就可以立即支付按鈕。之後,此按鈕方法不起作用。付款不成功。

2 - Paypal.com它引發了我的內部服務器錯誤。它也不顯示登錄頁面。

在我上面的鏈接中,我沒有提到我的令牌&那裏的設備引用令牌。但是,我可以從webservice和paypal監聽器類的設備引用令牌獲取我的令牌。

我能做些什麼?任何人指導我如果知道?提前致謝。

更新

是啊,我犯了一個錯誤,我的網絡服務,我已清除了這個錯誤並糾正。現在,我可以成功登錄到我的PayPal帳戶通過Sandbox.Paypal.com,並支付獲得成功轉移。同時,我也無法使用卡的支付,如果我選擇用卡支付手段,它會打開一個新的窗口,並顯示以下圖片 -

CardError

我不知道爲什麼發生了。如果我在我的setExpressCheckout網絡服務中更改我的LandingPage =帳單,我只能查看信用卡頁面。而且,在填寫了信用卡詳細信息等細節後,我的付款沒有成功。它會顯示像下面的圖片 -

Card Error

我已經改變了,當我填寫信用卡信息也電子郵件地址。之後,它總是像這樣展示。該怎麼做?我不知道哪裏錯了。請有誰能幫我解決這個問題。

而重要的是,第一次登錄頁面或信用卡頁面的網頁瀏覽。我的軟鍵盤無法使用我的設備。如果控件在Web視圖中的某個位置之後,只有它被啓用。不是第一次。

+0

像「有已經是Paypal帳戶此電子郵件地址」的消息讓我覺得你莫名其妙地發送該數據作爲註冊,而不是登錄。 – Nick 2012-03-23 04:04:06

回答

5

我由我自己解決我的問題。 Sandbox.Paypal.com爲我做了一切。我做了與Mobile Express Checkout Library後,我的網絡服務錯誤,驗證我的錯誤它工作非常適合我。付款獲得成功。

並且,當我們按下Pay With Card按鈕時,打開新窗口的問題也已解決。使用網絡視圖進行付款的過程。當我們使用網絡的視圖方式,它需要一些setWebviewClient當我將此添加到我的網絡視圖它的正常工作。現在,我可以同時登錄和付款卡兩頁。而且,setOnTouchListener類使我softkeyboard那裏。

但是,我沒有嘗試在那裏使用信用卡付款。它不會接受虛擬信用卡。我不知道爲什麼它不接受。我很快就會發現這一點。並且,在這裏更新。

+0

hello @praveen我用paypal完成了。但是現在我用paypal_MECL替換它。我想遵循哪些步驟? – 2012-12-21 09:44:45

3

我一直沒有工作的貝寶,但我建議如果你使用這個類的WebView你使用WebViewClient,可以將網頁重定向到貝寶的兩個頁面。

public class HelloWebViewClient extends WebViewClient 
{ 
public HelloWebViewClient() 
{ 
// do nothing 
} 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) 
{ 
view.loadUrl(url); 
return true; 
} 

@Override 
public void onPageFinished(WebView view, String url) 
{ 
// TODO Auto-generated method stub 
super.onPageFinished(view, url); 
} 
} 
+0

是的,我只會在這裏犯錯。現在它與我的webview一起工作。 – Praveenkumar 2012-03-23 09:35:01

5

我已經解決了我通過沙箱測試的問題。下面附上了我的代碼。希望它能爲你工作。

Android_PP_Test1Activity.java

package com.PageViewerTilesDemo.src; 

import java.math.BigDecimal; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnDismissListener; 
import android.content.DialogInterface.OnMultiChoiceClickListener; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.RelativeLayout.LayoutParams; 
import android.widget.Toast; 

import com.paypal.android.MEP.CheckoutButton; 
import com.paypal.android.MEP.PayPal; 
import com.paypal.android.MEP.PayPalPayment; 

public class Android_PP_Test1Activity extends Activity implements 
    OnClickListener, OnItemSelectedListener, OnMultiChoiceClickListener, 
    OnDismissListener { 

private CheckoutButton launchPayPalButton; 
final static public int PAYPAL_BUTTON_ID = 10001; 
private static final int request = 1; 
private ProgressDialog _progressDialog; 
private boolean _paypalLibraryInit = false; 
private boolean _progressDialogRunning = false; 
private ImageView imgView; 
public static Context contex; 
public static boolean back = false; 

public static String resultTitle; 
public static String resultInfo; 
public static String resultExtra; 
private int _value = 100; // some default value that is not index 

protected static final int INITIALIZE_SUCCESS = 0; 
protected static final int INITIALIZE_FAILURE = 1; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.paypal); 
    contex = getApplicationContext(); 
    /* 
    * if (_paypalLibraryInit) { 
    * 
    * showPayPalButton(); 
    * 
    * 
    * } else { // Display a progress dialog to the user and start checking 
    * for when // the initialization is completed 
    * 
    * Thread initThread = new Thread(initLibraryRunnable); 
    * initThread.start(); 
    * 
    * _progressDialog = new ProgressDialog(Android_PP_Test1Activity.this); 
    * _progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    * _progressDialog.setMessage("Loading PayPal Payment Library"); 
    * _progressDialog.setCancelable(false); _progressDialog.show(); 
    * _progressDialogRunning = true; Thread newThread = new 
    * Thread(checkforPayPalInitRunnable); 
    * 
    * newThread.start(); 
    * 
    * } 
    */ 

    Thread libraryInitializationThread = new Thread() { 
     public void run() { 
      initLibrary(); 

      if (PayPal.getInstance().isLibraryInitialized()) { 
       hRefresh.sendEmptyMessage(INITIALIZE_SUCCESS); 
      } else { 
       hRefresh.sendEmptyMessage(INITIALIZE_FAILURE); 
      } 
     } 
    }; 
    libraryInitializationThread.start(); 
} 

// This handler will allow us to properly update the UI. You cannot touch 
// Views from a non-UI thread. 
Handler hRefresh = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     Log.i("Paypal", "Inside Handler message"); 
     switch (msg.what) { 
     case INITIALIZE_SUCCESS: 
      Log.i("Paypal", 
        "Inside Handler message inside Initialize Success"); 
      showPayPalButton(); 
      break; 
     case INITIALIZE_FAILURE: 
      Log.i("Paypal", "Inside Handler message Failure"); 
      showFailure(); 
      break; 
     } 
    } 
}; 

public void showFailure() { 
    /* 
    * title.setText("FAILURE"); 
    * info.setText("Could not initialize the PayPal library."); 
    * title.setVisibility(View.VISIBLE); info.setVisibility(View.VISIBLE); 
    */ 
    Log.i("Paypal", "in Failure"); 
} 

public void showPayPalButton() { 
    Log.i("Paypal", "Inside Show Paypal Button"); 
    removePayPalButton(); 
    // Back in the UI thread -- show the "Pay with PayPal" button 
    // Generate the PayPal Checkout button and save it for later use 
    PayPal pp = PayPal.getInstance(); 
    // get the checkoutbutton 
    launchPayPalButton = pp.getCheckoutButton(
      Android_PP_Test1Activity.this, PayPal.BUTTON_194x37, 
      CheckoutButton.TEXT_PAY); 
    // add it to layout 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    // position this at the bottom 
    params.addRule(RelativeLayout.CENTER_IN_PARENT); 
    // some margins for visual goodness 
    params.bottomMargin = 5; 
    params.leftMargin = 50; 

    launchPayPalButton.setLayoutParams(params); 
    launchPayPalButton.setId(PAYPAL_BUTTON_ID); 
    launchPayPalButton.setOnClickListener(Android_PP_Test1Activity.this); 

    ((RelativeLayout) findViewById(R.id.RelativeLayout01)) 
      .addView(launchPayPalButton); 
} 

/* 
* this method removes the PayPal button from the view 
*/ 
private void removePayPalButton() { 
    Log.i("Paypal", "Inside removePayPalButton method"); 
    // Avoid an exception for setting a parent more than once 
    if (launchPayPalButton != null) { 
     ((RelativeLayout) findViewById(R.id.RelativeLayout01)) 
       .removeView(launchPayPalButton); 
    } 
} 

/* 
* method to handle PayPal checkout button onClick event - this must be 
* called from the onClick() method implemented by the application 
*/ 
public void PayPalButtonClick(View v) { 
    Log.i("Paypal", "Inside PayPalButtonClick method"); 
    PayPalPayment newPayment = new PayPalPayment(); 
    newPayment.setSubtotal(new BigDecimal(50)); 
    newPayment.setCurrencyType("USD"); 
    newPayment.setRecipient("[email protected]"); 
    newPayment.setMerchantName("MANTRA"); 

    Intent checkoutIntent = PayPal.getInstance().checkout(newPayment, this, 
      new ResultDelegate()); 
    // Use the android's startActivityForResult() and pass in our 
    // Intent. 
    // This will start the library. 
    /* 
    * AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
    * alertDialog.setTitle("Message"); 
    * alertDialog.setMessage("You have already purchased this item!"); 
    * alertDialog.show(); 
    */ 
    this.startActivityForResult(checkoutIntent, request); 

    // Intent paypalIntent = PayPal.getInstance().checkout(newPayment, 
    // this); 
    // this.startActivityForResult(paypalIntent, 1); 

} 

/** init method **/ 
public void initLibrary() { 
    Log.i("Paypal", "Inside initLibrary method"); 
    PayPal pp = PayPal.getInstance(); 
    if (pp == null) { 
     // This is the main initialization call that takes in your Context, 
     // the Application ID, and the server you would like to connect to. 
     pp = PayPal.initWithAppID(this, "APP-80W284485P519543T", 
       PayPal.ENV_SANDBOX); 

     // -- These are required settings. 
     pp.setLanguage("en_US"); // Sets the language for the library. 
     // -- 

     // -- These are a few of the optional settings. 
     // Sets the fees payer. If there are fees for the transaction, this 
     // person will pay for them. Possible values are FEEPAYER_SENDER, 
     // FEEPAYER_PRIMARYRECEIVER, FEEPAYER_EACHRECEIVER, and 
     // FEEPAYER_SECONDARYONLY. 
     pp.setFeesPayer(PayPal.FEEPAYER_EACHRECEIVER); 
     // Set to true if the transaction will require shipping. 
     pp.setShippingEnabled(true); 
     // Dynamic Amount Calculation allows you to set tax and shipping 
     // amounts based on the user's shipping address. Shipping must be 
     // enabled for Dynamic Amount Calculation. This also requires you to 
     // create a class that implements PaymentAdjuster and Serializable. 
     pp.setDynamicAmountCalculationEnabled(false); 
     // -- 
     // _paypalLibraryInit = true; 

     // if dialog is running, close it 
     /* 
     * if (_progressDialog.isShowing()) { _progressDialog.dismiss(); 
     * _progressDialogRunning = false; } 
     */ 
    } 
} 

// PayPal Activity Results. This handles all the responses from the PayPal 
// Payments Library 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    Log.i("Paypal", "Inside onActivityResult method"); 
    // AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
    if (requestCode != request) 
     return; 
    SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", 
      MODE_WORLD_READABLE); 
    SharedPreferences.Editor prefsEditor = myPrefs.edit(); 
    Log.i("Paypal", "Inside onActivityResult method"); 
    Log.i("Paypal", " Purchase " +Firstpage.purchase); 
    if (Firstpage.purchase) { 
     prefsEditor.putString("PURCHASE", "TRUE"); 
     prefsEditor.commit(); 
     Toast.makeText(Android_PP_Test1Activity.contex, 
       "You have successfully completed your Transaction.", 
       Toast.LENGTH_LONG).show(); 
    }else{ 
     prefsEditor.putString("PURCHASE", "FALSE"); 
     prefsEditor.commit(); 
    } 


    if (back) { 
     Intent intent1 = new Intent(Android_PP_Test1Activity.this, 
       SampleTitlesDefault.class); 
     startActivity(intent1); 
     finish(); 
    } 

} 

/* 
* This method handles the PayPal Activity Results. This handles all the 
* responses from the PayPal Payments Library. This method must be called 
* from the application's onActivityResult() handler 
*/ 
public void PayPalActivityResult(int requestCode, int resultCode, 
     Intent intent) { 
    Log.i("Paypal", "Inside PayPalActivityResult method"); 
    AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
    alertDialog.setTitle("Test..."); 
    alertDialog.setMessage("This is your ID " + resultCode); 
    alertDialog.show(); 

} 

/********************************** 
* PayPal library related methods 
**********************************/ 

// This lets us show the PayPal Button after the library has been 
// initialized 
final Runnable showPayPalButtonRunnable = new Runnable() { 

    public void run() { 
     showPayPalButton(); 
    } 
}; 

// This lets us run a loop to check the status of the PayPal Library init 
final Runnable checkforPayPalInitRunnable = new Runnable() { 
    public void run() { 
     checkForPayPalLibraryInit(); 
    } 
}; 

// This lets us run the initLibrary function 
final Runnable initLibraryRunnable = new Runnable() { 
    public void run() { 
     initLibrary(); 
    } 
}; 

// This method is called if the Review page is being loaded but the PayPal 
// Library is not 
// initialized yet. 
private void checkForPayPalLibraryInit() { 

    Log.i("Paypal", "Inside checkForPayPalLibraryInit method"); 

    // Loop as long as the library is not initialized 
    while (_paypalLibraryInit == false) { 
     try { 
      // wait 1/2 a second then check again 
      Thread.sleep(500); 
     } catch (InterruptedException e) { 
      // Show an error to the user 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("Error initializing PayPal Library") 
        .setCancelable(false) 
        .setPositiveButton("OK", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, 
             int id) { 
            // Could do anything here to handle the 
            // error 
           } 
          }); 
      AlertDialog alert = builder.create(); 
      alert.show(); 
     } 
    } 
    // If we got here, it means the library is initialized. 
    // So, add the "Pay with PayPal" button to the screen 
    runOnUiThread(showPayPalButtonRunnable); 
} 

public void onDismiss(DialogInterface dialog) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
    // TODO Auto-generated method stub 

} 

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
     long arg3) { 
    // TODO Auto-generated method stub 

} 

public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onClick(View v) { 
    if (v == (CheckoutButton) findViewById(PAYPAL_BUTTON_ID)) { 
     PayPalButtonClick(v); 
    } 

} 

    } 

ResultDelegate的.java

package com.PageViewerTilesDemo.src; 

import java.io.Serializable; 

import android.content.SharedPreferences; 
import android.util.Log; 

import com.paypal.android.MEP.PayPalResultDelegate; 

public class ResultDelegate implements PayPalResultDelegate, Serializable { 

private static final long serialVersionUID = 10001L; 


public void onPaymentSucceeded(String payKey, String paymentStatus) { 
    Log.i("Result Delegate","Inside opPaymentSucceedde"); 
    Android_PP_Test1Activity.resultTitle = "SUCCESS"; 
    Android_PP_Test1Activity.resultInfo = "You have successfully completed your transaction."; 
    Android_PP_Test1Activity.resultExtra = "Key: " + payKey; 
    Firstpage.purchase=true; 
    Android_PP_Test1Activity.back=true; 
// Toast.makeText(Android_PP_Test1Activity.contex,"You have successfully completed your transaction.", Toast.LENGTH_LONG); 
    /*Intent intent = new Intent(ResultDelegate.this, 
      SampleTitlesDefault.class); 
    startActivity(intent);*/ 
} 

public void onPaymentFailed(String paymentStatus, String correlationID,String payKey, String errorID, String errorMessage) { 
    Android_PP_Test1Activity.resultTitle = "FAILURE"; 
    Android_PP_Test1Activity.resultInfo = errorMessage; 
    Android_PP_Test1Activity.resultExtra = "Error ID: " + errorID + "\nCorrelation ID: " 
      + correlationID + "\nPay Key: " + payKey; 
    Android_PP_Test1Activity.back=true; 
} 

public void onPaymentCanceled(String paymentStatus) { 
    Android_PP_Test1Activity.resultTitle = "CANCELED"; 
    Android_PP_Test1Activity.resultInfo = "The transaction has been cancelled."; 
    Android_PP_Test1Activity.resultExtra = ""; 
    Android_PP_Test1Activity.back=true; 
} 
} 
+0

沒有看到我的問題?我在這裏問'移動快速結帳庫'不是'移動支付庫'我已經完成了這個方法。謝謝你回答我。 – Praveenkumar 2012-03-31 05:31:57

+1

@Bhavesh hii你可以告訴我可以用信用卡支付嗎? – Google 2013-04-13 09:50:30

+0

@Bhavesh Patadiya你能幫我解決目前的問題嗎? – Keeano 2013-09-04 20:54:08