2012-03-16 34 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