<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>MOIP - Labs</title>
	
	<link>http://labs.moip.com.br</link>
	<description />
	<lastBuildDate>Wed, 16 May 2012 14:42:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MoipLabs" /><feedburner:info uri="moiplabs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Checkout Transparente</title>
		<link>http://feedproxy.google.com/~r/MoipLabs/~3/o8AYt44S5MM/</link>
		<comments>http://labs.moip.com.br/2012/05/15/checkout-transparente/#comments</comments>
		<pubDate>Tue, 15 May 2012 13:56:20 +0000</pubDate>
		<dc:creator>Moip</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://labs.moip.com.br/?p=2944</guid>
		<description><![CDATA[Você não precisa ser refém de um checkout padrão. Otimizar o fluxo de compra é essencial para quem se preocupa com conversão e não quer perder clientes no momento mais crítico do processo de compra. Para atender essa demanda, criamos o Checkout Transparente, ferramenta que permite as empresas com vendas online criarem seu proprio modelo [...]]]></description>
			<content:encoded><![CDATA[<p>Você não precisa ser refém de um checkout padrão. Otimizar o fluxo de compra é essencial para quem se preocupa com conversão e não quer perder clientes no momento mais crítico do processo de compra.</p>
<p>Para atender essa demanda, criamos o <a href="http://labs.moip.com.br/transparente/" target="_blank">Checkout Transparente</a>, ferramenta que permite as empresas com vendas online criarem seu proprio modelo customizado de checkout, sem ruídos ou redirecionamentos desnecessários.</p>
<p>Além de dispensar o cadastro do comprador e as páginas intermediárias, o sistema permite otimizações de acordo com o ramo de atividade e perfil de compradores, desde realizar todo o fluxo de compra em uma só tela como também oferecer a compra por 1 clique.</p>
<p>Isso é possível graças a uma nova forma de integração que usa um simples código JavaScript para transmitir os dados de pagamento do navegador direto para o sistema do Moip.</p>
<p>Um dos primeiros parceiros a utilizar a nova solução, a <a href="http://likestore.com.br/" target="_blank">LikeStore</a>, primeira plataforma de social commerce no país, apresentou aumento na taxa de conversão de 22%, apenas na primeiro mês do uso do <a href="http://labs.moip.com.br/transparente/" target="_blank">Checkout Transparente</a>.</p>
<p>Para conhecer mais essa nova integração e começar a desenvolver seu Checkout, veja a documentação completa em:<br />
<a href="http://labs.moip.com.br/transparente/">http://labs.moip.com.br/transparente/</a></p>
<p>Boa integração ;)</p>
<img src="http://feeds.feedburner.com/~r/MoipLabs/~4/o8AYt44S5MM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://labs.moip.com.br/2012/05/15/checkout-transparente/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://labs.moip.com.br/2012/05/15/checkout-transparente/</feedburner:origLink></item>
		<item>
		<title>Classificação de status de pagamento</title>
		<link>http://feedproxy.google.com/~r/MoipLabs/~3/BBt4Jb0eToM/</link>
		<comments>http://labs.moip.com.br/2012/04/17/classificacao-de-status-de-pagamento/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 14:52:16 +0000</pubDate>
		<dc:creator>Moip</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://labs.moip.com.br/?p=2862</guid>
		<description><![CDATA[O Moip, pensando em deixar as informa&#231;&#245;es sempre claras e diretas a seus usu&#225;rios, est&#225; disponibilizando mais uma novidade para voc&#234;: a Classifica&#231;&#227;o de Status de Pagamento. Agora, voc&#234; ter&#225; &#224; disposi&#231;&#227;o informa&#231;&#245;es detalhadas sobre o que acontece em suas transa&#231;&#245;es, facilitando assim a gest&#227;o do seu neg&#243;cio. O que &#233; a Classifica&#231;&#227;o? As classifica&#231;&#245;es [...]]]></description>
			<content:encoded><![CDATA[<p>O Moip, pensando em deixar as informa&ccedil;&otilde;es sempre claras e diretas a seus usu&aacute;rios, est&aacute; disponibilizando mais uma novidade para voc&ecirc;: a Classifica&ccedil;&atilde;o de Status de Pagamento.</p>
<p>Agora,  voc&ecirc; ter&aacute; &agrave; disposi&ccedil;&atilde;o informa&ccedil;&otilde;es detalhadas sobre o que acontece em suas transa&ccedil;&otilde;es, facilitando assim a gest&atilde;o do seu neg&oacute;cio.</p>
<p><strong>O que &eacute; a Classifica&ccedil;&atilde;o?</strong><br />
  As classifica&ccedil;&otilde;es s&atilde;o informa&ccedil;&otilde;es adicionais de status de pagamento, &uacute;teis para an&aacute;lise e gest&atilde;o do seu fluxo de pagamento. Atualmente a classifica&ccedil;&atilde;o permite que voc&ecirc; saiba o motivo do cancelamento de uma transa&ccedil;&atilde;o.</p>
<p><strong>Como utilizar este recurso? </strong><br />
&Eacute; poss&iacute;vel recuperar essa informa&ccedil;&atilde;o adicional de duas formas diferentes, por meio do<a href="http://labs.moip.com.br/nasp/"> NASP</a> (o Moip informa sua aplica&ccedil;&atilde;o) e por meio da ferramenta API<a href="http://labs.moip.com.br/consultarinstrucao/"> ConsultarInstrucao</a> (a sua aplica&ccedil;&atilde;o consulta o Moip).</p>
<p>Em ambos os casos de notifica&ccedil;&atilde;o quando um pagamento tiver uma classifica&ccedil;&atilde;o de status voc&ecirc; a receber&aacute; como informa&ccedil;&atilde;o adicional especifica do pagamento. </p>
<p>&Eacute; importante ressaltar que a classifica&ccedil;&atilde;o do pagamento &eacute; feita baseada em uma s&eacute;rie de crit&eacute;rios do banco emissor e do pr&oacute;prio Moip e que podem ser aprimoradas de acordo com a evolu&ccedil;&atilde;o das plataformas.</p>
<p>&nbsp;</p>
<h3><strong>NASP</strong></h3>
<p>
Utilizando o NASP (<em>Notifica&ccedil;&atilde;o de altera&ccedil;&atilde;o de status de pagamento</em>) voc&ecirc; receber&aacute; um campo adicional denominado &ldquo;<em>classificacao</em>&rdquo;  que retorna uma mensagem descrevendo a classifica&ccedil;&atilde;o do status recebido.<strong></p>
<p>    Exemplo</strong></p>
<p><div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:620px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">... &nbsp; &nbsp;<br />
classificacao =&gt; Política do banco emissor<br />
...</div></div>
</p>
<h3><strong>Consultar Instru&ccedil;&atilde;o</strong></h3>
<p>
  Utilizando a ferramenta de consultar a instru&ccedil;&atilde;o de pagamento voc&ecirc;   vai receber essa mesma informa&ccedil;&atilde;o como um atributo adicional da tag &ldquo;<em>&lt;Status&gt;</em>&rdquo; denominada &ldquo;<em>Classificacao</em>&rdquo;.<strong></p>
<p>    Exemplo</strong></p>
<p><div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:620px;"><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; ...<br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Status</span> <span style="color: #000066;">Classificacao</span>=<span style="color: #ff0000;">&quot;Política do banco emissor&quot;</span> <span style="color: #000066;">Tipo</span>=<span style="color: #ff0000;">&quot;5&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Cancelado<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Status<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; ...</div></div>
</p>
<p>
</p>
<p><a href="http://labs.moip.com.br/nasp/" data-mce-href="http://labs.moip.com.br/nasp/">Saiba mais sobre o NASP (Notifica&ccedil;&atilde;o de altera&ccedil;&atilde;o de status de pagamento)</a><br />
  <a href="http://labs.moip.com.br/consultarinstrucao/" data-mce-href="http://labs.moip.com.br/consultarinstrucao/">Saiba mais sobre o ConsultarInstrucao (Consulta de instru&ccedil;&atilde;o)</a>
</p>
<p>Aproveitem  mais essa funcionalidade em suas aplica&ccedil;&otilde;es  ;-)</p>
<p>Equipe Moip Labs</p>
<img src="http://feeds.feedburner.com/~r/MoipLabs/~4/BBt4Jb0eToM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://labs.moip.com.br/2012/04/17/classificacao-de-status-de-pagamento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://labs.moip.com.br/2012/04/17/classificacao-de-status-de-pagamento/</feedburner:origLink></item>
		<item>
		<title>Desvendando a API – Parte 8: Adicionais – Frete</title>
		<link>http://feedproxy.google.com/~r/MoipLabs/~3/frEMB-MJwJA/</link>
		<comments>http://labs.moip.com.br/2012/01/19/desvendando-a-api-parte-8-adicionais-frete/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 13:29:03 +0000</pubDate>
		<dc:creator>MoIP Labs</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://labs.moip.com.br/?p=2353</guid>
		<description><![CDATA[Utilizando a API do Frete no MoIP você possui facilidade em sua aplicação do calculo do frete junto ao processamento da compra, por exemplo, frete próprio, correios com encomenda normal, correios com Sedex 10 e outros. Com isso co liente seleciona a forma do frete direto de sua aplicação já adicionando ao valor da compra. A seguir [...]]]></description>
			<content:encoded><![CDATA[<p>Utilizando a API do <em>Frete</em> no MoIP você possui facilidade em sua aplicação do calculo do frete junto ao processamento da compra, por exemplo, frete próprio, correios com encomenda normal, correios com Sedex 10 e outros. Com isso co liente seleciona a forma do frete direto de sua aplicação já adicionando ao valor da compra. A seguir vamos ver um exemplo de cada uma das opções citadas:</p>
<h3>Frete próprio</h3>
<pre class="brush: php; gutter: true">&lt;?php ob_start();
$token = "SEU TOKEN";
$key = "SUA KEY";

$base = $token . ":" . $key;
$auth = base64_encode($base);
$header[] = "Authorization: Basic " . $auth;
$param = "
&lt;EnviarInstrucao&gt;
    &lt;InstrucaoUnica&gt;
        &lt;Razao&gt;Pagamento direto com boleto&lt;/Razao&gt;
        &lt;IdProprio&gt;". rand(1,1000) ."&lt;/IdProprio&gt;
        &lt;Pagador&gt;
            &lt;Nome&gt;Luiz Inácio Lula da Silva&lt;/Nome&gt;
            &lt;Email&gt;presidente@planalto.gov.br&lt;/Email&gt;
            &lt;TelefoneCelular&gt;(61)9999-9999&lt;/TelefoneCelular&gt;
            &lt;Apelido&gt;Lula&lt;/Apelido&gt;
            &lt;Identidade&gt;111.111.111-11&lt;/Identidade&gt;
            &lt;EnderecoCobranca&gt;
                &lt;Logradouro&gt;Praça dos Três Poderes&lt;/Logradouro&gt;
                &lt;Numero&gt;0&lt;/Numero&gt;
                &lt;Complemento&gt;Palácio do Planalto&lt;/Complemento&gt;
                &lt;Bairro&gt;Zona Cívico-Administrativa&lt;/Bairro&gt;
                &lt;Cidade&gt;Brasília&lt;/Cidade&gt;
                &lt;Estado&gt;DF&lt;/Estado&gt;
                &lt;Pais&gt;BRA&lt;/Pais&gt;
                &lt;CEP&gt;70100-000&lt;/CEP&gt;
                &lt;TelefoneFixo&gt;(61)3211-1221&lt;/TelefoneFixo&gt;
            &lt;/EnderecoCobranca&gt;
        &lt;/Pagador&gt;
        &lt;Entrega&gt;
            &lt;Destino&gt;MesmoCobranca&lt;/Destino&gt;
            &lt;CalculoFrete&gt;
                &lt;Tipo&gt;Proprio&lt;/Tipo&gt;
                &lt;ValorFixo&gt;2.30&lt;/ValorFixo&gt;
                &lt;Prazo Tipo=\"Corridos\"&gt;3&lt;/Prazo&gt;
            &lt;/CalculoFrete&gt;
        &lt;/Entrega&gt;
        &lt;PagamentoDireto&gt;
            &lt;Forma&gt;BoletoBancario&lt;/Forma&gt;
        &lt;/PagamentoDireto&gt;
        &lt;Boleto&gt;
            &lt;DiasExpiracao Tipo=\"Corridos\"&gt;5&lt;/DiasExpiracao&gt;
        &lt;/Boleto&gt;
        &lt;Valores&gt;
            &lt;Valor moeda=\"BRL\"&gt;100.00&lt;/Valor&gt;
        &lt;/Valores&gt;
    &lt;/InstrucaoUnica&gt;
&lt;/EnviarInstrucao&gt;";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://desenvolvedor.moip.com.br/sandbox/ws/alpha/EnviarInstrucao/Unica");
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_USERPWD, $user . ":" . $passwd);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
$xml = new SimpleXMLElement($ret);
echo "&lt;pre&gt;";
print_r($xml);
$token = $xml-&gt;Resposta-&gt;Token[0];
$url = 'https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token='.$token;
echo $url;</pre>
<h3>Correios com encomenda normal</h3>
<pre class="brush: php; gutter: true">&lt;?php ob_start();
$token = "SEU TOKEN";
$key = "SUA KEY";

$base = $token . ":" . $key;
$auth = base64_encode($base);
$header[] = "Authorization: Basic " . $auth;
$param = "
&lt;EnviarInstrucao&gt;
    &lt;InstrucaoUnica&gt;
        &lt;Razao&gt;Pagamento direto com boleto&lt;/Razao&gt;
        &lt;IdProprio&gt;". rand(1,1000) ."&lt;/IdProprio&gt;
        &lt;Pagador&gt;
            &lt;Nome&gt;Luiz Inácio Lula da Silva&lt;/Nome&gt;
            &lt;Email&gt;presidente@planalto.gov.br&lt;/Email&gt;
            &lt;TelefoneCelular&gt;(61)9999-9999&lt;/TelefoneCelular&gt;
            &lt;Apelido&gt;Lula&lt;/Apelido&gt;
            &lt;Identidade&gt;111.111.111-11&lt;/Identidade&gt;
            &lt;EnderecoCobranca&gt;
                &lt;Logradouro&gt;Praça dos Três Poderes&lt;/Logradouro&gt;
                &lt;Numero&gt;0&lt;/Numero&gt;
                &lt;Complemento&gt;Palácio do Planalto&lt;/Complemento&gt;
                &lt;Bairro&gt;Zona Cívico-Administrativa&lt;/Bairro&gt;
                &lt;Cidade&gt;Brasília&lt;/Cidade&gt;
                &lt;Estado&gt;DF&lt;/Estado&gt;
                &lt;Pais&gt;BRA&lt;/Pais&gt;
                &lt;CEP&gt;70100-000&lt;/CEP&gt;
                &lt;TelefoneFixo&gt;(61)3211-1221&lt;/TelefoneFixo&gt;
            &lt;/EnderecoCobranca&gt;
        &lt;/Pagador&gt;
        &lt;Entrega&gt;
            &lt;Destino&gt;MesmoCobranca&lt;/Destino&gt;
            &lt;CalculoFrete&gt;
                &lt;Tipo&gt;Correios&lt;/Tipo&gt;
                &lt;Prazo Tipo=\"Corridos\"&gt;3&lt;/Prazo&gt;
                &lt;Correios&gt;
                    &lt;PesoTotal&gt;1.00&lt;/PesoTotal&gt;
                    &lt;FormaEntrega&gt;EncomendaNormal&lt;/FormaEntrega&gt;
                &lt;/Correios&gt;
            &lt;/CalculoFrete&gt;
        &lt;/Entrega&gt;
        &lt;PagamentoDireto&gt;
            &lt;Forma&gt;BoletoBancario&lt;/Forma&gt;
        &lt;/PagamentoDireto&gt;
        &lt;Boleto&gt;
            &lt;DiasExpiracao Tipo=\"Corridos\"&gt;5&lt;/DiasExpiracao&gt;
        &lt;/Boleto&gt;
        &lt;Valores&gt;
            &lt;Valor moeda=\"BRL\"&gt;100.00&lt;/Valor&gt;
        &lt;/Valores&gt;
    &lt;/InstrucaoUnica&gt;
&lt;/EnviarInstrucao&gt;";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://desenvolvedor.moip.com.br/sandbox/ws/alpha/EnviarInstrucao/Unica");
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_USERPWD, $user . ":" . $passwd);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
$xml = new SimpleXMLElement($ret);
echo "&lt;pre&gt;";
print_r($xml);
$token = $xml-&gt;Resposta-&gt;Token[0];
$url = 'https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token='.$token;
echo $url;</pre>
<h3>Correios com Sedex 10</h3>
<pre class="brush: php; gutter: true">&lt;?php ob_start();
$token = "SUA TOKEN";
$key = "SUA KEY";

$base = $token . ":" . $key;
$auth = base64_encode($base);
$header[] = "Authorization: Basic " . $auth;
$param = "
&lt;EnviarInstrucao&gt;
    &lt;InstrucaoUnica&gt;
        &lt;Razao&gt;Pagamento direto com boleto&lt;/Razao&gt;
        &lt;IdProprio&gt;". rand(1,1000) ."&lt;/IdProprio&gt;
        &lt;Pagador&gt;
            &lt;Nome&gt;Luiz Inácio Lula da Silva&lt;/Nome&gt;
            &lt;Email&gt;presidente@planalto.gov.br&lt;/Email&gt;
            &lt;TelefoneCelular&gt;(61)9999-9999&lt;/TelefoneCelular&gt;
            &lt;Apelido&gt;Lula&lt;/Apelido&gt;
            &lt;Identidade&gt;111.111.111-11&lt;/Identidade&gt;
            &lt;EnderecoCobranca&gt;
                &lt;Logradouro&gt;Praça dos Três Poderes&lt;/Logradouro&gt;
                &lt;Numero&gt;0&lt;/Numero&gt;
                &lt;Complemento&gt;Palácio do Planalto&lt;/Complemento&gt;
                &lt;Bairro&gt;Zona Cívico-Administrativa&lt;/Bairro&gt;
                &lt;Cidade&gt;Brasília&lt;/Cidade&gt;
                &lt;Estado&gt;DF&lt;/Estado&gt;
                &lt;Pais&gt;BRA&lt;/Pais&gt;
                &lt;CEP&gt;70100-000&lt;/CEP&gt;
                &lt;TelefoneFixo&gt;(61)3211-1221&lt;/TelefoneFixo&gt;
            &lt;/EnderecoCobranca&gt;
        &lt;/Pagador&gt;
        &lt;Entrega&gt;
            &lt;Destino&gt;MesmoCobranca&lt;/Destino&gt;
            &lt;CalculoFrete&gt;
                &lt;Tipo&gt;Correios&lt;/Tipo&gt;
                &lt;Prazo Tipo=\"Corridos\"&gt;5&lt;/Prazo&gt;
                &lt;Correios&gt;
                    &lt;PesoTotal&gt;1.12&lt;/PesoTotal&gt;
                    &lt;FormaEntrega&gt;Sedex10&lt;/FormaEntrega&gt;
                &lt;/Correios&gt;
            &lt;/CalculoFrete&gt;
        &lt;/Entrega&gt;
        &lt;PagamentoDireto&gt;
            &lt;Forma&gt;BoletoBancario&lt;/Forma&gt;
        &lt;/PagamentoDireto&gt;
        &lt;Boleto&gt;
            &lt;DiasExpiracao Tipo=\"Corridos\"&gt;5&lt;/DiasExpiracao&gt;
        &lt;/Boleto&gt;
        &lt;Valores&gt;
            &lt;Valor moeda=\"BRL\"&gt;100.00&lt;/Valor&gt;
        &lt;/Valores&gt;
    &lt;/InstrucaoUnica&gt;
&lt;/EnviarInstrucao&gt;";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://desenvolvedor.moip.com.br/sandbox/ws/alpha/EnviarInstrucao/Unica");
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_USERPWD, $user . ":" . $passwd);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
$xml = new SimpleXMLElement($ret);
echo "&lt;pre&gt;";
print_r($xml);
$token = $xml-&gt;Resposta-&gt;Token[0];
$url = 'https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token='.$token;
echo $url;</pre>
<p>Confira o resultado abaixo do frete com correios usando encomenda normal:</p>
<p><a href="http://labs.moip.com.br/2012/01/19/desvendando-a-api-parte-8-adicionais-frete/screen-shot-2011-12-16-at-10-28-46-am/" rel="attachment wp-att-2358"><img class="alignnone size-full wp-image-2358" title="Boleto" src="http://labs.moip.com.br/wp-content/uploads/Screen-Shot-2011-12-16-at-10.28.46-AM.png" alt="" width="652" height="683" /></a></p>
<img src="http://feeds.feedburner.com/~r/MoipLabs/~4/frEMB-MJwJA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://labs.moip.com.br/2012/01/19/desvendando-a-api-parte-8-adicionais-frete/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://labs.moip.com.br/2012/01/19/desvendando-a-api-parte-8-adicionais-frete/</feedburner:origLink></item>
		<item>
		<title>Quer trabalhar no Moip? Estamos contratando!</title>
		<link>http://feedproxy.google.com/~r/MoipLabs/~3/om2kpqctHas/</link>
		<comments>http://labs.moip.com.br/2011/12/31/quer-trabalhar-no-moip-estamos-contratando/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 22:09:28 +0000</pubDate>
		<dc:creator>Alan Leal</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://labs.moip.com.br/?p=2376</guid>
		<description><![CDATA[Se você gosta de desafios, dinamismo e de trabalhar num segmento que oferece aprendizado, o Moip tem muito a contribuir com a sua carreira. Procuramos programadores apaixonados por tecnologia e desenvolvimento de software, que queiram aprender e contribuir com o nosso time. Não somos apegados a uma tecnologia / metodologia específica, e procuramos empregá- las [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://www.youtube.com/embed/BLiBfnxamR8" frameborder="0" width="560" height="315"></iframe><br />
Se você gosta de desafios, dinamismo e de trabalhar num segmento que oferece aprendizado, o Moip tem muito a contribuir com a sua carreira.</p>
<p>Procuramos programadores apaixonados por tecnologia e desenvolvimento de software, que queiram aprender e contribuir com o nosso time. Não somos apegados a uma tecnologia / metodologia específica, e procuramos empregá- las em função da necessidade de cada projeto.</p>
<p>Para participar, basta criar um, ou mais projetos seguindo o caso de uso descrito abaixo, escrever um documento especificando como instalar o(s) projeto(s), anexar tudo em um arquivo zip junto com o seu currículo. Envie o zip para o e-mail: relacionamento@labs.moip.com.br.</p>
<p>Acesse <a href="http://labs.moip.com.br/trabalheconosco/">http://labs.moip.com.br/trabalheconosco/</a> e saiba mais.</p>
<img src="http://feeds.feedburner.com/~r/MoipLabs/~4/om2kpqctHas" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://labs.moip.com.br/2011/12/31/quer-trabalhar-no-moip-estamos-contratando/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://labs.moip.com.br/2011/12/31/quer-trabalhar-no-moip-estamos-contratando/</feedburner:origLink></item>
		<item>
		<title>O que é Django?</title>
		<link>http://feedproxy.google.com/~r/MoipLabs/~3/Ywp15FbbTFY/</link>
		<comments>http://labs.moip.com.br/2011/11/03/o-que-e-django/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 12:11:46 +0000</pubDate>
		<dc:creator>MoIP Labs</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://labs.moip.com.br/?p=2233</guid>
		<description><![CDATA[Django é um framework Web para desenvolvimento ágil, escrito em Python, que utiliza o padrão MVC (Model-View-Controller), protegido por uma licença BSD hoje se encontra na versão 1.3.1. O nome Django foi inspirado no músico de jazz Django Reinhardt. Django utiliza o princípio DRY (Don&#8217;t Repeat Yourself), onde faz com que o desenvolvedor aproveite ao [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://labs.moip.com.br/2011/11/03/o-que-e-django/logo_django/" rel="attachment wp-att-2260"><img class="alignnone size-large wp-image-2260" src="http://labs.moip.com.br/wp-content/uploads/logo_django-1024x356.png" alt="logo do Django" width="491" height="171" /></a></p>
<p>Django é um framework Web para desenvolvimento ágil, escrito em Python, que utiliza o padrão MVC (Model-View-Controller), protegido por uma licença BSD hoje se encontra na versão 1.3.1. O nome Django foi inspirado no músico de jazz Django Reinhardt. Django utiliza o princípio DRY (Don&#8217;t Repeat Yourself), onde faz com que o desenvolvedor aproveite ao máximo o código já feito, evitando a repetição.</p>
<p>As principais características do Django são:</p>
<ul>
<li>Mapeamento Objeto-Relacional (ORM): com o ORM do Django você define a modelagem de dados através de classes em Python. Com isso é possível gerar suas tabelas no banco de dados e manipulá-las sem necessidade de utilizar SQL (o que também é possivel);</li>
<li>Interface Administrativa: no Django é possivel gerar automaticamente uma interface para administração para os modelos criados através do ORM;</li>
<li>Formulários: é possível gerar formulários automaticamente através dos modelos de dados;</li>
<li>URLs Elegantes: no Django não há limitações para criação de URLs elegantes e de maneira simples;</li>
<li>Sistema de Templates: o Django tem uma linguagem de &#8221;templates&#8221; poderosa, extensível e amigável. Com ela você pode separar design, conteúdo e código em Python;</li>
<li>Sistema de Cache: o Django possui um sistema de &#8221;cache&#8221; que se integra ao memcached ou em outros frameworks de cache.</li>
<li>Internacionalização: Django tem total suporte para aplicações multi-idioma, deixando você especificar strings de tradução e fornecendo ganchos para funcionalidades específicas do idioma.</li>
</ul>
<p>A instação do Django é bem simples, a maneira mais recomendável é utilizar o pip ou easy_install para facilitar a manutenção nas atualizações:</p>
<pre class="brush: bash; gutter: true">pip:
$ sudo pip install django
easy_install
$ sudo easy_install django</pre>
<p>Após instalado o Django talvez algmas dependências ainda fiquem faltando. Recomenda-se que instale as bibliotecas de Python para suporte a banco de dados de acordo com o banco de dados de deseja utilizar e o docutils para ver as páginas de documentação administrativas do admin.<br />
Feito isso, o desenvolverdo já estará habilitado a criar seu primeiro projeto em Django, para fazer isso basta executar o seguinte comando:</p>
<pre class="brush: bash; gutter: true">$ django-admin.py startproject exemplo</pre>
<p>Agora, com o projeto criado veja como ficou a organização do mesmo:</p>
<pre class="brush: bash; gutter: true">exemplo/
|-- __init__.py
|-- manage.py
|-- settings.py
|-- urls.py</pre>
<p>Então, para iniciar o seu projeto é preciso fazer algumas configurações básicas no projeto.<br />
No arquivo settings.py descomente a linha 7 e insira os seus dados e na linha 14 troque para:</p>
<pre class="brush: python; gutter: true">'ENGINE': 'django.db.backends.sqlite3',</pre>
<p>Nessa modificação estamos dizendo que o banco de dados a ser utilizado pelo projeto será o SQLite. Agora, na linha 15 insira o caminho para o arquivo que irá conter os dados do projeto:</p>
<pre class="brush: python; gutter: true">'NAME':  'exemplo.db',</pre>
<p>Na linha 30, tem a opção de TIME_ZONE, no caso desse exemplo foi alteradad para &#8216;America/Sao_Paulo&#8217;, mude para a de sua preferência. Outra opção, na linha 34, é a de linguagem, nesse exemplo mudamos para &#8216;pt-BR&#8217;, na linha acima tem um link para todos códigos possíveis.<br />
Agora, uma funcionalidade interessante a ser habilitada são as páginas do admin, para proceder a instalação descomente as linhas 119 e 121 do settings.py. Com essas modificações o settings.py esta configurado para o exemplo.<br />
Lembre-se de criar o arquivo do banco de dados:</p>
<pre class="brush: bash; gutter: true">$ touch exemplo.db</pre>
<p>Agora, vamos configurar o arquivo urls.py, basta descomentar as linhas 4, 5, 13 e 16, resultando em:</p>
<pre></pre>
<pre></pre>
<pre class="brush: python; gutter: true">from django.conf.urls.defaults import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'exemplo.views.home', name='home'),
    # url(r'^exemplo/', include('exemplo.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
)</pre>
<p>Agora, com as edições básicas feitas é preciso de fato criar o banco de dados, veja:</p>
<pre></pre>
<pre class="brush: bash; gutter: true">[root@localhost exemplo]# python manage.py syncdb
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'root'):
E-mail address: root@exemplo.com
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
No fixtures found.</pre>
<pre></pre>
<p>Feita todas as configurações devidas é hora de iniciar o projeto, na ocasião desse exemplo o servidor esta localizado na máquina com IP 192.168.1.125 mas pode ser inciado localmente:</p>
<pre></pre>
<pre class="brush: bash; gutter: true">$  python manage.py 192.168.1.125:8000
Validating models...
0 errors found
Django version 1.3.1, using settings 'exemplo.settings'
Development server is running at http://192.168.1.125:8000/
Quit the server with CONTROL-C.</pre>
<pre></pre>
<p>Será possível observar no terminal todo o log HTTP do projeto. Agora, basta ir na url http://192.168.1.125:8000/admin do projeto e autenticar o usuário criado no banco de dados. O login tendo ocorrido com sucesso a página a ser exibida será:</p>
<p><a href="http://labs.moip.com.br/2011/11/03/o-que-e-django/attachment/1/" rel="attachment wp-att-2253"><img class="alignnone size-medium wp-image-2253" src="http://labs.moip.com.br/wp-content/uploads/1-300x204.png" alt="http://192.168.1.125:8000/admin" width="300" height="204" /></a></p>
<p><a href="http://labs.moip.com.br/2011/11/03/o-que-e-django/attachment/2/" rel="attachment wp-att-2256"><img class="alignnone size-medium wp-image-2256" src="http://labs.moip.com.br/wp-content/uploads/2-300x82.png" alt="" width="300" height="82" /></a></p>
<p><a href="http://labs.moip.com.br/2011/11/03/o-que-e-django/attachment/3/" rel="attachment wp-att-2257"><img class="alignnone size-medium wp-image-2257" src="http://labs.moip.com.br/wp-content/uploads/3-300x109.png" alt="http://192.168.1.125:8000/admin/doc" width="300" height="109" /></a></p>
<p>Como foi possível ver nesse artigo é bem simples começar um projeto em Django.<br />
Por hora, finalizamos esse artigo e em próximos artigo veremos como dar continuidade a esse projeto.</p>
<p>Links:<br />
Django: www.djangoproject.com<br />
Django Brasil: www.djangobrasil.org<br />
Django Book: www.djangobook.com<br />
Django Videos: www.djangovideos.com</p>
<img src="http://feeds.feedburner.com/~r/MoipLabs/~4/Ywp15FbbTFY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://labs.moip.com.br/2011/11/03/o-que-e-django/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://labs.moip.com.br/2011/11/03/o-que-e-django/</feedburner:origLink></item>
		<item>
		<title>MySQL e PHP (Recebendo NASP MoIP e persistindo)</title>
		<link>http://feedproxy.google.com/~r/MoipLabs/~3/zMMy3A7FhmM/</link>
		<comments>http://labs.moip.com.br/2011/10/26/mysql-e-php-recebendo-nasp-moip-e-persistindo/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 15:00:15 +0000</pubDate>
		<dc:creator>MoIP Labs</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://labs.moip.com.br/?p=2230</guid>
		<description />
			<content:encoded><![CDATA[<object data="http://www.youtube.com/v/5HVSNvFZGdk?version=3&rel=0&fs=1&showinfo=0" type="application/x-shockwave-flash" width="604" height="370">
	<param name="movie" value="http://www.youtube.com/v/5HVSNvFZGdk?version=3&rel=0&fs=1&showinfo=0"></param>
	<param name="wmode" value="opaque"></param>
	<param name="allowFullScreen" value="true"></param>
	<param name="allowScriptAccess" value="always"></param>
</object>
<img src="http://feeds.feedburner.com/~r/MoipLabs/~4/zMMy3A7FhmM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://labs.moip.com.br/2011/10/26/mysql-e-php-recebendo-nasp-moip-e-persistindo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://labs.moip.com.br/2011/10/26/mysql-e-php-recebendo-nasp-moip-e-persistindo/</feedburner:origLink></item>
		<item>
		<title>Exemplos criando base de dados com informações de NASP</title>
		<link>http://feedproxy.google.com/~r/MoipLabs/~3/VAkfCzl5mKk/</link>
		<comments>http://labs.moip.com.br/2011/10/18/exemplos-criando-base-de-dados-com-informacoes-de-nasp/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 13:02:51 +0000</pubDate>
		<dc:creator>MoIP Labs</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://labs.moip.com.br/?p=2187</guid>
		<description />
			<content:encoded><![CDATA[<object data="http://www.youtube.com/v/BuPBRBgBijE?version=3&rel=0&fs=1&showinfo=0" type="application/x-shockwave-flash" width="604" height="370">
	<param name="movie" value="http://www.youtube.com/v/BuPBRBgBijE?version=3&rel=0&fs=1&showinfo=0"></param>
	<param name="wmode" value="opaque"></param>
	<param name="allowFullScreen" value="true"></param>
	<param name="allowScriptAccess" value="always"></param>
</object>
<img src="http://feeds.feedburner.com/~r/MoipLabs/~4/VAkfCzl5mKk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://labs.moip.com.br/2011/10/18/exemplos-criando-base-de-dados-com-informacoes-de-nasp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://labs.moip.com.br/2011/10/18/exemplos-criando-base-de-dados-com-informacoes-de-nasp/</feedburner:origLink></item>
		<item>
		<title>Organizze &amp; MoIP</title>
		<link>http://feedproxy.google.com/~r/MoipLabs/~3/CB-p5hh46P0/</link>
		<comments>http://labs.moip.com.br/2011/10/17/organizze-moip/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 22:04:46 +0000</pubDate>
		<dc:creator>Alan Leal</dc:creator>
				<category><![CDATA[Cases]]></category>

		<guid isPermaLink="false">http://labs.moip.com.br/?p=2177</guid>
		<description><![CDATA[O Organizze é um software de controle financeiro online. Nosso modelo de comercialização é o Freemium. Possuímos uma versão grátis e uma versão paga. A proposta do Organizze é ser um controle financeiro simples, fácil de usar e seguro. O MoIP entrou como grande parceiro do Organizze por ser o único serviço de pagamento digital [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://www.organizze.com.br">Organizze</a> é um software de controle financeiro online. Nosso modelo de comercialização é o Freemium. Possuímos uma versão grátis e uma versão paga. A proposta do <a href="http://www.organizze.com.br">Organizze</a> é ser um controle financeiro simples, fácil de usar e seguro. O MoIP entrou como grande parceiro do <a href="http://www.organizze.com.br">Organizze</a> por ser o único serviço de pagamento digital que nos permitiu oferecer a solução se adequava a nossa proposta. Queríamos que todo o processo de pagamento fosse simples e totalmente integrado ao nosso ambiente, sem necessidade de redirecionar o usuário à uma página de pagamentos de terceiros. </p>
<p>Atualmente utiliza a tecnologia do MoIP &#8220;Pagamento Direto&#8221; para fazer toda a integração via web-service. Aceitamos todos os cartões de créditos e boleto bancário.</p>
<p>&#8220;Nossa experiência com o pessoal do suporte também tem sido excelente. O MoIP realmente foi um facilitador para o nosso negócio.&#8221;</p>
<p>Luis Felipe Luz<br />
Co-fundador Organizze<br />
<a href="http://www.organizze.com.br">www.organizze.com.br</a></p>
<img src="http://feeds.feedburner.com/~r/MoipLabs/~4/CB-p5hh46P0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://labs.moip.com.br/2011/10/17/organizze-moip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://labs.moip.com.br/2011/10/17/organizze-moip/</feedburner:origLink></item>
		<item>
		<title>BDD com RSpec</title>
		<link>http://feedproxy.google.com/~r/MoipLabs/~3/fZ6LWiZMXAM/</link>
		<comments>http://labs.moip.com.br/2011/10/17/bdd-com-rspec/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 19:04:10 +0000</pubDate>
		<dc:creator>MoIP Labs</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://labs.moip.com.br/?p=2108</guid>
		<description><![CDATA[Uma das boas práticas de desenvolvimento conhecidas hoje com a advento do desenvolvimento ágil é o Behavior Driven Development (BDD). Uma das formas de trabalhar com essa técnica é com o uso do RSpec. Neste artigo, será visto como utilizar BDD usando o RSpec, porém vamos ver mais sobre ambos individualmente. Behavior Driven Development O [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das boas práticas de desenvolvimento conhecidas hoje com a advento do desenvolvimento ágil é o Behavior Driven Development (<a href="http://en.wikipedia.org/wiki/Behavior_driven_development">BDD</a>). Uma das formas de trabalhar com essa técnica é com o uso do RSpec. Neste artigo, será visto como utilizar BDD usando o <a href="http://en.wikipedia.org/wiki/RSpec">RSpec</a>, porém vamos ver mais sobre ambos individualmente.</p>
<h3>Behavior Driven Development</h3>
<p>O BDD é uma técnica de desenvolvimento ágil que busca a maior colaboração entre desenvolvedores, gerente de projetos, clientes e outros membros relacionados ao projeto. Criada em 2003 como resposta à Test Driven Development (TDD) e tem se expandido nos últimos tempos. O foco é automatizar testes e prover um feedback rápido e criando testes para avaliar comportamentos da aplicação ou unidades do código.</p>
<h3>RSpec</h3>
<p>O RSpec é um framework para BDD feito para a linguagem de programação Ruby.  Considerando que o Ruby já tenha sido instalado devidamente para instalar o RSpec basta executar:</p>
<pre class="brush: bash; gutter: false">$ sudo gem install rspec</pre>
<p>Verifique se o comando rspec já esta presente no sistema após a instalação.</p>
<h3>BDD com RSpec</h3>
<p>Voltando ao foco do artigo agora vamos mostrar um exempĺo de desenvolvimento utilizando ambos.</p>
<p>O problema a ser resolvido será o “Nomes de Autores de Obras Bibliográficas” retirado do <a href="http://dojopuzzles.com/problemas/exibe/nomes-de-autores-de-obras-bibliograficas/">Dojo Puzzles</a>, fonte comum de problemas de praticantes de Coding Dojo.</p>
<p>Agora, vamos preparar a organização do projeto para resolver o problema. O RSpec possui um padrão não-obrigatório de organização de diretórios e vamos seguir eles aqui, veja como fica:</p>
<pre class="brush: bash; gutter: false">$ mkdir author
$ cd author/
$ mkdir lib
$ mkdir spec
$ touch lib/Author.rb
$ touch spec/Author_spec.rb</pre>
<p>Com os diretórios e arquivos criados temos a base do projeto pronto. Perceba que em “author/lib” ficará a classe foco de testes e em “author/spec” os testes, é obrigatório o uso do “_spec” no nome do arquivo de teste.</p>
<p>Durante o desenvolvimento do projeto espera-se que os desenvolvedores escrevam gradativamente os testes e criem implementações que resolvam os mesmos até que todo escopo do projeto esteja resolvido. Para simplificar o artigo vamos ver agora um exemplo de teste falhando.</p>
<p>Arquivo Author.rb</p>
<pre class="brush: ruby; gutter: true">#coding: utf-8
class Author
    attr_accessor :names

    def name_for_book
    end

end</pre>
<p>Arquivo Author_spec.rb:</p>
<pre class="brush: ruby; gutter: true">#coding: utf-8
require “Author”

describe Author do

    it ‘deveria retorna MENDES, Almir’ do
        author = Author.new(["Almir Mendes"])
        author.name_for_book.should eql([ "MENDES, Almir" ])
    end

end</pre>
<p>Rodando o teste:</p>
<pre class="brush: bash; gutter: false">$ rspec specF
Failures:
1) Author deveria retorna MENDES, Almir
Failure/Error: author.name_for_book.should eql([ "MENDES, Almir" ]) expected ["MENDES, Almir"] got nil (compared using eql?)
# ./spec/Author_spec.rb:9:in `block (2 levels) in ‘
Finished in 0.00058 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/Author_spec.rb:7 # Author deveria retorna MENDES, Almir</pre>
<p>Agora, vamos mostrar uma solução para o problema.<br />
Arquivo Author.rb:</p>
<pre class="brush: ruby; gutter: true"># coding: utf-8

class Author
    attr_accessor :names

    def initialize(names=[])
        @names           = names
        @names_especials = ["Neto", "Filho", "Sobrinho", "Neta", "Filha",
                            "Sobrinha", "Junior"]
        @prepositions    = ["da", "de", "do", "das", "dos"]
    end

    def name_for_book
        res = []
        @names.each do |name|
            name_tokens = name.split(" ")
            if name_tokens.size &gt; 1
                surname = name_tokens.delete_at(name_tokens.size - 1)
                if @names_especials.include?(surname.unicode_capitalize) and
                   name_tokens.size &gt; 1 and
                   not @prepositions.include?(name_tokens.last)
                   last_name = name_tokens.delete_at(name_tokens.size - 1)
                   res &lt;&lt; last_name.unicode_upcase + " " +
                          surname.unicode_upcase + ", " +
                          capitalize_name(name_tokens).join(" ")
                else
                    res &lt;&lt; surname.unicode_upcase + ", " +
                           capitalize_name( name_tokens ).join(" ")
                end
            else
                res &lt;&lt; name_tokens.join.upcase
            end
        end

        res
    end

    def capitalize_name(names)
        names.map do |n|
            @prepositions.include?(n.downcase) ? n.downcase : n.unicode_capitalize
        end
    end

end

class String
    def unicode_upcase
        s = ""
        char_map = {"á" =&gt; "Á", "à" =&gt; "À", "â" =&gt; "Â", "ã" =&gt; "Ã", "ç" =&gt; "Ç",
                    "é" =&gt; "É", "è" =&gt; "È", "í" =&gt; "Í", "ó" =&gt; "Ó", "ô" =&gt; "Ô",
                    "ú" =&gt; "Ú"}
        self.each_char do |c|
            if char_map.include? c
                s += char_map[c]
            else
                s += c.upcase
            end
        end

        s
    end

    def unicode_capitalize
        s = self.downcase
        char_map = {"á" =&gt; "Á", "à" =&gt; "À", "â" =&gt; "Â", "ã" =&gt; "Ã", "ç" =&gt; "Ç",
                    "é" =&gt; "É", "è" =&gt; "È", "í" =&gt; "Í", "ó" =&gt; "Ó", "ô" =&gt; "Ô",
                    "ú" =&gt; "Ú"}
        if char_map.include? s[0]
            s[0] = char_map[s[0]]
        else
            s.capitalize!
        end

        s
    end

end</pre>
<p>Arquivo Author_spec.rb:</p>
<pre class="brush: ruby; gutter: true">#coding: utf-8

require "Author"

describe Author do

    it 'deveria retorna MENDES, Almir' do
        author = Author.new(["Almir Mendes"])
        author.name_for_book.should eql([ "MENDES, Almir" ])
    end

    it "deveria retorna VALLE, Uriel Juliatti" do
        author = Author.new(["Uriel Juliatti Valle"])
        author.name_for_book.should eql([ "VALLE, Uriel Juliatti" ])
    end

    it "deveria retorna ANDREIA" do
        author = Author.new(["Andreia"])
        author.name_for_book.should eql([ "ANDREIA" ])
    end

    it "deveria retornar MENDES, Almir e TAGLIATI, Andre" do
        author = Author.new(["Almir Mendes","Andre Tagliati"])
        author.name_for_book.should eql(["MENDES, Almir","TAGLIATI, Andre"])
    end

    it 'deveria retorna "MENDES NETO, Almir"' do
        author = Author.new(["Almir Mendes Neto"])
        author.name_for_book.should eql(["MENDES NETO, Almir"])
    end

    it 'deveria retorna "SYMEONIDIS JUNIOR, Petros"' do
        author = Author.new(["Petros Symeonidis Junior"])
        author.name_for_book.should eql(["SYMEONIDIS JUNIOR, Petros"])
    end

    it 'deveria retorna "JUNIOR, Petros"' do
        author = Author.new(["Petros Junior"])
        author.name_for_book.should eql(["JUNIOR, Petros"])
    end

    it 'deveria retornar "MENDES, Andreia de"' do
        author = Author.new(["ANDREIA de MENDES"])
        author.name_for_book.should eql(["MENDES, Andreia de"])
    end

    it 'deveria retornar "MENDES, Ághata de"' do
        author = Author.new(["ághata De MENDES"])
        author.name_for_book.should eql(["MENDES, Ághata de"])
    end

    it 'deveria retornar "JUNIOR, Uriel de"' do
        author = Author.new(["Uriel de Junior"])
        author.name_for_book.should eql(["JUNIOR, Uriel de"])
    end

    it 'deveria retornar "NETO, Silva "' do
        author = Author.new(["silva neto"])
        author.name_for_book.should eql(["NETO, Silva"])
    end

    it 'deveria retornar "NETO JUNIOR, Silva dos Santos"' do
        author = Author.new(["silva dos santos neto junior"])
        author.name_for_book.should eql(["NETO JUNIOR, Silva dos Santos"])
    end

    it 'deveria retornar "MC\'LOUD, John"' do
        author = Author.new(["John Mc'loud"])
        author.name_for_book.should eql(["MC'LOUD, John"])
    end

end</pre>
<p>Rodando o teste:</p>
<pre class="brush: bash; gutter: true">$ rspec spec.............
Finished in 0.00402 seconds
13 examples, 0 failures</pre>
<p>Agora é praticar, Have Fun!</p>
<img src="http://feeds.feedburner.com/~r/MoipLabs/~4/fZ6LWiZMXAM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://labs.moip.com.br/2011/10/17/bdd-com-rspec/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://labs.moip.com.br/2011/10/17/bdd-com-rspec/</feedburner:origLink></item>
		<item>
		<title>Desvendando a API – Part. 6 : Adicionais – Mensagens e Configuração de Boleto</title>
		<link>http://feedproxy.google.com/~r/MoipLabs/~3/9EL-XaAvu5I/</link>
		<comments>http://labs.moip.com.br/2011/10/03/desvendando-a-api-part-6-adicionais-mensagens-e-configuracao-de-boleto/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 14:22:27 +0000</pubDate>
		<dc:creator>MoIP Labs</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://labs.moip.com.br/?p=2095</guid>
		<description><![CDATA[Utilizando a API MOIP você possui flexibilidade em sua aplicação, no caso de pagamentos por boleto bancário é possível definir a quantidade de dias para vencimento ou uma data fixa para vencimento do mesmo, além de poder informar instruções e um logotipo personalizado que serão visualizadas por seus clientes ao gerarem um boleto. Utilizando o [...]]]></description>
			<content:encoded><![CDATA[<p>Utilizando a API MOIP você possui flexibilidade em sua aplicação, no caso de pagamentos por boleto bancário é possível definir a quantidade de dias para vencimento ou uma data fixa para vencimento do mesmo, além de poder informar instruções e um logotipo personalizado que serão visualizadas por seus clientes ao gerarem um boleto.</p>
<p>Utilizando o parâmetro DiasExpiracao em sua aplicação será possível estipular a quantidade de dias desejados para expiração do boleto, para isso é necessário informar os valores Corridos ou Uteis que correspondem a dias corridos ou dias úteis, conforme exemplo:</p>
<p>Código HTML:</p>
<div>
<pre class="brush: html; gutter: true">      &lt;Boleto&gt;
         &lt;DiasExpiracao Tipo="Corridos"&gt;7&lt;/DiasExpiracao&gt;
      &lt;/Boleto&gt;</pre>
</div>
<p>Repare que o parâmetro recebe o valor Corridos para definir que o tipo de contagem de dias para vencimento do boleto, no exemplo anterior são 7 dias corridos.</p>
<p>Invés de estipular uma quantidade de dias você também pode fixar uma data fixa para que ocorra o vencimento do boleto utilizando o parâmetro DataVencimento, seguindo exemplo:</p>
<p>Código HTML:</p>
<pre class="brush: html; gutter: true">      &lt;Boleto&gt;
         &lt;DataVencimento&gt;2011-04-06T12:01:48.703-02:00&lt;/DataVencimento&gt;
      &lt;/Boleto&gt;</pre>
<p>Ressaltando que o parâmetro recebe um valor em formato dateTime, onde deve ser estipulado conforme exemplo anterior. Para maiores informações orientamos que acesse o seguinte artigo:<br />
<a href="http://labs.moip.com.br/forum/showthread.php?17-lt-DataVencimento-gt" target="_blank">http://labs.moip.com.br/forum/showthread.php?17-lt-DataVencimento-gt</a></p>
<p>Caso os dois parâmetros sejam enviados (DiasExpiracao e DataVencimento), a data de vencimento do boleto será calculada a partir do DiasExpiracao. Caso a data calculada supere a DataVencimento, a DataVencimento é usada no Boleto.</p>
<p>Você também poderá informar o parâmetro Instrucao que exibirá o valor atribuído a mesma no boleto bancário, sendo que é possível a utilização de três parâmetros com a mesma funcionalidade, no caso Instrucao1, Instrucao2 e Instrucao3.</p>
<p>Código HTML:</p>
<pre class="brush: html; gutter: true">      &lt;Boleto&gt;
         &lt;Instrucao1&gt;Primeira instrução de pagamento do boleto bancário&lt;/Instrucao1&gt;
         &lt;Instrucao2&gt;Segundo teste de instrução&lt;/Instrucao2&gt;
         &lt;Instrucao3&gt;Testando terceira instrução&lt;/Instrucao3&gt;
      &lt;/Boleto&gt;</pre>
<p>As informações inseridas no parâmetro em questão deve possuir o formato String e possuir no máximo 63 caracteres.</p>
<p>Além das informações em questão você poderá inserir um logotipo personalizado em seus boletos bancários, para efetuar o procedimento em questão basta utilizar o parâmetro URLLogo.</p>
<p>Código HTML:</p>
<pre class="brush: html; gutter: true">      &lt;Boleto&gt;
         &lt;URLLogo&gt;https://desenvolvedor.moip.com.br/sandbox/imgs/logo_moip.gif&lt;/URLLogo&gt;
      &lt;/Boleto&gt;</pre>
<p>No parâmetro você deverá informar a URL onde a imagem de seu logo encontra-se, sendo que a imagem deverá possuir largura de 75 pixels e altura de 40 pixels. Imagens maiores ou menores que o tamanho citado serão automaticamente redimensionadas.</p>
<p>Segue instrução única utilizando todos os parâmetros abordados no tópico:</p>
<p>Utilizando o parâmetro DiasExpiracao :</p>
<p>Código HTML:</p>
<pre class="brush: xml; gutter: true">&lt;EnviarInstrucao&gt;
 &lt;InstrucaoUnica&gt;
 &lt;Razao&gt;MoIP Labs - Boleto Bancário&lt;/Razao&gt;
      	&lt;Valores&gt;
         &lt;Valor moeda="BRL"&gt;41&lt;/Valor&gt;
	&lt;/Valores&gt;
      	&lt;IdProprio&gt;MoIP Labs&lt;/IdProprio&gt;
       		&lt;FormasPagamento&gt;
		&lt;FormaPagamento&gt;BoletoBancario&lt;/FormaPagamento&gt;
		&lt;/FormasPagamento&gt;
	      	&lt;Boleto&gt;
		&lt;DiasExpiracao Tipo="Corridos"&gt;7&lt;/DiasExpiracao&gt;
		&lt;Instrucao1&gt;Primeira instrução de pagamento do boleto bancário&lt;/Instrucao1&gt;
		&lt;Instrucao2&gt;Segundo teste de instrução&lt;/Instrucao2&gt;
		&lt;Instrucao3&gt;Testando terceira instrução&lt;/Instrucao3&gt;
		&lt;URLLogo&gt;https://desenvolvedor.moip.com.br/sandbox/imgs/logo_moip.gif&lt;/URLLogo&gt;
		&lt;/Boleto&gt;
	&lt;/InstrucaoUnica&gt;
&lt;/EnviarInstrucao&gt;</pre>
<p>Utilizando o parâmetro DataVencimento:</p>
<p>Código HTML:</p>
<pre class="brush: xml; gutter: true">&lt;EnviarInstrucao&gt;
 &lt;InstrucaoUnica&gt;
 &lt;Razao&gt;MoIP Labs - Boleto Bancário&lt;/Razao&gt;
      	&lt;Valores&gt;
         	&lt;Valor moeda="BRL"&gt;41&lt;/Valor&gt;
	&lt;/Valores&gt;
      	&lt;IdProprio&gt;MoIP Labs&lt;/IdProprio&gt;
       	&lt;FormasPagamento&gt;
		&lt;FormaPagamento&gt;BoletoBancario&lt;/FormaPagamento&gt;
        &lt;/FormasPagamento&gt;
	&lt;Boleto&gt;
	&lt;DataVencimento&gt;2020-04-06T12:01:48.703-02:00&lt;/DataVencimento&gt;
	&lt;Instrucao1&gt;Primeira instrução de pagamento do boleto bancário&lt;/Instrucao1&gt;
	&lt;Instrucao2&gt;Segundo teste de instrução&lt;/Instrucao2&gt;
	&lt;Instrucao3&gt;Testando terceira instrução&lt;/Instrucao3&gt;
	&lt;URLLogo&gt;https://desenvolvedor.moip.com.br/sandbox/imgs/logo_moip.gif&lt;/URLLogo&gt;
	&lt;/Boleto&gt;
	&lt;/InstrucaoUnica&gt;
&lt;/EnviarInstrucao&gt;</pre>
<p>Enjoy!!!</p>
<p>P.S. Esse artigo foi originalmente escrito por Fernando Feitosa (Integração MoIP)</p>
<img src="http://feeds.feedburner.com/~r/MoipLabs/~4/9EL-XaAvu5I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://labs.moip.com.br/2011/10/03/desvendando-a-api-part-6-adicionais-mensagens-e-configuracao-de-boleto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://labs.moip.com.br/2011/10/03/desvendando-a-api-part-6-adicionais-mensagens-e-configuracao-de-boleto/</feedburner:origLink></item>
	</channel>
</rss>

