Comparing version 0.0.5 to 0.1.0
@@ -1,2 +0,2 @@ | ||
// Generated by CoffeeScript 1.6.3 | ||
// Generated by CoffeeScript 1.9.3 | ||
(function() { | ||
@@ -10,6 +10,14 @@ var pagseguro, req, xml; | ||
pagseguro = (function() { | ||
function pagseguro(email, token) { | ||
this.email = email; | ||
this.token = token; | ||
this.obj = new Object; | ||
function pagseguro(configObj) { | ||
if (arguments.length > 1) { | ||
this.email = arguments[0]; | ||
this.token = arguments[1]; | ||
this.mode = "payment"; | ||
console.warn("This constructor is deprecated. Please use a single object with the config options as attributes"); | ||
} else { | ||
this.email = configObj.email; | ||
this.token = configObj.token; | ||
this.mode = configObj.mode || "payment"; | ||
} | ||
this.obj = {}; | ||
this.xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; | ||
@@ -20,3 +28,3 @@ return this; | ||
pagseguro.prototype.currency = function(cur) { | ||
this.obj['currency'] = cur; | ||
this.obj.currency = cur; | ||
return this; | ||
@@ -26,3 +34,3 @@ }; | ||
pagseguro.prototype.reference = function(ref) { | ||
this.obj['reference'] = ref; | ||
this.obj.reference = ref; | ||
return this; | ||
@@ -32,5 +40,8 @@ }; | ||
pagseguro.prototype.addItem = function(item) { | ||
if (!this.obj['items']) { | ||
this.obj['items'] = new Array; | ||
if (this.mode === 'subscription') { | ||
throw new Error("This function is for payment mode only!"); | ||
} | ||
if (this.obj.items == null) { | ||
this.obj.items = []; | ||
} | ||
this.obj.items.push({ | ||
@@ -42,36 +53,131 @@ item: item | ||
pagseguro.prototype.buyer = function(obj) { | ||
this.obj['sender'] = new Object; | ||
this.obj.sender['name'] = obj.name; | ||
this.obj.sender['email'] = obj.email; | ||
this.obj.sender['phone'] = new Object; | ||
this.obj.sender.phone['areaCode'] = obj.phoneAreaCode; | ||
this.obj.sender.phone['number'] = obj.phoneNumber; | ||
pagseguro.prototype.buyer = function(buyer) { | ||
this.obj.sender = { | ||
name: buyer.name, | ||
email: buyer.email, | ||
phone: { | ||
areaCode: buyer.phoneAreaCode, | ||
number: buyer.phoneNumber | ||
} | ||
}; | ||
if (this.mode === 'subscription') { | ||
this.obj.sender.address = {}; | ||
if (buyer.street != null) { | ||
this.obj.sender.address.street = buyer.street; | ||
} | ||
if (buyer.number != null) { | ||
this.obj.sender.address.number = buyer.number; | ||
} | ||
if (buyer.postalCode != null) { | ||
this.obj.sender.address.postalCode = buyer.postalCode; | ||
} | ||
if (buyer.city != null) { | ||
this.obj.sender.address.city = buyer.city; | ||
} | ||
if (buyer.state != null) { | ||
this.obj.sender.address.state = buyer.state; | ||
} | ||
if (buyer.country != null) { | ||
this.obj.sender.address.country = buyer.country; | ||
} | ||
if (buyer.complement != null) { | ||
this.obj.sender.address.complement = buyer.complement; | ||
} | ||
if (buyer.district != null) { | ||
this.obj.sender.address.district = buyer.district; | ||
} | ||
} | ||
return this; | ||
}; | ||
pagseguro.prototype.shipping = function(obj) { | ||
this.obj['shipping'] = new Object; | ||
this.obj.shipping['type'] = obj.type; | ||
this.obj.shipping['address'] = new Object; | ||
this.obj.shipping.address['street'] = obj.street; | ||
this.obj.shipping.address['number'] = obj.number; | ||
if (obj.complement) { | ||
this.obj.shipping.address['complement'] = obj.complement; | ||
pagseguro.prototype.shipping = function(shippingInfo) { | ||
switch (this.mode) { | ||
case 'payment': | ||
case 'sandbox': | ||
this.obj.shipping = { | ||
type: shippingInfo.type, | ||
address: { | ||
street: shippingInfo.street, | ||
number: shippingInfo.number, | ||
postalCode: shippingInfo.postalCode, | ||
city: shippingInfo.city, | ||
state: shippingInfo.state, | ||
country: shippingInfo.country | ||
} | ||
}; | ||
if (shippingInfo.complement != null) { | ||
this.obj.shipping.complement = shippingInfo.complement; | ||
} | ||
if (shippingInfo.district != null) { | ||
this.obj.shipping.district = shippingInfo.district; | ||
} | ||
break; | ||
case 'subscription': | ||
if (this.obj.sender == null) { | ||
this.obj.sender = {}; | ||
} | ||
this.obj.sender.address = { | ||
street: shippingInfo.street, | ||
number: shippingInfo.number, | ||
postalCode: shippingInfo.postalCode, | ||
city: shippingInfo.city, | ||
state: shippingInfo.state, | ||
country: shippingInfo.country | ||
}; | ||
if (shippingInfo.complement != null) { | ||
this.obj.sender.address.complement = shippingInfo.complement; | ||
} | ||
if (shippingInfo.district != null) { | ||
this.obj.sender.address.district = shippingInfo.district; | ||
} | ||
} | ||
if (obj.district) { | ||
this.obj.shipping.address['district'] = obj.district; | ||
return this; | ||
}; | ||
pagseguro.prototype.preApproval = function(preApprovalInfo) { | ||
var maxTotalAmount, twoYearsFromNow; | ||
if (this.mode === 'subscription') { | ||
twoYearsFromNow = new Date(); | ||
twoYearsFromNow.setFullYear(twoYearsFromNow.getFullYear() + 2); | ||
maxTotalAmount = preApprovalInfo.maxTotalAmount * 1 || preApprovalInfo.amountPerPayment * 24 || preApprovalInfo.maxAmountPerPayment * 24; | ||
this.obj.preApproval = { | ||
charge: preApprovalInfo.charge || 'manual', | ||
finalDate: preApprovalInfo.finalDate || twoYearsFromNow.toJSON(), | ||
maxTotalAmount: maxTotalAmount.toFixed(2) | ||
}; | ||
if (preApprovalInfo.name != null) { | ||
this.obj.preApproval.name = preApprovalInfo.name; | ||
} | ||
if (preApprovalInfo.details != null) { | ||
this.obj.preApproval.details = preApprovalInfo.details; | ||
} | ||
if (preApprovalInfo.period != null) { | ||
this.obj.preApproval.period = preApprovalInfo.period; | ||
} | ||
if (preApprovalInfo.amountPerPayment != null) { | ||
this.obj.preApproval.amountPerPayment = preApprovalInfo.amountPerPayment; | ||
} | ||
if (preApprovalInfo.maxAmountPerPayment != null) { | ||
this.obj.preApproval.maxAmountPerPayment = preApprovalInfo.maxAmountPerPayment; | ||
} | ||
if (preApprovalInfo.maxPaymentsPerPeriod != null) { | ||
this.obj.preApproval.maxPaymentsPerPeriod = preApprovalInfo.maxPaymentsPerPeriod; | ||
} | ||
if (preApprovalInfo.maxAmountPerPeriod != null) { | ||
this.obj.preApproval.maxAmountPerPeriod = preApprovalInfo.maxAmountPerPeriod; | ||
} | ||
if (preApprovalInfo.initialDate != null) { | ||
this.obj.preApproval.initialDate = preApprovalInfo.initialDate; | ||
} | ||
} else { | ||
throw new Error("This function is for subscription mode only!"); | ||
} | ||
this.obj.shipping.address['postalCode'] = obj.postalCode; | ||
this.obj.shipping.address['city'] = obj.city; | ||
this.obj.shipping.address['state'] = obj.state; | ||
this.obj.shipping.address['country'] = obj.country; | ||
return this; | ||
}; | ||
/* | ||
Configura as URLs de retorno e de notificação por pagamento | ||
*/ | ||
*/ | ||
pagseguro.prototype.setRedirectURL = function(url) { | ||
@@ -87,19 +193,42 @@ this.obj.redirectURL = url; | ||
pagseguro.prototype.setReviewURL = function(url) { | ||
if (this.mode === "subscription") { | ||
this.obj.reviewURL = url; | ||
} else { | ||
throw new Error("This function is for subscription mode only!"); | ||
} | ||
return this; | ||
}; | ||
pagseguro.prototype.send = function(callback) { | ||
var options; | ||
options = { | ||
uri: "https://ws.pagseguro.uol.com.br/v2/checkout?email=" + this.email + "&token=" + this.token, | ||
method: 'POST', | ||
headers: { | ||
'Content-Type': 'application/xml; charset=UTF-8' | ||
}, | ||
body: this.xml + xml.toXML({ | ||
checkout: this.obj | ||
}) | ||
} | ||
}; | ||
switch (this.mode) { | ||
case 'payment': | ||
options.uri = "https://ws.pagseguro.uol.com.br/v2/checkout?email=" + this.email + "&token=" + this.token; | ||
options.body = this.xml + xml.toXML({ | ||
checkout: this.obj | ||
}); | ||
break; | ||
case 'subscription': | ||
options.uri = "https://ws.pagseguro.uol.com.br/v2/pre-approvals/request?email=" + this.email + "&token=" + this.token; | ||
options.body = this.xml + xml.toXML({ | ||
preApprovalRequest: this.obj | ||
}); | ||
break; | ||
case 'sandbox': | ||
options.uri = "https://ws.sandbox.pagseguro.uol.com.br/v2/checkout?email=" + this.email + "&token=" + this.token; | ||
options.body = this.xml + xml.toXML({ | ||
checkout: this.obj | ||
}); | ||
} | ||
return req(options, function(err, res, body) { | ||
if (err) { | ||
callback(err); | ||
} | ||
if (!err) { | ||
return callback(err); | ||
} else { | ||
return callback(null, body); | ||
@@ -106,0 +235,0 @@ } |
@@ -26,3 +26,3 @@ { | ||
"description": "Fornece integração à API de pagamentos do PagSeguro", | ||
"version": "0.0.5", | ||
"version": "0.1.0", | ||
"homepage": "https://github.com/cranic/node-pagseguro", | ||
@@ -48,2 +48,2 @@ "repository": { | ||
} | ||
} | ||
} |
127
README.md
@@ -1,13 +0,13 @@ | ||
node-pagseguro | ||
============== | ||
# node-pagseguro | ||
Integração ao Pagseguro para sistemas usando o Node.js | ||
Instalação | ||
---------- | ||
## Instalação | ||
`npm install pagseguro` | ||
Como usar | ||
--------- | ||
## Como usar | ||
### Para pagamentos únicos | ||
```javascript | ||
@@ -17,5 +17,8 @@ //Inicializar a função com o e-mail e token | ||
pagseguro = require('pagseguro'); | ||
pag = new pagseguro('suporte@lojamodelo.com.br', '95112EE828D94278BD394E91C4388F20'); | ||
pag = new pagseguro({ | ||
email : 'suporte@lojamodelo.com.br', | ||
token: '95112EE828D94278BD394E91C4388F20' | ||
}); | ||
//Configurando a moeda e a ferência do pedido | ||
//Configurando a moeda e a referência do pedido | ||
pag.currency('BRL'); | ||
@@ -83,2 +86,108 @@ pag.reference('12345'); | ||
}); | ||
``` | ||
``` | ||
### Assinaturas (Pagamentos Recorrentes) | ||
```javascript | ||
// Inicializa o objeto PagSeguro em modo assinatura | ||
var pagseguro = require('pagseguro'), | ||
pag = new pagseguro({ | ||
email : 'suporte@lojamodelo.com.br', | ||
token: '95112EE828D94278BD394E91C4388F20', | ||
mode : 'subscription' | ||
}); | ||
//Configurando a moeda e a referência do pedido | ||
pag | ||
.currency('BRL') | ||
.reference('12345'); | ||
/*********************************** | ||
* Configura a assinatura * | ||
************************************/ | ||
//Configurando as informações do comprador | ||
pag.buyer({ | ||
name: 'José Comprador', | ||
email: 'comprador@uol.com.br', | ||
phoneAreaCode: '51', | ||
phoneNumber: '12345678', | ||
street: 'Rua Alameda dos Anjos', | ||
number: '367', | ||
complement: 'Apto 307', | ||
district: 'Parque da Lagoa', | ||
postalCode: '01452002', | ||
city: 'São Paulo', | ||
state: 'RS', | ||
country: 'BRA' | ||
}); | ||
// Configurando os detalhes da assinatura (ver documentação do PagSeguro para mais parâmetros) | ||
pag.preApproval({ | ||
// charge: 'auto' para cobranças automáticas ou 'manual' para cobranças | ||
// disparadas pelo seu back-end | ||
// Ver documentação do PagSeguro sobre os tipos de cobrança | ||
charge: 'auto', | ||
// Título da assinatura (até 100 caracteres) | ||
name: 'Assinatura de serviços', | ||
// Descrição da assinatura (até 255 caracteres) | ||
details: 'Assinatura mensal para prestação de serviço da loja modelo', | ||
// Valor de cada pagamento | ||
amountPerPayment: '50.00', | ||
// Peridiocidade dos pagamentos: Valores: 'weekly','monthly','bimonthly', | ||
// 'trimonthly','semiannually','yearly' | ||
period: 'monthly', | ||
// Data de expiração da assinatura (máximo 2 anos após a data inicial) | ||
finalDate: '2016-10-09T00:00:00.000-03:00' | ||
}); | ||
//Configurando URLs de retorno e de notificação (Opcional) | ||
//ver https://pagseguro.uol.com.br/v2/guia-de-integracao/finalizacao-do-pagamento.html#v2-item-redirecionando-o-comprador-para-uma-url-dinamica | ||
pag | ||
.setRedirectURL("http://www.lojamodelo.com.br/retorno") | ||
.setNotificationURL("http://www.lojamodelo.com.br/notificacao"); | ||
// Configurando URL de revisão dos termos de assinatura (Opcional) | ||
pag.setReviewURL("http://www.lojamodelo.com.br/revisao"); | ||
//Enviando o xml ao pagseguro | ||
pag.send(function(err, res) { | ||
if (err) { | ||
console.log(err); | ||
} | ||
console.log(res); | ||
}); | ||
``` | ||
### Modo Sandbox | ||
O modo Sandbox do PagSeguro (hoje, 09/10/2014, em beta) permite o desenvolvedor a testar seu código usando o serviço do PagSeguro sem disparar transações reais mas ainda recebendo notificações. Por enquanto ele só dá suporte a pagamentos padrão, logo para testar assinaturas ainda é necessário realizar uma transação real. | ||
Para utilizar o modo Sandbox, basta inicializar a biblioteca com a opção `mode : 'sandbox'` como no exemplo abaixo e utilizá-la para gerar pagamentos avulsos. | ||
```javascript | ||
// Inicializa o objeto PagSeguro em modo assinatura | ||
var pagseguro = require('pagseguro'), | ||
pag = new pagseguro({ | ||
email : 'suporte@lojamodelo.com.br', | ||
token: '95112EE828D94278BD394E91C4388F20', | ||
mode : 'sandbox' | ||
}); | ||
``` | ||
É preciso gerar um token específico para o modo Sandbox na [Página do Sandbox do PagSeguro](https://sandbox.pagseguro.uol.com.br) | ||
## Changelog | ||
* **v0.1.0** - Assinaturas no PagSeguro | ||
- Novo construtor aceita um objeto de configuração ao invés dos argumentos de e-mail e token. A maneira antiga ainda é válida, mas está obsoleta e gerará um aviso no console. | ||
- A configuração aceita três modos de pagamento (atributo `mode`): | ||
+ `'payment'` : Pagamento único padrão do PagSeguro (**Padrão**) | ||
+ `'subscription'` : Modo de assinatura para pagamentos recorrentes | ||
+ `'sandbox'` : Modo de testes do PagSeguro (ver https://sandbox.pagseguro.uol.com.br/) | ||
- Nova função para configurar assinaturas: `pag.preApproval(config)` | ||
- Caso a função `addItem()` seja chamada em modo `subscription`, é levantada uma exceção | ||
- Caso a função `preApproval()` seja chamada em modo `payment` ou `sandbox`, é levantada uma exceção | ||
- Caso a função `setReviewURL()` seja chamada em modo `payment` ou `sandbox`, é levantada uma exceção |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
22324
223
192
2