android - solicitar - que es paypal y como funciona
Pago de PayPal: cómo obtener una solicitud de éxito al cargar PayPal en webview (5)
Como se ha mencionado más arriba,
Necesitas comprobar la respuesta del objeto json. Si se aprueba el estado, significa que el pago de PayPal se realizó correctamente. Luego, puede consultar las transacciones actuales en el sitio web de PayPal
Editar:
Después del inicio de sesión de PayPal, pude completar la transacción con éxito. Pero debo coincidir con successUrl en PayPal para verificar que ambas URL sean iguales y luego mostrar un mensaje de brindis exitoso.
Pero no estoy obteniendo una url de pago exitosa. Por lo tanto, no puedo encontrarla. A continuación, he publicado el código correspondiente:
WebActivity.java:
public class PaypalWebActivity extends Activity {
private WebView webView;
String payUrlStr;
ProgressDialog dialog;
String successUrl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.paypal_web_layout);
successUrl = LOAD_WEBVIEW_PAYMENT_PAYPAL_SUCCESS;
dialog = ProgressDialog.show(PaypalWebActivity.this, "", "Please wait..", false);
loadWebViewPaypal();
}
private void loadWebViewPaypal() {
payUrlStr = LOAD_WEBVIEW_PAYMENT_PAYPAL(PAGE_ID);
Log.e("payUrlStr", ""+payUrlStr);
webView = (WebView) findViewById(R.id.webView);
webView.loadUrl(payUrlStr);
webView.getSettings().setJavaScriptEnabled(true);
@SuppressWarnings("unused")
WebSettings settings= webView.getSettings();
if (Build.VERSION.SDK_INT >= 21) {
webView.getSettings().setMixedContentMode( WebSettings.MIXED_CONTENT_ALWAYS_ALLOW );
}
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.e("Loading url...", url);
view.loadUrl(url);
String loadWebUrl = view.getUrl();
Log.e("loadWebUrl", ""+loadWebUrl);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
Log.e("Finished url...", url);
String webUrl = view.getUrl();
Log.e("webUrl", ""+webUrl);
if(webUrl.substring(0,95).equals(successUrl)){
Log.e("Getting Success Request", "Test");
}else{
Log.e("Failed to get Request", "Test");
}
if(dialog.isShowing()){
dialog.dismiss();
}
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
Log.e("Error in url...", description);
Log.e("Error in failingUrl...", failingUrl);
}
});
}
}
Manifiesto:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
revise esta discussion Paso a paso coloco capturas de pantalla y contenido agregado para una comprensión clara.
Recibo este mensaje de error . Por lo tanto, no puedo coincidir con la solicitud de éxito:
06-15 18: 12: 59.894: I / chromium (3273): [INFO: CONSOLE (0)] "Contenido mixto: La página en '' https://www.sandbox.paypal.com/us/cgi-bin/ webscr? SESIÓN = LTy9Q59% 5fia3wiAdHTQjgQxvUF1BTzLjgXgelCew4AS% 2dGAutAfB5WjZXVuX8 y despacho = 5885d80a13c0db1f8e263663d3faee8dcce3e160f5b9538489e17951d2c62172 ''se cargó sobre una conexión segura, pero contiene una forma que se dirige a un punto final inseguro'' http://www.myapi-entertainment.com/page_managements/page_featured_subscription_payment_success/4 . este contenido debe también puede ser de la siguiente manera: por favor
Esta es mi respuesta de éxito " http://www.myapi-entertainment.com/page_managements/page_featured_subscription_payment_success/4 " -> Se cambió el nombre del servidor.
¿Es posible hacer coincidir la solicitud de éxito con paypal? Si recibo alguna sugerencia, será útil para mí.
Lo que entiendo con su consulta es que tiene una URL de su sitio web que realiza el pago con Paypal, y en la aplicación para dispositivos móviles lo hace con la vista web (no con el SDK de Paypal).
Sí , puede obtener la callback
de callback
haciendo una codificación en su extremo WEB.
Sentido:
Cada vez que un usuario navegue a la página de Pago, su Servidor debe saber si el Usuario visitó desde el sitio web o mediante Mobile Webview, el Servidor puede enviar additional parameter key
a cualquier pasarela de Pago para su lógica personalizada. Más tarde, una vez que se complete la transacción de pago, la pasarela de pago devolverá la misma additional parameter key
junto con el resultado (éxito o fracaso).
Nota: Cada pasarela de pago tiene una configuración de Redirection url for Success/Failure
de Redirection url for Success/Failure
Una vez que Paypal redirige a la url del resultado (éxito / fracaso) después de que se complete la transacción, el servidor vuelve a verificar si la solicitud se realizó desde el sitio web o desde Mobile Webview con la ayuda de additional parameter key
; verifique el caso a continuación ...
Si desde Mobile Webview
- Éxito: Redirigido a la URL
www.myserver.com/success
-
www.myserver.com/failure
: Redirigido a URLwww.myserver.com/failure
Si de Webiew entonces Normal flow
Ahora en la webview de tu móvil
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
if(url.equalsIgnoreCase("www.myserver.com/success"))
//Success Toast
else if(url.equalsIgnoreCase("www.myserver.com/failure"))
//Failure Toast
return true;
}
});
Eso es.
Paypal devuelve la respuesta json después de un pago exitoso como abajo
{
"client": {
"environment": "sandbox",
"paypal_sdk_version": "2.14.1",
"platform": "Android",
"product_name": "PayPal-Android-SDK"
},
"response": {
"create_time": "2016-06-15T11:38:04Z",
"id": "PAY-6CN54299U76194116K5QT4BY",
"intent": "sale",
"state": "approved"
},
"response_type": "payment"
}
Necesitas comprobar la respuesta del objeto json. Si se aprueba el estado, significa que el pago de PayPal es exitoso. A continuación, puede consultar el sitio web de PayPal para las transacciones actuales.
Asegúrese de haber seguido los siguientes pasos: 1) private static final int REQUEST_CODE_PAYMENT = 1; private static String CONFIG_ENVIRONMENT=PayPalConfiguration.ENVIRONMENT_SANDBOX;
private static final int REQUEST_CODE_PAYMENT = 1; private static String CONFIG_ENVIRONMENT=PayPalConfiguration.ENVIRONMENT_SANDBOX;
// Será PayPalConfiguration.ENVIRONMENT_PRODUCTION para el modo en vivo. 2)
// note that these credentials will differ between live & sandbox environments.
private static final String CONFIG_CLIENT_ID = "ATBvU5urlaPOhpCrAhFsoG4u63RvNoKUocFPs9yR5q_sbM0yecZawUjoJhIilW8DNg5RrJcRHgRuEP_1";
private static PayPalConfiguration config = new PayPalConfiguration()
.environment(CONFIG_ENVIRONMENT)
.clientId(CONFIG_CLIENT_ID)
// The following are only used in PayPalFuturePaymentActivity.
.merchantName("Example Merchant")
.merchantPrivacyPolicyUri(Uri.parse("https://www.example.com/privacy"))
.merchantUserAgreementUri(Uri.parse("https://www.example.com/legal"));
Intent intent = new Intent(getActivity(), PayPalService.class);
intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
getActivity().startService(intent);
Recibo una solicitud de éxito o falla de pago utilizando estos códigos a continuación:
private void loadWebViewPaypal() {
payUrlStr = LOAD_WEBVIEW_PAYMENT_PAYPAL(PAGE_ID);
Log.e("payUrlStr", "" + payUrlStr);
webView = (WebView) findViewById(R.id.webView);
webView.setWebViewClient(new WebClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(payUrlStr);
@SuppressWarnings("unused")
WebSettings settings= webView.getSettings();
if (Build.VERSION.SDK_INT >= 21) {
webView.getSettings().setMixedContentMode( WebSettings.MIXED_CONTENT_ALWAYS_ALLOW );
}
}
public class WebClient extends WebViewClient
{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.e("Page Started", ""+url);
super.onPageStarted(view, url, favicon);
if(url.contains(successUrl)) {
Log.e("Getting Success Request", "Test");
Intent i = new Intent(PaypalWebActivity.this, TabhostActivity.class);
PAYPAL_WEB_BACK = "fulfilled";
startActivity(i);
finish();
} else if(url.equalsIgnoreCase(failureUrl)) {
Intent i = new Intent(PaypalWebActivity.this, TabhostActivity.class);
PAYPAL_WEB_BACK = "fulfilled";
startActivity(i);
finish();
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.e("Override Url", ""+url);
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
Log.e("Finished Url :", "" + url);
if(dialog.isShowing()){
dialog.dismiss();
}
}
}
Editar
Parece que a partir de las capturas de pantalla está incrustando una página de suscripción en su vista web y tratando de hacer coincidir successUrl
con la URL de retorno.
Verifique la respuesta en esta publicación para configurar primero la URL de retorno en su perfil
Obtenga la
String webUrl = webView.getUrl();
URLString webUrl = webView.getUrl();
Si desea hacer coincidencia / verificación con elsuccessUrl
definidoUrl