Last active
October 30, 2018 13:52
-
-
Save alissonfpmorais/1296b0a3562567f5887eba1ed0f56abc to your computer and use it in GitHub Desktop.
Cielo payment
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// CieloServiceBindListener.java | |
public class CieloServiceBindListener implements ServiceBindListener { | |
private final NavController navController; | |
private final PaymentViewModel viewModel; | |
private final Method method; | |
public CieloServiceBindListener(@NonNull final NavController navController, @NonNull final PaymentViewModel viewModel, @NonNull final Method method) { | |
this.navController = navController; | |
this.viewModel = viewModel; | |
this.method = method; | |
} | |
@Override | |
public void onServiceBound() { | |
viewModel.createOrder(navController, method); | |
} | |
@Override | |
public void onServiceBoundError(Throwable throwable) { | |
Log.d("froy", "onServiceBoundError"); | |
viewModel.bindError(navController, throwable); | |
} | |
@Override | |
public void onServiceUnbound() { | |
Log.d("froy", "onServiceUnbound"); | |
} | |
} | |
// PaymentViewModel.java | |
public class PaymentViewModel extends AndroidViewModel { | |
... | |
void payWith(@NonNull final Activity activity, @NonNull final NavController navController, @NonNull final Method method) { | |
if (method == Method.DEBIT || method == Method.CREDIT) { | |
final Credentials credentials = new Credentials(BuildConfig.CLIENT_ID, BuildConfig.ACCESS_TOKEN); | |
final PaymentState paymentState = liveState.getValue(); | |
liveState.setValue(paymentState.copy(Result.PROCESSING)); | |
orderManager = new OrderManager(credentials, getApplication().getApplicationContext()); | |
orderManager.bind(activity, new CieloServiceBindListener(navController, this, method)); | |
} | |
} | |
public void createOrder(@NonNull final NavController navController, @NonNull final Method method) { | |
final PaymentState paymentState = liveState.getValue(); | |
final ImmutableList<Item> items = paymentState.getItems(); | |
final String orderId = items.toString(); | |
final Order emptyOrder = orderManager.createDraftOrder(orderId); | |
if (emptyOrder != null) { | |
final Order order = items | |
.reduce(emptyOrder, new ImmutableList.OnReduceTransformer<Item, Order>() { | |
@Override | |
public Order transform(@NonNull Order accumulator, @NonNull Item item) { | |
final Product product = item.getProduct(); | |
final String sku = String.valueOf(product.getCode()); | |
final String name = product.getName(); | |
final long price = Double.valueOf(product.getValue().doubleValue() * 100).longValue(); | |
final int quantity = item.getQuantity(); | |
final String unityOfMeasure = "UNIDADE"; | |
accumulator.addItem(sku, name, price, quantity, unityOfMeasure); | |
return accumulator; | |
} | |
}); | |
final PaymentListener paymentListener = getPaymentListener(navController); | |
orderManager.placeOrder(order); | |
if (method == Method.DEBIT) orderManager.checkoutOrder(orderId, order.getPrice(), PaymentCode.DEBITO_AVISTA, paymentListener); | |
else if (method == Method.CREDIT) orderManager.checkoutOrder(orderId, order.getPrice(), PaymentCode.CREDITO_AVISTA, paymentListener); | |
else unbindCielo(); | |
} | |
} | |
private PaymentListener getPaymentListener(@NonNull final NavController navController) { | |
return new PaymentListener() { | |
@Override | |
public void onStart() { | |
Log.d("froy", "onStart payment"); | |
} | |
@Override | |
public void onPayment(Order order) { | |
Log.d("froy", "onPayment payment"); | |
unbindCielo(); | |
} | |
@Override | |
public void onCancel() { | |
Log.d("froy", "onCancel payment"); | |
unbindCielo(); | |
} | |
@Override | |
public void onError(PaymentError paymentError) { | |
Log.d("froy", "onError payment"); | |
unbindCielo(); | |
} | |
}; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment