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();
}
}
}
CheckoutButton – Luciano
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
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