Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

checkout.js 4.0 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
  1. var util = require('util');
  2. var builder = require('botbuilder');
  3. var botUtils = require('../utils');
  4. var siteUrl = require('../site-url');
  5. var orderService = require('../../services/orders');
  6. // Checkout flow
  7. var RestartMessage = 'restart';
  8. var StartOver = 'start_over';
  9. var KeepGoing = 'continue';
  10. var Help = 'help';
  11. var lib = new builder.Library('checkout');
  12. lib.dialog('/', [
  13. function (session, args, next) {
  14. args = args || {};
  15. var order = args.order;
  16. if (!order) {
  17. // 'Changed my mind' was pressed, continue to next step and prompt for options
  18. return next();
  19. }
  20. // Serialize user address
  21. var addressSerialized = botUtils.serializeAddress(session.message.address);
  22. // Create order (with no payment - pending)
  23. orderService.placePendingOrder(order).then(function (order) {
  24. // Build Checkout url using previously stored Site url
  25. var checkoutUrl = util.format(
  26. '%s/checkout?orderId=%s&address=%s',
  27. siteUrl.retrieve(),
  28. encodeURIComponent(order.id),
  29. encodeURIComponent(addressSerialized));
  30. var messageText = session.gettext('final_price', order.selection.price);
  31. var card = new builder.HeroCard(session)
  32. .text(messageText)
  33. .buttons([
  34. builder.CardAction.openUrl(session, checkoutUrl, 'add_credit_card'),
  35. builder.CardAction.imBack(session, session.gettext(RestartMessage), RestartMessage)
  36. ]);
  37. session.send(new builder.Message(session)
  38. .addAttachment(card));
  39. });
  40. },
  41. function (session, args) {
  42. builder.Prompts.choice(session, 'select_how_to_continue', [
  43. session.gettext(StartOver),
  44. session.gettext(KeepGoing),
  45. session.gettext(Help)
  46. ]);
  47. },
  48. function (session, args) {
  49. switch (args.response.entity) {
  50. case KeepGoing:
  51. return session.reset();
  52. case StartOver:
  53. return session.reset('/');
  54. case Help:
  55. return session.beginDialog('help:/');
  56. }
  57. }
  58. ]);
  59. // Checkout completed (initiated from web application. See /checkout.js in the root folder)
  60. lib.dialog('completed', function (session, args, next) {
  61. args = args || {};
  62. var orderId = args.orderId;
  63. // Retrieve order and create ReceiptCard
  64. orderService.retrieveOrder(orderId).then(function (order) {
  65. if (!order) {
  66. throw new Error(session.gettext('order_not_found'));
  67. }
  68. var messageText = session.gettext(
  69. 'order_details',
  70. order.id,
  71. order.selection.name,
  72. order.details.recipient.firstName,
  73. order.details.recipient.lastName,
  74. order.details.note);
  75. var receiptCard = new builder.ReceiptCard(session)
  76. .title(order.paymentDetails.creditcardHolder)
  77. .facts([
  78. builder.Fact.create(session, order.id, 'order_number'),
  79. builder.Fact.create(session, offuscateNumber(order.paymentDetails.creditcardNumber), 'payment_method')
  80. ])
  81. .items([
  82. builder.ReceiptItem.create(session, order.selection.price, order.selection.name)
  83. .image(builder.CardImage.create(session, order.selection.imageUrl))
  84. ])
  85. .total(order.selection.price)
  86. .buttons([
  87. builder.CardAction.openUrl(session, 'https://dev.botframework.com/', 'more_information')
  88. ]);
  89. var message = new builder.Message(session)
  90. .text(messageText)
  91. .addAttachment(receiptCard);
  92. session.endDialog(message);
  93. }).catch(function (err) {
  94. session.endDialog(session.gettext('error_ocurred', err.message));
  95. });
  96. });
  97. // Helpers
  98. function offuscateNumber(cardNumber) {
  99. return cardNumber.substring(0, 4) + ' ****';
  100. }
  101. // Export createLibrary() function
  102. module.exports.createLibrary = function () {
  103. return lib.clone();
  104. };
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...