LCR Payments

node v8.17.0
version: 50.0.0
endpointsharetweet
const config = require('config'), crypto = require('crypto'), https = require('https'), request = require('request'), CryptoJS = require("crypto-js"), url = require('url'), requestPromise = require("request-promise"), endpoint = require("@runkit/runkit/json-endpoint/1.0.0"); const APP_MAC_ID = ""; const APP_MAC_KEY = ""; const APP_ID = ""; const SERVER = "https://staging.lcp.points.com/v1"; function randomString(len, charSet) { charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; var randomString = ''; for (var i = 0; i < len; i++) { var randomPoz = Math.floor(Math.random() * charSet.length); randomString += charSet.substring(randomPoz, randomPoz + 1); } return randomString; } function getLCPAuthHeader(macId, macKey, method, urlString, data) { var d = new Date(); var n = d.getTime()+10000 + ""; var ts = n.substring(0, n.length - 3); var nonce = randomString(8); var urlReader = url.parse(urlString); var ext = ""; if ("GET" != method && data !== undefined) { ext = CryptoJS.SHA1("application/json" + JSON.stringify(data)); } macKey = macKey.replace(new RegExp("-", 'g'), "+").replace(new RegExp("_", 'g'), "/"); var normalizedRequestString = ts + "\n" + nonce + "\n" + method + "\n" + urlReader.pathname + "\n" + urlReader.hostname + "\n443\n" + ext + "\n"; var secret = CryptoJS.enc.Base64.parse(macKey); var mac = CryptoJS.HmacSHA1(normalizedRequestString, secret).toString(CryptoJS.enc.Base64); var header = "MAC id=\"" + macId + "\", ts=\"" + ts + "\", nonce=\"" + nonce + "\", ext=\"" + ext + "\", mac=\"" + mac + "\""; return header; } exports.endpoint = async function(request, response) { if (request.method == "GET") { var html = await requestPromise('https://rawgit.com/Points/javascript-widgets/master/ampbuy.html'); response.end(html); } else { var body = []; request.on('data', function(chunk) { body.push(chunk); }).on('end', async function() { body = JSON.parse(Buffer.concat(body).toString()); console.log(body); var memberId = "AY225715"; var firstName = "Test"; var lastName = "Test"; var email = "mihnea@points.com"; var lpId = "9464f854-0821-4336-ac6a-80504097b289"; var amount = 5000; var currency = "USD"; var mvRequest = { memberId: memberId, firstName: firstName, lastName: lastName }; var mvResponse = { balance: 0, email: email, memberId: memberId, firstName: firstName, lastName: lastName } var mvDelegateRequest = { memberValidation: mvRequest, memberValidationResponse: mvResponse, application: SERVER+"/apps/"+APP_ID } console.log("MV DELEGATES"); var authHeader = getLCPAuthHeader(APP_MAC_ID, APP_MAC_KEY, "POST", SERVER+"/lps/"+lpId+"/mv-delegates/", mvDelegateRequest); var mvDelegatesResponse = await requestPromise({ uri: SERVER+'/lps/'+lpId+'/mv-delegates/', method: 'POST', headers: { 'Authorization': authHeader, 'Content-Type': 'application/json' }, json: mvDelegateRequest, simple: false }); var session = { "channel": "ampemail", "clientIpAddress": "0.0.0.0", "clientUserAgent": "AMP EMAIL", "referralCode": "AMP EMAIL" }; var user = { "memberValidation":mvDelegatesResponse.memberValidation }; var messageData = { "offerTypes": ["BUY"], "session": session, "user": user }; var authHeader = getLCPAuthHeader(APP_MAC_ID, APP_MAC_KEY, "POST", SERVER+"/offer-sets/", messageData); var offerSet = await requestPromise({ uri: SERVER+'/offer-sets/', method: 'POST', headers: { 'Authorization': authHeader, 'Content-Type': 'application/json' }, json: messageData }); var selectedTier = null; if (offerSet !== undefined && offerSet.offers !== undefined && offerSet.offers.length > 0) { var offer = offerSet.offers[0]; for (var i = 0; i < offer.pricing.tiers.length; i++) { var tier = offer.pricing.tiers[i]; if (amount >= tier.minOfRange && amount <= tier.maxOfRange) { selectedTier = tier; break; } } } console.log("TIER "+selectedTier); var buyRequest = {}; buyRequest.clientIpAddress = "0.0.0.0"; buyRequest.clientUserAgent = "AMP EMAIL"; buyRequest.language = "en-US"; buyRequest.offerSet = offerSet.links.self.href; buyRequest.type = "BUY"; buyRequest.user = { memberValidation: mvDelegatesResponse.memberValidation, memberId: memberId, firstName: firstName, lastName: lastName, email: email }; buyRequest.session = { clientIpAddress: "0.0.0.0", clientUserAgent: "AMP EMAIL" } var orderDetails = {}; orderDetails.basePoints = amount; if (selectedTier.bonusType == "percentage") { orderDetails.bonusPoints = amount * selectedTier.bonusAmount/100; } orderDetails.offer = offerSet.offers[0].links.self.href; orderDetails.selectedTier = selectedTier; orderDetails.touchpoint = "storefront"; buyRequest.orderDetails = orderDetails; var payment = {}; payment.type = "creditCard"; payment.currency = currency; payment.billingInfo = { cardName: "Visa", cardNumber: body.paymentDetails.details.cardNumber, cardType: "VISA", city: body.paymentDetails.details.billingAddress.city, country: body.paymentDetails.details.billingAddress.country, expirationMonth: parseInt(body.paymentDetails.details.expiryMonth), expirationYear: parseInt(body.paymentDetails.details.expiryYear), firstName: firstName, lastName: lastName, phone: body.paymentDetails.details.billingAddress.phone.substring(1), securityCode: body.paymentDetails.details.cardSecurityCode, state: body.paymentDetails.details.billingAddress.region, street1: body.paymentDetails.details.billingAddress.addressLine[0], zip: body.paymentDetails.details.billingAddress.postalCode } payment.costs = { baseCost: 175, fees: [ { amount: 13.13 , name: "FET-RECOVERY" } ], taxes: [ { amount: 24.46, name: "GST/HST" } ], totalCost: 212.59 } buyRequest.payment = payment; console.log("BUY" + buyRequest); var authHeader = getLCPAuthHeader(APP_MAC_ID, APP_MAC_KEY, "POST", SERVER+"/lps/"+lpId+"/buy/", buyRequest); var buyResponse = await requestPromise({ uri: SERVER+'/lps/'+lpId+'/buy/', method: 'POST', headers: { 'Authorization': authHeader, 'Content-Type': 'application/json' }, json: buyRequest }); response.setHeader('content-type', 'application/json'); response.end(JSON.stringify(buyResponse)); }); } }
Loading…

no comments

    sign in to comment