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();
}
}
}
è il CheckoutButton – Luciano
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
Non so nulla del servizio web, non ho lavorato sul quella. Vedere il codice sopra per onClick. – Luciano