2011-12-19 12 views
7

Próbuję skonfigurować płatną transakcję MECL.Problemy z transakcjami PayPal MECL

Ale utrzymuje braku w coraz token urządzenia (couldNotFetchDeviceReferenceToken)

a obok tego, gdy biblioteka jest inicjowany, pojawia się przycisk ale onClickListeneren dostaje tylko pierwsze kliknięcie po kliknięciu kilka razy przycisk (nie robiąc nic w onClick) ..

Pierwsze followin błędy:

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 

Czy jest ktoś, kto wie, co robię źle?

Oto źródła:

// 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; 
     } 
    } 
}; 

W onCreate:

// 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(); 

.

/** 
* 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(); 

    } 
} 

to paypal klasa WebView:

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&useraction=commit&token=" + token + "&drt=" + deviceToken; 
    //Log.e("test", temp); 
    mWebView.loadUrl(temp); 
    //+ "&drt=NULL" 
} 


    @Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && 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(); 
    } 
} 

}

+0

to jest CheckoutButton – Luciano

+0

Przykro mi, nie mogę ci w tym pomóc. Zaimplementowałem paypal dla innej firmy, więc nie jestem właścicielem kodu źródłowego. Sprawdź dokumentację MECL, czy powinien on mieć wystarczająco dużo informacji zwrotnych, aby skonfigurować paypal mecl – Luciano

+0

Nie wiem nic o usłudze internetowej, nie pracowałem nad że. Zobacz powyższy kod dla parametru onClick .. – Luciano

Odpowiedz

7

znaleźć problem dla nieotrzymania tokena: zapomniał następujące uprawnienia: READ_PHONE_STATE

dla przycisku mogę 't znaleźć problem, Tymczasowe rozwiązanie używam jest po prostu usunąć przycisk i setupButtons() ponownie ..

+1

Gdybym mógł dodać cię jeszcze jeden + ... – David

Powiązane problemy