Note that there are some explanatory texts on larger screens.

plurals
  1. POPayPal MECL transaction problems
    text
    copied!<p>I'm trying to setup inapp paypall MECL transaction.</p> <p>But it keeps failing in getting a device token (couldNotFetchDeviceReferenceToken)</p> <p>and beside of that when the library is initialized, i get the button but the onClickListeneren gets only the first click when i click multiple times on the button (while not doing anything in the onClick)..</p> <p>Getting the followin errors:</p> <pre><code>12-19 16:59:41.731: ERROR/Error(4745): Authentication failed, button not enabled. 12-19 16:59:41.739: ERROR/paypal(4745): FAIL receiving Token 12-19 17:00:06.544: ERROR/PP Init(4745): INITIALIZE_FAILURE </code></pre> <p>Is there anyone who knows what i'm doing wrong?</p> <p>here is some of the source:</p> <pre><code> // The PayPal server to be used - can also be ENV_NONE and ENV_LIVE private static final int server = PayPal.ENV_SANDBOX; // The ID of your application that you received from PayPal private static final String appID = "APP-.....xxxxxxx"; Handler hRefresh = new Handler(){ @Override public void handleMessage(Message msg) { switch(msg.what){ case INITIALIZE_SUCCESS: //We have initialized the application, close the dialog and launch the WebView setupButtons(); break; case INITIALIZE_FAILURE: setupButtons(); //Initialization failure, close the dialog, update the page and show a toast //mProgDialog.cancel(); //currentPage.update(); break; } } }; </code></pre> <p>In the onCreate:</p> <pre><code>// Initialize the library. We'll do it in a separate thread because it requires communication with the server // which may take some time depending on the connection strength/speed. Thread libraryInitializationThread = new Thread() { public void run() { initLibrary(); // The library is initialized so let's launch it by notifying our handler if (PayPal.getInstance().isLibraryInitialized()) { Log.e("PP Init", "INITIALIZE_SUCCESS"); hRefresh.sendEmptyMessage(INITIALIZE_SUCCESS); } else { Log.e("PP Init", "INITIALIZE_FAILURE"); hRefresh.sendEmptyMessage(INITIALIZE_FAILURE); } } }; libraryInitializationThread.start(); </code></pre> <p>.</p> <pre><code>/** * Create our CheckoutButton and update the UI. */ public void setupButtons() { PayPal pp = PayPal.getInstance(); // Get the CheckoutButton. There are five different sizes. The text on the button can either be of type TEXT_PAY or TEXT_DONATE. launchSimplePayment = pp.getCheckoutButton(DailyOfferOrderActivity.this, PayPal.BUTTON_194x37, CheckoutButton.TEXT_PAY); // You'll need to have an OnClickListener for the CheckoutButton. For this application, MPL_Example implements OnClickListener and we // have the onClick() method below. launchSimplePayment.setOnClickListener(DailyOfferOrderActivity.this); // The CheckoutButton is an android LinearLayout so we can add it to our display like any other View. layoutSimplePayment.addView(launchSimplePayment); info.setText(""); info.setVisibility(View.GONE); } public void onClick(View v) { /** * For each call to checkout() and preapprove(), we pass in a ResultDelegate. If you want your application * to be notified as soon as a payment is completed, then you need to create a delegate for your application. * The delegate will need to implement PayPalResultDelegate and Serializable. See our ResultDelegate for * more details. */ if(v == launchSimplePayment) { if(checkParameters()){ new startPPTask().execute(); } layoutSimplePayment.removeAllViews(); setupButtons(); } } </code></pre> <p>this is the paypal webview class:</p> <pre><code>public class PayPalWebViewActivity extends Activity { private WebView mWebView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.paypalwebview); Intent intent = getIntent(); String token = intent.getStringExtra("token"); String deviceToken = intent.getStringExtra("devicetoken"); //String url = "https://www.sandbox.paypal.com/cgi-bin/webscr?"; String url = "https://www.paypal.com/cgi-bin/webscr?"; mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.setWebViewClient(new HelloWebViewClient()); String temp = url + "cmd=_express-checkout-mobile&amp;useraction=commit&amp;token=" + token + "&amp;drt=" + deviceToken; //Log.e("test", temp); mWebView.loadUrl(temp); //+ "&amp;drt=NULL" } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) &amp;&amp; mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } private class HelloWebViewClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { //Log.e("done", "start: " + url); } // intercept page finished event @Override public void onPageFinished(WebView view, String url) { //Log.e("done", "done: " + url); view.loadUrl("javascript:javascript:(function() { " + "window.navigator.standalone=1;" + "})()"); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { HttpClient httpclient = new DefaultHttpClient(); // Prepare a request object HttpGet httpget = new HttpGet(url); // Execute the request HttpResponse response; try { response = httpclient.execute(httpget); // Examine the response status //Log.e("Get Request", response.toString()); // Get hold of the response entity HttpEntity entity = response.getEntity(); // If the response does not enclose an entity, there is no need // to worry about connection release if (entity != null) { // A Simple JSON Response Read InputStream instream = entity.getContent(); String result= convertStreamToString(instream); //Log.e("test", result); instream.close(); } } catch (IOException e) { e.printStackTrace(); } view.loadUrl(url); return true; } private String convertStreamToString(InputStream is) { /* * To convert the InputStream to String we use the BufferedReader.readLine() * method. We iterate until the BufferedReader return null which means * there's no more data to read. Each line will appended to a StringBuilder * and returned as String. */ BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } } </code></pre> <p>}</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload