Subversion Repositories SmartDukaan

Rev

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