2011-12-19 34 views
7

Tôi đang cố thiết lập giao dịch thanh toán MECL trong inapp.Các vấn đề về giao dịch của MECL trên PayPal

Nhưng nó vẫn không ngừng thất bại trong việc một thiết bị token (couldNotFetchDeviceReferenceToken)

và bên cạnh đó khi thư viện được khởi tạo, tôi nhận được nút nhưng onClickListeneren được chỉ nhấp chuột đầu tiên khi tôi bấm nhiều lần vào nút (trong khi không làm bất cứ điều gì trong onClick) ..

Bắt lỗi 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ó ai biết những gì tôi đang làm sai?

đây là một số các nguồn:

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

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

    } 
} 

này là lớp 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

CheckoutButton – Luciano

+0

Không, xin lỗi, tôi không thể giúp bạn với điều đó. Tôi đã thực hiện paypal cho công ty khác vì vậy tôi không phải là chủ sở hữu của mã nguồn .. Kiểm tra các tài liệu MECL nó nên gif đủ thông tin phản hồi để thiết lập paypal mecl – Luciano

+0

Tôi không biết bất cứ điều gì về webservice, tôi đã không làm việc trên cái đó. Xem mã ở trên cho onClick .. – Luciano

Trả lời

7

thấy vấn đề không nhận được mã thông báo: quên quyền sau: READ_PHONE_STATE

cho nút tôi có thể 't tìm thấy vấn đề, giải pháp temparary tôi sử dụng chỉ là loại bỏ các nút và setupButtons() một lần nữa ..

+1

Nếu tôi có thể thêm bạn thêm một ... – David

Các vấn đề liên quan