Subversion Repositories SmartDukaan

Rev

Rev 4566 | Rev 6091 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1905 chandransh 1
package in.shop2020.serving.controllers;
2
 
4566 rajveer 3
import java.math.BigInteger;
4
import java.security.MessageDigest;
5
import java.security.NoSuchAlgorithmException;
2577 chandransh 6
import java.util.List;
7
 
1905 chandransh 8
import org.apache.log4j.Logger;
2118 chandransh 9
import org.apache.struts2.convention.annotation.InterceptorRef;
10
import org.apache.struts2.convention.annotation.InterceptorRefs;
11
import org.apache.struts2.convention.annotation.Result;
12
import org.apache.struts2.convention.annotation.Results;
6050 anupam.sin 13
import org.apache.thrift.transport.TTransportException;
1905 chandransh 14
 
2118 chandransh 15
import com.opensymphony.xwork2.ValidationAwareSupport;
16
 
1905 chandransh 17
import in.shop2020.config.ConfigException;
2118 chandransh 18
import in.shop2020.model.v1.order.LineItem;
1905 chandransh 19
import in.shop2020.model.v1.order.Order;
6050 anupam.sin 20
import in.shop2020.model.v1.order.RechargeOrder;
1905 chandransh 21
import in.shop2020.model.v1.order.Transaction;
2159 chandransh 22
import in.shop2020.payments.Attribute;
1905 chandransh 23
import in.shop2020.payments.Payment;
2159 chandransh 24
import in.shop2020.serving.services.IPaymentService;
6050 anupam.sin 25
import in.shop2020.test.Address;
3126 rajveer 26
import in.shop2020.thrift.clients.PaymentClient;
27
import in.shop2020.thrift.clients.TransactionClient;
6050 anupam.sin 28
import in.shop2020.thrift.clients.UserClient;
1905 chandransh 29
import in.shop2020.thrift.clients.config.ConfigClient;
30
 
2118 chandransh 31
@SuppressWarnings("serial")
32
@InterceptorRefs({
33
    @InterceptorRef("myDefault"),
34
    @InterceptorRef("login")
35
})
36
@Results({
37
	@Result(name="shipping-redirect", type="redirectAction", 
38
    		params = {"actionName" , "shipping"})
39
})
40
public class EbsPayController extends ValidationAwareSupport{
1905 chandransh 41
 
42
	private static Logger log = Logger.getLogger(Class.class);
43
 
44
	private static String accountId;
45
 
46
	private static String returnUrl;
47
 
48
	private static String mode;
49
 
4566 rajveer 50
	private static String ebsSecretKey;
51
 
1905 chandransh 52
	static{
53
		try {
54
			accountId = ConfigClient.getClient().get("ebs_account_id");
55
			returnUrl = ConfigClient.getClient().get("ebs_return_url");
56
			mode = ConfigClient.getClient().get("ebs_pay_mode");
4566 rajveer 57
			ebsSecretKey = ConfigClient.getClient().get("ebs_secret_key");
1905 chandransh 58
		} catch (ConfigException e) {
2046 chandransh 59
			mode = "LIVE";
1905 chandransh 60
			log.error("Unable to get EBS payment configuration.");
61
		}
62
	}
63
 
64
	private String id;
65
 
2577 chandransh 66
	private String paymentOption = null;
2159 chandransh 67
 
2118 chandransh 68
	private StringBuilder description;
69
 
1905 chandransh 70
	private double amount;
71
 
72
	private ContactDetails billingDetails;
73
 
74
	public String show(){
3126 rajveer 75
		PaymentClient paymentServiceClient = null;
1905 chandransh 76
		Payment payment = null;
77
		try {
78
			long paymentId = Long.parseLong(this.id);
3126 rajveer 79
			paymentServiceClient = new PaymentClient();
1905 chandransh 80
			payment = paymentServiceClient.getClient().getPayment(paymentId);
81
		} catch (Exception e) {
2118 chandransh 82
			log.error("Error while getting payment client", e);
83
			addActionError("We are experiencing some problems. Please try later.");
84
			return "shipping-redirect";
1905 chandransh 85
		}
86
 
87
		Order order = null;
88
		try {
89
			long txnId = payment.getMerchantTxnId();
3126 rajveer 90
			TransactionClient transactionServiceClient = new TransactionClient();
1905 chandransh 91
			in.shop2020.model.v1.order.TransactionService.Client txnClient = transactionServiceClient.getClient();
92
			Transaction transaction = txnClient.getTransaction(txnId);
93
			order = transaction.getOrders().get(0);
94
		} catch (Exception e) {
2118 chandransh 95
			log.error("Error while getting transaction information", e);
96
			addActionError("We are experiencing some problems. Please try later.");
97
			return "shipping-redirect";
1905 chandransh 98
		}
99
 
2118 chandransh 100
		setDescription(order);
2159 chandransh 101
		setPaymentOption(payment);
2118 chandransh 102
 
1905 chandransh 103
		this.amount = payment.getAmount();
104
		this.billingDetails = new ContactDetails(order.getCustomer_name(),
105
				order.getCustomer_email(), order.getCustomer_address1(),
106
				order.getCustomer_city(), order.getCustomer_state(),
107
				order.getCustomer_pincode(), "IND",
108
				order.getCustomer_mobilenumber());
109
 
110
		log.info(billingDetails);
111
 
112
		return "show";
113
	}
6050 anupam.sin 114
 
115
 
116
	/**
117
	 * This method is used for Recharge payments. It is being called by RechargePaymentController.
118
	 * @return
119
	 */
120
	public String edit(){
121
        PaymentClient paymentServiceClient = null;
122
        Payment payment = null;
123
        try {
124
            long paymentId = Long.parseLong(this.id);
125
            paymentServiceClient = new PaymentClient();
126
            payment = paymentServiceClient.getClient().getPayment(paymentId);
127
        } catch (Exception e) {
128
            log.error("Error while getting payment client", e);
129
            addActionError("We are experiencing some problems. Please try later.");
130
            return "shipping-redirect";
131
        }
132
 
133
        RechargeOrder rechargeOrder = null;
134
        try {
135
            long txnId = payment.getMerchantTxnId();
136
            TransactionClient transactionServiceClient = new TransactionClient();
137
            in.shop2020.model.v1.order.TransactionService.Client txnClient = transactionServiceClient.getClient();
138
            rechargeOrder = txnClient.getRechargeOrdersForTransaction(txnId);
139
        } catch (Exception e) {
140
            log.error("Error while getting transaction information", e);
141
            addActionError("We are experiencing some problems. Please try later.");
142
            return "shipping-redirect";
143
        }
144
 
145
        String desc = "Recharge for Rs. " + rechargeOrder.getTotalAmount() + ", operator : " + rechargeOrder.getOperatorId();
146
        this.description = new StringBuilder(desc);
147
        setPaymentOption(payment);
148
 
149
        this.amount = payment.getAmount();
150
        UserClient userClient;
151
        in.shop2020.model.v1.user.Address address = null;
152
        try {
153
            userClient = new UserClient();
154
            long addressId = userClient.getClient().getDefaultAddressId(rechargeOrder.getUserId());
155
            address = userClient.getClient().getAddressById(addressId);
156
        } catch (Exception e) {
157
            log.error("Unable to get address to put in billing details");
158
            e.printStackTrace();
159
        }
160
        this.billingDetails = new ContactDetails(address.getName(),
161
                rechargeOrder.getUserEmailId(), address.getLine1(),
162
                address.getCity(), address.getState(),
163
                address.getPin(), "IND",
164
                address.getPhone());
165
 
166
        log.info(billingDetails);
167
 
168
        return "show";
169
    }
1905 chandransh 170
 
2118 chandransh 171
	public String getDescription(){
172
		if(this.description.length() >= 255)
173
			return this.description.substring(0, 255);
174
		else
175
			return this.description.toString();
176
	}
177
 
178
	private void setDescription(Order order){
2534 chandransh 179
		StringBuilder descriptionBuilder = new StringBuilder(255);
2118 chandransh 180
		for(LineItem line: order.getLineitems()){
181
			if(line.getBrand() != null){
2534 chandransh 182
				descriptionBuilder.append(line.getBrand() + " ");
2118 chandransh 183
			}
184
			if(line.getModel_name() != null){
2534 chandransh 185
				descriptionBuilder.append(line.getModel_name() + " "); 
2118 chandransh 186
			}
187
			if(line.getModel_number() != null){
2534 chandransh 188
				descriptionBuilder.append(line.getModel_number() + " ");
2118 chandransh 189
			}
190
			if(line.getColor() != null){
2534 chandransh 191
				descriptionBuilder.append(line.getColor() + " ");
2118 chandransh 192
			}
193
		}
2534 chandransh 194
		String desc = descriptionBuilder.toString();
195
		desc = desc.replaceAll("[^a-zA-Z0-9\\s\\-\\@\\/\\.]", "");
196
		this.description = new StringBuilder(desc);
2118 chandransh 197
	}
198
 
1905 chandransh 199
	public void setId(String id) {
200
		this.id = id;
201
	}
202
 
203
	public String getId() {
204
		return id;
205
	}
206
 
207
	public String getAccountId() {
208
		return accountId;
209
	}
210
 
211
	public static String getReturnUrl() {
212
		return returnUrl;
213
	}
214
 
215
	public static String getMode() {
216
		return mode;
217
	}
218
 
219
	public double getAmount() {
220
		return amount;
221
	}
2159 chandransh 222
 
223
	public void setPaymentOption(Payment payment) {
2199 chandransh 224
		this.paymentOption = null;
2577 chandransh 225
		List<Attribute> attributes = payment.getAttributes();
226
		if(attributes == null)
227
			return;
228
		for(Attribute attr : attributes){
2159 chandransh 229
			if(attr.getName().equals(IPaymentService.PAYMENT_METHOD))
230
				this.paymentOption = attr.getValue();
231
		}
232
	}
1905 chandransh 233
 
2159 chandransh 234
	public String getPaymentOption(){
235
		return paymentOption;
236
	}
4566 rajveer 237
 
238
	public String getSecureHash() throws NoSuchAlgorithmException{
239
		String pass = ebsSecretKey + "|" + accountId + "|" + amount + "|" + id + "|" + returnUrl + "|" + mode;
240
		MessageDigest m = MessageDigest.getInstance("MD5");
241
		byte[] data = pass.getBytes();
242
		m.update(data,0,data.length);
243
		BigInteger i = new BigInteger(1,m.digest());
244
		String secureHash = String.format("%1$032X", i);
245
		return secureHash;
246
	}
2159 chandransh 247
 
1905 chandransh 248
	public ContactDetails getBillingDetails() {
249
		return billingDetails;
250
	}
251
 
252
	public static class ContactDetails{
253
		private String name;
254
		private String email;
255
		private String address;
256
		private String city;
257
		private String state;
258
		private String postalCode;
259
		private String country;
260
		private String phone;
261
 
262
		public ContactDetails(String name, String email, String address,
263
				String city, String state, String postalCode, String country,
264
				String phone) {
265
			this.name = name;
266
			this.email = email;
267
			this.address = address;
268
			this.city = city;
269
			this.state = state;
270
			this.postalCode = postalCode;
271
			this.country = country;
272
			this.phone = phone;
273
		}
274
 
275
		@Override
276
		public String toString() {
277
			return "ContactDetails [name=" + name + ", email=" + email
278
					+ ", address=" + address + ", city=" + city + ", state="
279
					+ state + ", postalCode=" + postalCode + ", country="
280
					+ country + ", phone=" + phone + "]";
281
		}
282
 
283
		public String getName() {
284
			return name;
285
		}
286
 
287
		public String getEmail() {
288
			return email;
289
		}
290
 
291
		public String getAddress() {
292
			return address;
293
		}
294
 
295
		public String getCity() {
296
			return city;
297
		}
298
 
299
		public String getState() {
300
			return state;
301
		}
302
 
303
		public String getPostalCode() {
304
			return postalCode;
305
		}
306
 
307
		public String getCountry() {
308
			return country;
309
		}
310
 
311
		public String getPhone() {
312
			return phone;
313
		}
314
	}
315
}