2011-12-19 10 views
7

Sto provando a configurare la transazione MIPL in paypap inapp.Problemi di transazione MECL PayPal

ma mantiene in mancanza a ottenere un gettone dispositivo (couldNotFetchDeviceReferenceToken)

e accanto di che, quando la biblioteca è inizializzato, ottengo il pulsante, ma l'onClickListeneren ottiene solo il primo clic quando scatto più volte sul pulsante (pur non facendo nulla nella onClick) ..

Ottenere gli errori followin:

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 

c'è qualcuno che sa di cosa sto facendo male?

qui è un po 'della fonte:

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

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

    } 
} 

questa è la classe WebView paypal:

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

è il CheckoutButton – Luciano

+0

Spiacente, non posso aiutarti. Ho implementato paypal per altre società, quindi non sono il proprietario del codice sorgente. Controlla le documentazioni MECL che dovrebbe fornire un feedback sufficiente per configurare il meccanismo paypal – Luciano

+0

Non so nulla del servizio web, non ho lavorato sul quella. Vedere il codice sopra per onClick. – Luciano

risposta

7

trovato il problema per non ricevere token: dimenticato l'autorizzazione seguente: READ_PHONE_STATE

per il pulsante posso Troviamo il problema, la soluzione temporanea che uso è sufficiente rimuovere nuovamente il pulsante e setupButtons().

+1

Se potessi aggiungerti ancora uno + ... – David