Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
121 ashish 1
namespace java in.shop2020.payments
420 ashish 2
namespace py shop2020.thriftpy.payments
121 ashish 3
 
4
/**
5
Various structures
6
**/
7
enum PaymentGatewayStatus{
8
	AVAILABLE,
9
	BLOCKED
10
}
11
 
12
enum PaymentStatus{
13
	INIT,
14
	PENDING,
1854 chandransh 15
	SUCCESS,	// HDFC Status: CAPTURED; EBS Status: Captured
16
	FAILED,		// HDFC status: NOT CAPTURED, DENIED BY RISK, HOST TIMEOUT, CANCELLED
17
	AUTHORIZED  // EBS Status: Pending
121 ashish 18
}
19
 
2303 ankur.sing 20
const map<string,string> PAYMENT_METHOD = {
21
	'1001' : 'EBS-TEST Payment'
22
	'1004' : 'EBS-AXIS Bank Account'
23
	'1007' : 'EBS-HDFC Bank Account'
24
	'1008' : 'EBS-VISA'
25
	'1009' : 'EBS-Citi Bank Debit Card'
26
	'1010' : 'EBS-Diners Club'
27
	'1012' : 'EBS-ItzCash'
28
	'1015' : 'EBS-JK Bank Account'
29
	'1016' : 'EBS-ICICI Bank Account'
30
	'1017' : 'EBS-MasterCard'
31
	'1029' : 'EBS-Federal Bank Account'
32
	'1032' : 'EBS-State Bank of India Netbanking'
33
	'1033' : 'EBS-State Bank of Bikaner and Jaipur Netbanking'
34
	'1034' : 'EBS-State Bank of Hyderabad Netbanking'
35
	'1035' : 'EBS-State Bank of Patiala Netbanking'
36
	'1036' : 'EBS-State Bank of Shaurashtra Netbanking'
37
	'1037' : 'EBS-State Bank of Indore Netbanking'
38
	'1038' : 'EBS-State Bank of Mysore Netbanking'
39
	'1039' : 'EBS-State Bank of Travancore Netbanking'
40
	'1040' : 'EBS-Citi Bank Reward Point'
41
	'1127' : 'EBS-Citi Bank Account'
42
	'1132' : 'EBS-Done Card'
43
}
44
 
680 rajveer 45
struct Attribute{
46
	1:string name,
47
	2:string value
121 ashish 48
}
49
 
420 ashish 50
struct PaymentGateway{
121 ashish 51
	1:i64 id,
680 rajveer 52
	2:string name,
53
	3:string url,
54
	4:i64 addedOn,
55
	5:string aliasName,
56
	6:string responseUrl,
57
	7:string errorUrl,
58
	8:PaymentGatewayStatus status
59
	9:list<Attribute> attributes  // list of all attributes for PG
121 ashish 60
}
61
 
62
struct Payment{
680 rajveer 63
	1:i64 paymentId,  				// trackId for bank, paymentid for us and id for table.
64
	2:i64 gatewayId, 				//payment gateway used
65
	3:string gatewayPaymentId
704 chandransh 66
	4:i64 merchantTxnId,			//merchant transaction id. This will be propagated further to order processing
680 rajveer 67
	5:string gatewayTxnId,			//bank trnasaction id
68
	6:double amount,
69
	7:string gatewayTxnStatus,  	// bank status will be stored here
70
	8:PaymentStatus status,
71
	9:i64 userId,					//The user for which payment has to be processed.This is here to speed up querying.
72
	10:string errorCode,
73
	11:string description,
74
	12:string authCode,
75
	13:string referenceCode,		// given by gateway
76
	14:string sessionId, 			// received from PG 
77
	15:string gatewayTxnDate,
78
	16:list<Attribute> attributes,  	// list of all attributes received from PG
79
	17:i64 initTimestamp,			//statring the payment processing timestamp
80
	18:i64 successTimestamp,		//timestamp when payment is captured
81
	19:i64 errorTimestamp,			// in case, error is received from PG
121 ashish 82
}
83
 
84
 
85
exception PaymentException{
86
	1:i64 error_code,
87
	2:string message
88
}
89
 
90
service PaymentService{
680 rajveer 91
	/**
763 rajveer 92
	* For closing the open session in sqlalchemy
93
	*/
94
	void closeSession(),
95
 
96
	/**
680 rajveer 97
	*	create a new payment and return payment id, throws an exception if gateway is not active
98
	**/
99
	i64 createPayment(1:i64 userId, 2:double amount, 3:i64 gatewayId, 4:i64 txnId) throws (1:PaymentException pe),
121 ashish 100
 
680 rajveer 101
	/**
102
	* get payment for user. If status and gateway are null, it is ignored. Same for times as well.
103
	**/ 
104
	list<Payment> getPaymentsForUser(1:i64 userId, 2:i64 fromTime, 3:i64 toTime, 4:PaymentStatus status, 5:i64 gatewayId) throws (1:PaymentException pe),
121 ashish 105
 
680 rajveer 106
	/**
2059 ankur.sing 107
	* get all payments for user. If gatewayId is 0, then it is ignored while filtering.
680 rajveer 108
	**/ 
109
	list<Payment> getPayments(1:i64 fromTime, 2:i64 toTime, 3:PaymentStatus status, 4:i64 gatewayId) throws (1:PaymentException pe),
121 ashish 110
 
111
 
680 rajveer 112
	/** 
113
	* Get a particular gateway
114
	**/
115
	PaymentGateway getPaymentGateway(1:i64 id) throws (1:PaymentException pe),
116
 
117
	/** 
118
	* Get a particular payment info
119
	**/
420 ashish 120
	Payment getPayment(1:i64 id) throws (1:PaymentException pe),
680 rajveer 121
 
122
 
123
	/** 
124
	* Get a particular payment for a transaction. Will raise exception.
125
	**/
126
	list<Payment> getPaymentForTxnId(1:i64 txnId) throws (1:PaymentException pe),
121 ashish 127
 
680 rajveer 128
	/**
129
	* mark payment successful and store parameters
130
	**/
1118 rajveer 131
	bool updatePaymentDetails(1:i64 id, 2:string gatewayPaymentId, 3:string sessionId, 4:string gatewayTxnStatus, 5:string  description, 6:string gatewayTxnId, 7:string authCode, 8:string referenceCode, 9:string errorCode, 10:PaymentStatus  status, 11:string gatewayTxnDate, 12:list<Attribute> attributes) throws (1:PaymentException pe),
420 ashish 132
 
680 rajveer 133
	/**
134
	* mark payment failed and store parameters
694 rajveer 135
 
680 rajveer 136
	bool markPaymentFailed(1:i64 id, 2:string gatewayPaymentId, 3:string sessionId, 4:string gatewayTxnStatus, 5:string description, 6:string errorCode, 7:list<Attribute> attributes )  throws (1:PaymentException pe)
694 rajveer 137
	*/
1731 ankur.sing 138
 
1628 ankur.sing 139
	/**
1731 ankur.sing 140
	Returns the minimum and maximum amounts among successful payments.
141
	List contains two double values, first minimum and second maximum amount.
1628 ankur.sing 142
	*/
1731 ankur.sing 143
	list<double> getSuccessfulPaymentsAmountRange()
121 ashish 144
}