Advertisement
Guest User

Untitled

a guest
Jun 8th, 2016
453
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.17 KB | None | 0 0
  1. ACK: 'Failure',
  2. VERSION: '52.0',
  3. BUILD: '22708556'
  4. L_ERRORCODE0: '10410',
  5. L_SHORTMESSAGE0: 'Invalid token',
  6. L_LONGMESSAGE0: 'Invalid token.',
  7. L_SEVERITYCODE0: 'Error'
  8.  
  9. <form id="myContainer" method="post" action="/api/payment/payone"></form>
  10. <script>
  11. window.paypalCheckoutReady = function () {
  12. paypal.checkout.setup('XXX', {
  13. environment: 'sandbox',
  14. container: 'myContainer'
  15. });
  16. };
  17. </script>
  18. <script src="//www.paypalobjects.com/api/checkout.js" async></script>
  19.  
  20. payone: function(req, res) {
  21. var paypal = require('paypal-express-checkout').init('username', 'password', 'signature', 'return url', 'cancel url', 'debug');
  22.  
  23. var data = res.body;
  24. console.log(data);
  25.  
  26.  
  27. paypal.pay('20130001', 10.00, 'XX', 'USD', false, function(err, url) {
  28. if (err) {
  29. console.log(err);
  30. return;
  31. }
  32. res.redirect(url);
  33. });
  34.  
  35.  
  36. paypal.detail( "token", "PayerID", function(err, data, invoiceNumber, price) {
  37.  
  38. if (err) {
  39. console.log(err);
  40. return;
  41. }
  42. });
  43.  
  44. }
  45.  
  46. var parser = require('url');
  47. var https = require('https');
  48. var qs = require('querystring');
  49.  
  50. function Paypal(username, password, signature, returnUrl, cancelUrl, debug) {
  51. this.username = "XXX";
  52. this.password = "XXX";
  53. this.solutiontype = 'Mark';
  54. this.signature = "XXX";
  55. this.debug = debug || false;
  56. this.returnUrl = 'XXX';
  57. this.cancelUrl = 'XXX';
  58. this.url = 'https://' + 'api-3t.sandbox.paypal.com' + '/nvp'; //'https://' + (debug ? 'api-3t.sandbox.paypal.com' : 'api-3t.paypal.com') + '/nvp';
  59. this.redirect = 'https://' + 'www.sandbox.paypal.com/cgi-bin/webscr'; //https://' + (debug ? 'www.sandbox.paypal.com/cgi-bin/webscr' : 'www.paypal.com/cgi-bin/webscr');
  60. };
  61.  
  62. Paypal.prototype.params = function() {
  63. var self = this;
  64. return {
  65. USER: self.username,
  66. PWD: self.password,
  67. SIGNATURE: self.signature,
  68. SOLUTIONTYPE: self.solutiontype,
  69. VERSION: '52.0'
  70. };
  71. console.log(self);
  72. };
  73.  
  74.  
  75. Paypal.prototype.detail = function(token, payer, callback) {
  76.  
  77. if (token.get !== undefined && typeof(payer) === 'function') {
  78. callback = payer;
  79. payer = token.get.PayerID;
  80. token = token.get.token;
  81. }
  82.  
  83. console.log(token);
  84. var self = this;
  85. var params = self.params();
  86.  
  87.  
  88.  
  89.  
  90. params.TOKEN = token;
  91. params.METHOD = 'GetExpressCheckoutDetails';
  92.  
  93. self.request(self.url, 'POST', params, function(err, data) {
  94.  
  95.  
  96.  
  97. if (err) {
  98. callback(err, data);
  99. return;
  100. }
  101.  
  102. if (typeof(data.CUSTOM) === 'undefined') {
  103. callback(data, null);
  104. return;
  105. }
  106.  
  107. console.log('3.3');
  108. var custom = data.CUSTOM.split('|');
  109. var params = self.params();
  110.  
  111. params.PAYMENTACTION = 'Sale';
  112. params.PAYERID = payer;
  113. params.TOKEN = token;
  114. params.AMT = custom[1];
  115. params.CURRENCYCODE = custom[2];
  116. params.METHOD = 'DoExpressCheckoutPayment';
  117.  
  118.  
  119. self.request(self.url, 'POST', params, function(err, data) {
  120.  
  121. if (err) {
  122. callback(err, data);
  123. return;
  124. }
  125. console.log('3.4');
  126. callback(null, data, custom[0], custom[1]);
  127. });
  128. });
  129.  
  130. return self;
  131. };
  132.  
  133.  
  134.  
  135.  
  136. Paypal.prototype.request = function(url, method, data, callback) {
  137.  
  138.  
  139.  
  140.  
  141. var self = this;
  142. var params = qs.stringify(data);
  143.  
  144. if (method === 'GET')
  145. url += '?' + params;
  146.  
  147. var uri = parser.parse(url);
  148. var headers = {};
  149.  
  150.  
  151. headers['Content-Type'] = method === 'POST' ? 'application/x-www-form-urlencoded' : 'text/plain';
  152. headers['Content-Length'] = params.length;
  153.  
  154. var location = '';
  155. var options = { protocol: uri.protocol, auth: uri.auth, method: method || 'GET', hostname: uri.hostname, port: uri.port, path: uri.path, agent: false, headers: headers };
  156.  
  157. var response = function (res) {
  158. var buffer = '';
  159.  
  160. res.on('data', function(chunk) {
  161. buffer += chunk.toString('utf8');
  162. })
  163.  
  164. req.setTimeout(exports.timeout, function() {
  165. callback(new Error('timeout'), null);
  166. });
  167.  
  168. res.on('end', function() {
  169.  
  170. var error = null;
  171. var data = '';
  172.  
  173. if (res.statusCode > 200) {
  174. error = new Error(res.statusCode);
  175. data = buffer;
  176. } else
  177. data = qs.parse(buffer);
  178.  
  179. callback(error, data);
  180. });
  181. };
  182.  
  183. var req = https.request(options, response);
  184.  
  185. req.on('error', function(err) {
  186. callback(err, null);
  187. });
  188.  
  189. if (method === 'POST')
  190. req.end(params);
  191. else
  192. req.end();
  193.  
  194. return self;
  195. };
  196.  
  197. Paypal.prototype.pay = function(invoiceNumber, amount, description, currency, requireAddress, callback) {
  198.  
  199. // Backward compatibility
  200. if (typeof(requireAddress) === 'function') {
  201. callback = requireAddress;
  202. requireAddress = false;
  203. }
  204.  
  205. var self = this;
  206. var params = self.params();
  207.  
  208.  
  209. params.PAYMENTACTION = 'Sale';
  210. params.AMT = prepareNumber(amount);
  211. params.RETURNURL = self.returnUrl;
  212. params.CANCELURL = self.cancelUrl;
  213. params.DESC = description;
  214. params.NOSHIPPING = requireAddress ? 0 : 1;
  215. params.ALLOWNOTE = 1;
  216. params.CURRENCYCODE = currency;
  217. params.METHOD = 'SetExpressCheckout';
  218. params.INVNUM = invoiceNumber;
  219. params.CUSTOM = invoiceNumber + '|' + params.AMT + '|' + currency;
  220.  
  221. self.request(self.url, 'POST', params, function(err, data) {
  222.  
  223. if (err) {
  224. callback(err, null);
  225. return;
  226. }
  227.  
  228. if (data.ACK === 'Success') {
  229. callback(null, self.redirect + '?cmd=_express- checkout&useraction=commit&token=' + data.TOKEN);
  230. return;
  231. }
  232.  
  233. callback(new Error('ACK ' + data.ACK + ': ' + data.L_LONGMESSAGE0), null);
  234. });
  235.  
  236. return self;
  237. console.log(self);
  238. };
  239.  
  240.  
  241. function prepareNumber(num, doubleZero) {
  242. var str = num.toString().replace(',', '.');
  243.  
  244. var index = str.indexOf('.');
  245. if (index > -1) {
  246. var len = str.substring(index + 1).length;
  247. if (len === 1)
  248. str += '0';
  249. if (len > 2)
  250. str = str.substring(0, index + 3);
  251. } else {
  252. if (doubleZero || true)
  253. str += '.00';
  254. }
  255. return str;
  256. };
  257.  
  258. exports.timeout = 10000;
  259. exports.Paypal = Paypal;
  260.  
  261. exports.init = function(username, password, signature, returnUrl, cancelUrl, debug) {
  262. return new Paypal(username, password, signature, returnUrl, cancelUrl, debug);
  263. };
  264.  
  265. exports.create = function(username, password, signature, returnUrl, cancelUrl, debug) {
  266. return exports.init(username, password, signature, returnUrl, cancelUrl, debug);
  267. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement