Skip to content

Commit f009c78

Browse files
authored
Merge pull request #12 from TransbankDevelopers/feat/oneclick-mall-deferred
feat: oneclick mall deferred
2 parents 798c987 + 0854815 commit f009c78

16 files changed

Lines changed: 995 additions & 18 deletions

File tree

src/main/java/cl/transbank/webpay/example/controllers/BaseController.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
public abstract class BaseController {
88

99
protected static final String VIEW_ERROR = "error/error_page";
10-
protected static final String VIEW_ABORTED_ERROR = "error/aborted";
11-
protected static final String VIEW_FORM_ERROR = "error/form_error";
12-
protected static final String VIEW_TIMEOUT_ERROR = "error/timeout";
10+
protected static final String VIEW_ABORTED_ERROR = "error/webpay/aborted";
11+
protected static final String VIEW_FORM_ERROR = "error/webpay/form_error";
12+
protected static final String VIEW_TIMEOUT_ERROR = "error/webpay/timeout";
13+
protected static final String VIEW_RECOVER_ERROR = "error/oneclick/recover";
14+
protected static final String VIEW_REJECTED_ERROR = "error/oneclick/rejected";
1315

1416
public String toJson(Object obj) {
1517
return (new GsonBuilder().setPrettyPrinting().create()).toJson(obj);

src/main/java/cl/transbank/webpay/example/controllers/OneclickMallController.java

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,14 @@
2121
@Controller
2222
@RequestMapping("/oneclick-mall")
2323
public class OneclickMallController extends BaseController {
24+
25+
private static final int AUTHORIZED = 0;
2426
private static final String TEMPLATE_FOLDER = "oneclick_mall";
2527
private static final String BASE_URL = "/oneclick-mall";
2628
private static final String PRODUCT = "Webpay Oneclick Mall";
29+
private static final String MODEL_NAVIGATION = "navigation";
30+
private static final String MODEL_RESPONSE = "response_data";
31+
private static final String MODEL_RESPONSE_JSON = "response_data_json";
2732

2833
private static final String VIEW_START = TEMPLATE_FOLDER + "/start";
2934
private static final String VIEW_FINISH = TEMPLATE_FOLDER + "/finish";
@@ -35,6 +40,8 @@ public class OneclickMallController extends BaseController {
3540

3641
private static final Map<String, String> NAV_START;
3742
private static final Map<String, String> NAV_FINISH;
43+
private static final Map<String, String> NAV_FINISH_RECOVER;
44+
private static final Map<String, String> NAV_FINISH_REJECTED;
3845
private static final Map<String, String> NAV_AUTHORIZE;
3946
private static final Map<String, String> NAV_DELETE;
4047
private static final Map<String, String> NAV_STATUS;
@@ -56,10 +63,18 @@ public class OneclickMallController extends BaseController {
5663
NAV_FINISH.put("response", "Respuesta");
5764
NAV_FINISH.put("authorize", "Autorizar una transacción");
5865

66+
NAV_FINISH_RECOVER = new LinkedHashMap<>();
67+
NAV_FINISH_RECOVER.put("data", "Datos");
68+
69+
NAV_FINISH_REJECTED = new LinkedHashMap<>();
70+
NAV_FINISH_REJECTED.put("data", "Datos");
71+
NAV_FINISH_REJECTED.put("request", "Petición");
72+
NAV_FINISH_REJECTED.put("response", "Respuesta");
73+
5974
NAV_AUTHORIZE = new LinkedHashMap<>();
6075
NAV_AUTHORIZE.put("request", "Petición");
6176
NAV_AUTHORIZE.put("response", "Respuesta");
62-
NAV_AUTHORIZE.put("done", "listo");
77+
NAV_AUTHORIZE.put("done", "Listo");
6378

6479
NAV_STATUS = new LinkedHashMap<>();
6580
NAV_STATUS.put("request", "Petición");
@@ -97,7 +112,7 @@ private void addBreadcrumbs(Model model, String label, String url) {
97112
@GetMapping("/start")
98113
public String start(HttpServletRequest req, Model model)
99114
throws IOException, InscriptionStartException {
100-
model.addAttribute("navigation", NAV_START);
115+
model.addAttribute(MODEL_NAVIGATION, NAV_START);
101116
addBreadcrumbs(model, "Iniciar inscripción", "#");
102117

103118
String username = "user_" + getRandomNumber();
@@ -116,8 +131,8 @@ public String start(HttpServletRequest req, Model model)
116131
"email", email,
117132
"returnUrl", returnUrl
118133
)));
119-
model.addAttribute("response_data", resp);
120-
model.addAttribute("response_data_json", toJson(resp));
134+
model.addAttribute(MODEL_RESPONSE, resp);
135+
model.addAttribute(MODEL_RESPONSE_JSON, toJson(resp));
121136
model.addAttribute("url", resp.getUrlWebpay());
122137
model.addAttribute("token", resp.getToken());
123138

@@ -129,16 +144,32 @@ public String start(HttpServletRequest req, Model model)
129144

130145
@GetMapping("/finish")
131146
public String finish(HttpServletRequest req,
147+
@RequestParam Map<String, String> params,
132148
@RequestParam(name = "TBK_TOKEN", required = false) String token,
149+
@RequestParam(name = "TBK_ORDEN_COMPRA", required = false) String ordenCompra,
133150
Model model)
134151
throws IOException, InscriptionFinishException {
135152

136-
model.addAttribute("navigation", NAV_FINISH);
153+
model.addAttribute(MODEL_NAVIGATION, NAV_FINISH);
137154
addBreadcrumbs(model, "Finalizar inscripción", "#");
138155

156+
if (ordenCompra != null) {
157+
model.addAttribute(MODEL_NAVIGATION, NAV_FINISH_RECOVER);
158+
model.addAttribute("request_data_json", toJson(params));
159+
return VIEW_RECOVER_ERROR;
160+
}
161+
139162
String username = (String) req.getSession().getAttribute("username");
140163

141164
var resp = inscription.finish(token);
165+
model.addAttribute(MODEL_RESPONSE, resp);
166+
model.addAttribute(MODEL_RESPONSE_JSON, toJson(resp));
167+
168+
if (resp.getResponseCode() != AUTHORIZED) {
169+
model.addAttribute(MODEL_NAVIGATION, NAV_FINISH_REJECTED);
170+
model.addAttribute("request_data_json", toJson(params));
171+
return VIEW_REJECTED_ERROR;
172+
}
142173

143174
req.getSession().setAttribute("tbkUser", resp.getTbkUser());
144175

@@ -150,8 +181,6 @@ public String finish(HttpServletRequest req,
150181
model.addAttribute("token", token);
151182
model.addAttribute("username", username);
152183
model.addAttribute("tbk_user", resp.getTbkUser());
153-
model.addAttribute("response_data", resp);
154-
model.addAttribute("response_data_json", toJson(resp));
155184

156185
model.addAttribute("child_commerce_code1", IntegrationCommerceCodes.ONECLICK_MALL_CHILD1);
157186
model.addAttribute("child_commerce_code2", IntegrationCommerceCodes.ONECLICK_MALL_CHILD2);
@@ -165,7 +194,7 @@ public String delete(@RequestParam String username,
165194
Model model)
166195
throws IOException, InscriptionDeleteException {
167196

168-
model.addAttribute("navigation", NAV_DELETE);
197+
model.addAttribute(MODEL_NAVIGATION, NAV_DELETE);
169198
addBreadcrumbs(model, "Eliminar inscripción", "#");
170199

171200
inscription.delete(tbkUser, username);
@@ -187,7 +216,7 @@ public String authorize(
187216
Model model)
188217
throws IOException, TransactionAuthorizeException {
189218

190-
model.addAttribute("navigation", NAV_AUTHORIZE);
219+
model.addAttribute(MODEL_NAVIGATION, NAV_AUTHORIZE);
191220
addBreadcrumbs(model, "Autorizar transacción", "#");
192221

193222
String buyOrder = "Order" + getRandomNumber();
@@ -211,8 +240,8 @@ public String authorize(
211240

212241
var resp = transaction.authorize(username, tbkUser, buyOrder, details);
213242

214-
model.addAttribute("response_data", resp);
215-
model.addAttribute("response_data_json", toJson(resp));
243+
model.addAttribute(MODEL_RESPONSE, resp);
244+
model.addAttribute(MODEL_RESPONSE_JSON, toJson(resp));
216245

217246
return VIEW_AUTHORIZE;
218247
}
@@ -221,11 +250,11 @@ public String authorize(
221250
public String status(@RequestParam("buy_order") String buyOrder, Model model)
222251
throws IOException, TransactionStatusException {
223252

224-
model.addAttribute("navigation", NAV_STATUS);
253+
model.addAttribute(MODEL_NAVIGATION, NAV_STATUS);
225254
addBreadcrumbs(model, "Consultar estado", "#");
226255

227256
var resp = transaction.status(buyOrder);
228-
model.addAttribute("response_data_json", toJson(resp));
257+
model.addAttribute(MODEL_RESPONSE_JSON, toJson(resp));
229258

230259
return VIEW_STATUS;
231260
}
@@ -237,12 +266,12 @@ public String refund(@RequestParam("buy_order") String buyOrder,
237266
@RequestParam double amount,
238267
Model model)
239268
throws IOException, TransactionRefundException {
240-
model.addAttribute("navigation", NAV_REFUND);
269+
model.addAttribute(MODEL_NAVIGATION, NAV_REFUND);
241270
addBreadcrumbs(model, "Reembolso", "#");
242271

243272
model.addAttribute("buy_order", buyOrder);
244273
var resp = transaction.refund(buyOrder, childCommerceCode, childBuyOrder, amount);
245-
model.addAttribute("response_data_json", toJson(resp));
274+
model.addAttribute(MODEL_RESPONSE_JSON, toJson(resp));
246275

247276
return VIEW_REFUND;
248277
}

0 commit comments

Comments
 (0)