Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
428 ashish 1
package in.shop2020.serving.controllers;
2
 
3
import java.io.IOException;
712 rajveer 4
import java.util.HashMap;
428 ashish 5
import java.util.List;
712 rajveer 6
import java.util.Map;
428 ashish 7
 
712 rajveer 8
import org.apache.struts2.convention.annotation.Result;
9
import org.apache.struts2.convention.annotation.Results;
428 ashish 10
import org.apache.thrift.TException;
11
 
712 rajveer 12
import in.shop2020.model.v1.order.LineItem;
555 chandransh 13
import in.shop2020.model.v1.order.Order;
428 ashish 14
import in.shop2020.model.v1.order.TransactionServiceException;
712 rajveer 15
import in.shop2020.model.v1.order.TransactionStatus;
16
import in.shop2020.model.v1.user.ShoppingCartException;
428 ashish 17
import in.shop2020.payments.PaymentException;
693 rajveer 18
import in.shop2020.payments.PaymentStatus;
712 rajveer 19
import in.shop2020.serving.utils.Utils;
428 ashish 20
import in.shop2020.thrift.clients.PaymentServiceClient;
21
import in.shop2020.thrift.clients.TransactionServiceClient;
712 rajveer 22
import in.shop2020.thrift.clients.UserContextServiceClient;
428 ashish 23
import in.shop2020.utils.Logger;
24
 
712 rajveer 25
@Results({
26
    @Result(name="redirect", type="redirectAction", 
27
    		params = {"actionName" , "login"}),
28
    @Result(name="shipping-redirect", type="redirectAction", 
29
    		params = {"actionName" , "shipping"})
30
 
31
})
693 rajveer 32
 
517 rajveer 33
public class PayResponseController extends BaseController{
693 rajveer 34
	private static final long serialVersionUID = 1L;
35
 
712 rajveer 36
	private enum PaymentReturnStatus{
37
		CAPTURED("CAPTURED"),
38
		NOT_CAPTURED ("NOT CAPTURED"),
39
		CANCELLED ("CANCELLED"),
40
		DENIED_BY_RISK("DENIED BY RISK"),
41
		HOST_TIMEOUT("HOST TIMEOUT");
42
		private String value;
43
		PaymentReturnStatus(String value) {
44
			this.value = value;
45
		}
46
		public String value(){
47
			return this.value;
48
		}
49
	}
50
 
51
	public static String AMOUNT = "amt";
428 ashish 52
	public static String TRACKID = "trackid";
53
	public static String TRACKID_CANCELLED = "trackId";
54
	public static String RESULT = "result";
55
	public static String AUTH = "auth";
56
	public static String TRANID = "tranid";
712 rajveer 57
	public static String PAYMENTID = "paymentid";
428 ashish 58
	public static String REF = "ref";
59
	public static String POSTDATE = "postdate";
712 rajveer 60
	public static String ERROR = "Error";
61
	public static String ERRORTEXT = "ErrorText";
62
 
428 ashish 63
	PaymentServiceClient pclient = null;
64
	TransactionServiceClient tsc = null;
712 rajveer 65
	UserContextServiceClient usc = null;
428 ashish 66
 
67
	String amount;
68
	String trackId;
69
	String result;
70
	String postdate;
71
	String auth;
72
	String ref;
73
	String tranId;
74
	String paymentId;
693 rajveer 75
	String sessionId;
712 rajveer 76
	String errorText;
77
	String errorNo;
78
	long txnId;
79
	long merchantPaymentId;
80
	List<Order> orders = null;
693 rajveer 81
 
712 rajveer 82
	/*
83
	 * 	pw.println("RESULT="+result);
84
			pw.println("PDATE="+postdate);
85
			pw.println("TXNID="+tranid);
86
			pw.println("AUTH="+auth);
87
			pw.println("TRACKID="+trackid);
88
			pw.println("REF="+ref);
89
			pw.println("AMT="+amount);
90
 
91
			pw.flush();
92
		*/	
93
 
428 ashish 94
	String message = "Unable to process the payment. PLease try Again.";
95
 
517 rajveer 96
	public PayResponseController(){
428 ashish 97
		super();
98
		try {
99
			pclient = new PaymentServiceClient();
100
			tsc = new TransactionServiceClient();
712 rajveer 101
			usc = new UserContextServiceClient();
428 ashish 102
		} catch (Exception e) {
103
			Logger.log("Could not initialize the paymentservice client", this);
104
		}
105
	}
106
 
693 rajveer 107
	public String index() throws IOException, SecurityException{
712 rajveer 108
    	if(!userinfo.isLoggedIn()){
109
    		setRedirectUrl();
110
    		return "redirect";
111
    	}
112
 
113
    	result = this.request.getParameter(RESULT);
114
		postdate = this.request.getParameter(POSTDATE);
115
		tranId = this.request.getParameter(TRANID);
116
		auth = this.request.getParameter(AUTH);
117
		ref = this.request.getParameter(REF);
428 ashish 118
		amount = this.request.getParameter(AMOUNT);
119
		paymentId = this.request.getParameter(PAYMENTID);
712 rajveer 120
		if (result.equalsIgnoreCase(PaymentReturnStatus.CANCELLED.value())){
428 ashish 121
			trackId = this.request.getParameter(TRACKID_CANCELLED);
122
		}else{
123
			trackId = this.request.getParameter(TRACKID);
124
		}
712 rajveer 125
		merchantPaymentId = Long.parseLong(trackId);
693 rajveer 126
		sessionId = this.request.getSession().getId();
712 rajveer 127
		errorNo = request.getParameter(ERROR);
128
		errorText = request.getParameter(ERRORTEXT);
129
		/*
130
		String udf1=request.getParameter("udf1");
131
		String udf2=request.getParameter("udf2");
132
		String udf3=request.getParameter("udf3");
133
		String udf4=request.getParameter("udf4");
134
		String udf5=request.getParameter("udf5");
135
		*/
428 ashish 136
		//update the payment info object
137
		try {
712 rajveer 138
			if(result.trim().equals(PaymentReturnStatus.CAPTURED.value())){
693 rajveer 139
				String message = "Payment successful";
712 rajveer 140
				pclient.getClient().updatePaymentDetails(merchantPaymentId, paymentId, sessionId, result, message, tranId, auth, ref, errorNo, PaymentStatus.SUCCESS, null);
141
				txnId = pclient.getClient().getPayment(merchantPaymentId).getMerchantTxnId();
142
 
143
				tsc.getClient().changeTransactionStatus(txnId, TransactionStatus.IN_PROCESS, "Payment received for the order");
144
 
145
		    	orders = tsc.getClient().getOrdersForTransaction(txnId);
146
		    	Map<Long,Double> items = new HashMap<Long, Double>();
147
 
148
				for(Order order: orders){
149
					for(LineItem lineitem: order.getLineitems()){
150
						items.put(lineitem.getItem_id(),lineitem.getQuantity());
151
					}
152
				}
153
				usc.getClient().resetCart(userinfo.getCartId(), items);
154
				//TODO Optimize the function to send less number of data over network
155
				userinfo.setTotalItems(Utils.getNumberOfItemsInCart(userinfo.getCartId()));
156
 
693 rajveer 157
				return "index";
158
			}else{
159
				String message = "Unable to process the payment.";
160
				addActionError("Previous payment failed. Try again.");
712 rajveer 161
 
162
				txnId = pclient.getClient().getPayment(merchantPaymentId).getMerchantTxnId();
163
				tsc.getClient().changeTransactionStatus(txnId, TransactionStatus.FAILED, "Payment failed for the transaction.");
164
 
165
				pclient.getClient().updatePaymentDetails(merchantPaymentId, paymentId, sessionId, result, errorText, tranId, auth, ref, errorNo, PaymentStatus.FAILED, null);
166
				return "shipping-redirect";
693 rajveer 167
			}
428 ashish 168
 
712 rajveer 169
		}
170
		catch (NumberFormatException e) {
428 ashish 171
			Logger.log(e.toString(), this);
172
		} catch (PaymentException e) {
173
			Logger.log(e.toString(), this);
174
		} catch (TException e) {
175
			Logger.log(e.toString(), this);
712 rajveer 176
		} catch (TransactionServiceException e) {
177
			Logger.log(e.toString(), this);
178
		} catch (ShoppingCartException e) {
179
			// TODO Auto-generated catch block
180
			e.printStackTrace();
428 ashish 181
		}
693 rajveer 182
		return "index";
428 ashish 183
	}
184
 
712 rajveer 185
	public List<Order> getOrders(){
186
		return this.orders;
485 rajveer 187
	}
188
 
189
	public String getMessage(){
190
		return this.message;
191
	}
192
 
193
}