package com.salesmanager.core.business.modules.integration.payment.impl;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.salesmanager.core.model.customer.Customer;
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.order.Order;
import com.salesmanager.core.model.payments.Payment;
import com.salesmanager.core.model.payments.Transaction;
import com.salesmanager.core.model.shoppingcart.ShoppingCartItem;
import com.salesmanager.core.model.system.IntegrationConfiguration;
import com.salesmanager.core.model.system.IntegrationModule;
//import com.paypal.core.rest.OAuthTokenCredential;
//import com.paypal.core.rest.PayPalRESTException;
import com.salesmanager.core.modules.integration.IntegrationException;
import com.salesmanager.core.modules.integration.payment.model.PaymentModule;
public class PayPalRestPayment implements PaymentModule {
@Override
public void validateModuleConfiguration(
IntegrationConfiguration integrationConfiguration,
MerchantStore store) throws IntegrationException {
List<String> errorFields = null;
//validate integrationKeys['account']
Map<String,String> keys = integrationConfiguration.getIntegrationKeys();
if(keys==null || StringUtils.isBlank(keys.get("client"))) {
errorFields = new ArrayList<String>();
errorFields.add("client");
}
if(keys==null || StringUtils.isBlank(keys.get("secret"))) {
if(errorFields==null) {
errorFields = new ArrayList<String>();
}
errorFields.add("secret");
}
if(errorFields!=null) {
IntegrationException ex = new IntegrationException(IntegrationException.ERROR_VALIDATION_SAVE);
ex.setErrorFields(errorFields);
throw ex;
}
}
@Override
public Transaction initTransaction(MerchantStore store, Customer customer,
BigDecimal amount, Payment payment,
IntegrationConfiguration configuration, IntegrationModule module)
throws IntegrationException {
// TODO Auto-generated method stub
return null;
}
@Override
public Transaction authorize(MerchantStore store, Customer customer,
List<ShoppingCartItem> items, BigDecimal amount, Payment payment,
IntegrationConfiguration configuration, IntegrationModule module)
throws IntegrationException {
return null;
/*
// ###AccessToken
// Retrieve the access token from
// OAuthTokenCredential by passing in
// ClientID and ClientSecret
APIContext apiContext = null;
String accessToken = null;
try {
String clientID = configuration.getIntegrationKeys().get("client");
String secret = configuration.getIntegrationKeys().get("secret");
accessToken = getAccessToken(clientID, secret);
// ### Api Context
// Pass in a `ApiContext` object to authenticate
// the call and to send a unique request id
// (that ensures idempotency). The SDK generates
// a request id if you do not pass one explicitly.
apiContext = new APIContext(accessToken);
// Use this variant if you want to pass in a request id
// that is meaningful in your application, ideally
// a order id.
* String requestId = Long.toString(System.nanoTime(); APIContext
* apiContext = new APIContext(accessToken, requestId ));
// ###Authorization
// Retrieve an Authorization Id
// by making a Payment with intent
// as 'authorize' and parsing through
// the Payment object
String authorizationID = null;
// ###Details
// Let's you specify details of a payment amount.
//Details details = new Details();
//details.setShipping("0.03");
//details.setSubtotal("107.41");
//details.setTax("0.03");
// ###Amount
// Let's you specify a payment amount.
String sAmount = productPriceUtils.getAdminFormatedAmount(store, amount);
Amount amnt = new Amount();
amnt.setCurrency(store.getCurrency().getCode());
amnt.setTotal(sAmount);
//amnt.setDetails(details);
// ###Transaction
// A transaction defines the contract of a
// payment - what is the payment for and who
// is fulfilling it. Transaction is created with
// a `Payee` and `Amount` types
com.paypal.api.payments.Transaction transaction = new com.paypal.api.payments.Transaction();
transaction.setAmount(amnt);
//TODO change description
transaction.setDescription("This is the payment transaction description.");
// The Payment creation API requires a list of
// Transaction; add the created `Transaction`
// to a List
List<com.paypal.api.payments.Transaction> transactions = new ArrayList<com.paypal.api.payments.Transaction>();
transactions.add(transaction);
// ###Payer
// A resource representing a Payer that funds a payment
// Payment Method
// as 'paypal'
Payer payer = new Payer();
payer.setPaymentMethod("paypal");
// ###Payment
// A Payment Resource; create one using
// the above types and intent as 'sale'
com.paypal.api.payments.Payment ppayment = new com.paypal.api.payments.Payment();
ppayment.setIntent("sale");
ppayment.setPayer(payer);
ppayment.setTransactions(transactions);
// ###Redirect URLs
RedirectUrls redirectUrls = new RedirectUrls();
String guid = UUID.randomUUID().toString().replaceAll("-", "");
redirectUrls.setCancelUrl(req.getScheme() + "://"
+ req.getServerName() + ":" + req.getServerPort()
+ req.getContextPath() + "/paymentwithpaypal?guid=" + guid);
redirectUrls.setReturnUrl(req.getScheme() + "://"
+ req.getServerName() + ":" + req.getServerPort()
+ req.getContextPath() + "/paymentwithpaypal?guid=" + guid);
payment.setRedirectUrls(redirectUrls);
// Create a payment by posting to the APIService
// using a valid AccessToken
// The return object contains the status;
try {
Payment createdPayment = payment.create(apiContext);
LOGGER.info("Created payment with id = "
+ createdPayment.getId() + " and status = "
+ createdPayment.getState());
// ###Payment Approval Url
Iterator<Links> links = createdPayment.getLinks().iterator();
while (links.hasNext()) {
Links link = links.next();
if (link.getRel().equalsIgnoreCase("approval_url")) {
req.setAttribute("redirectURL", link.getHref());
}
}
req.setAttribute("response", Payment.getLastResponse());
map.put(guid, createdPayment.getId());
} catch (PayPalRESTException e) {
req.setAttribute("error", e.getMessage());
}
} catch (PayPalRESTException e) {
throw new IntegrationException(e);
}
*/
}
/* @Override
public Transaction capture(MerchantStore store, Customer customer,
List<ShoppingCartItem> items, BigDecimal amount, Payment payment, Transaction transaction,
IntegrationConfiguration configuration, IntegrationModule module)
throws IntegrationException {
// TODO Auto-generated method stub
return null;
}*/
@Override
public Transaction authorizeAndCapture(MerchantStore store,
Customer customer, List<ShoppingCartItem> items, BigDecimal amount, Payment payment,
IntegrationConfiguration configuration, IntegrationModule module)
throws IntegrationException {
// TODO Auto-generated method stub
return null;
}
@Override
public Transaction refund(boolean partial, MerchantStore store,
Transaction transaction, Order order, BigDecimal amount,
IntegrationConfiguration configuration, IntegrationModule module)
throws IntegrationException {
// TODO Auto-generated method stub
return null;
}
private String getAccessToken(String clientID, String clientSecret) throws Exception {
// ###AccessToken
// Retrieve the access token from
// OAuthTokenCredential by passing in
// ClientID and ClientSecret
return null;
//return new OAuthTokenCredential(clientID, clientSecret)
// .getAccessToken();
}
@Override
public Transaction capture(MerchantStore store, Customer customer,
Order order, Transaction capturableTransaction,
IntegrationConfiguration configuration, IntegrationModule module)
throws IntegrationException {
// TODO Auto-generated method stub
return null;
}
}