public static void startPayment ( final BraintreeFragment fragment , final LocalPaymentRequest request , final BraintreeResponseListener < LocalPaymentRequest > listener ) { if ( request == null ) { fragment . postCallback ( new BraintreeException ( "A LocalPaymentRequest is required." ) ) ; return ; } else if ( request . getApprovalUrl ( ) != null || request . getPaymentId ( ) != null ) { fragment . postCallback ( new BraintreeException ( "LocalPaymentRequest is invalid, " + "appovalUrl and paymentId should not be set." ) ) ; return ; } else if ( request . getPaymentType ( ) == null || request . getAmount ( ) == null ) { fragment . postCallback ( new BraintreeException ( "LocalPaymentRequest is invalid, " + "paymentType and amount are required." ) ) ; return ; } else if ( listener == null ) { fragment . postCallback ( new BraintreeException ( "BraintreeResponseListener<LocalPaymentRequest> " + "is required." ) ) ; return ; } fragment . waitForConfiguration ( new ConfigurationListener ( ) { @ Override public void onConfigurationFetched ( Configuration configuration ) { if ( ! configuration . getPayPal ( ) . isEnabled ( ) ) { fragment . postCallback ( new ConfigurationException ( "Local payments are not enabled for this merchant." ) ) ; return ; } sMerchantAccountId = request . getMerchantAccountId ( ) ; sPaymentType = request . getPaymentType ( ) ; String returnUrl = fragment . getReturnUrlScheme ( ) + "://" + LOCAL_PAYMENT_SUCCESSS ; String cancel = fragment . getReturnUrlScheme ( ) + "://" + LOCAL_PAYMENT_CANCEL ; fragment . sendAnalyticsEvent ( paymentTypeForAnalytics ( ) + ".local-payment.start-payment.selected" ) ; fragment . getHttpClient ( ) . post ( "/v1/paypal_hermes/create_payment_resource" , request . build ( returnUrl , cancel ) , new HttpResponseCallback ( ) { @ Override public void success ( String responseBody ) { try { JSONObject responseJson = new JSONObject ( responseBody ) ; request . approvalUrl ( responseJson . getJSONObject ( "paymentResource" ) . getString ( "redirectUrl" ) ) ; request . paymentId ( responseJson . getJSONObject ( "paymentResource" ) . getString ( "paymentToken" ) ) ; fragment . sendAnalyticsEvent ( paymentTypeForAnalytics ( ) + ".local-payment.create.succeeded" ) ; listener . onResponse ( request ) ; } catch ( JSONException jsonException ) { failure ( jsonException ) ; } } @ Override public void failure ( Exception exception ) { fragment . sendAnalyticsEvent ( paymentTypeForAnalytics ( ) + ".local-payment.webswitch.initiate.failed" ) ; fragment . postCallback ( exception ) ; } } ) ; } } ) ; }
Prepares the payment flow for a specific type of local payment .