Skip to content

Instantly share code, notes, and snippets.

@alissonfpmorais
Last active October 30, 2018 13:52
Show Gist options
  • Save alissonfpmorais/1296b0a3562567f5887eba1ed0f56abc to your computer and use it in GitHub Desktop.
Save alissonfpmorais/1296b0a3562567f5887eba1ed0f56abc to your computer and use it in GitHub Desktop.
Cielo payment
// 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