payment api (jsr 229)

48
JOSÉ ANDRÉ HENRIQUES LUIZ TIAGO OLIVEIRA RAFAEL ROCHA RICARDO DAMASCENO Mobile Payment API JSR - 229

Upload: luiz-oliveira

Post on 07-Jun-2015

635 views

Category:

Technology


1 download

DESCRIPTION

Trabalho de Payment API (JSR 229) da aula de Java2ME da especialização em Tecnologias de Desenvolvimento de Aplicações Móveis (TECDAM) do CESAR.Grupo:- JOSÉ ANDRÉ HENRIQUES- LUIZ TIAGO OLIVEIRA- RAFAEL ROCHA- RICARDO DAMASCENO

TRANSCRIPT

Page 1: Payment API (JSR 229)

JOSÉ ANDRÉ HENRIQUESLUIZ TIAGO OLIVEIRA

RAFAEL ROCHARICARDO DAMASCENO

Mobile Payment APIJSR - 229

Page 2: Payment API (JSR 229)

Mobile Payment API

Roteiro1. Histórico e literatura relacionada2. Estado da Arte3. Escopo e Requisitos4. Arquitetura5. Comunicação6. Pacote7. Provisionamento de Dados8. Segurança9. Adapters10. Conclusão11. Bibliografia

Page 3: Payment API (JSR 229)

Histórico

01/04/2004 Draft inicialReleases (principais adds)

abril/2004 suporte a localização, Pay-Debug-DemoMode, capítulo de segurança, redefinição formato SMS, etcmaio/2004 novos métodos para TransactionRecordssetembro/2004 removeu métodos gets, mudou TransactionRecord de class para interface, registro na IANA, publicação do Draftnovembro/2004 atualizou UML, formato SMS livrejunho/2005 Draft final proposto

30/06/2005 release final

Page 4: Payment API (JSR 229)

Estado da Arte

Consolidado em países como Japão, Estados Unidos, FrançaMac Donald’s – JapãoMoneo - França

Page 5: Payment API (JSR 229)

Estado da Arte

MobiPay – EspanhaJoint Venture entre todas as operadoras móveis e 80% dos bancos

União de bancos e operadoras de telefonia celularpagamento de taxi e transporte urbanocinemasfaturasdoaçõesetc

Page 6: Payment API (JSR 229)

Estado da Arte

PayPass – MasterCard e CitiBank (imagem)uso em estações de metrô

Chiltern RailWays(trens): tíquetes através de celularesBancos

Page 7: Payment API (JSR 229)

Estado da Arte

BrasilMobility Pass:

gerenciamento de despesas de taxi em ambiente corporativosoutros serviços

Oi PagooCartão de crédito via telefone

M-Ticket Cliente Claro e Visa podem comprar entradas de cinema da rede Cinemark em São Paulo (transmissão do código de barras após pagamento) – usa PPSMS

Page 8: Payment API (JSR 229)

Mobile Payment API

Literatura RelacionadaEspecificação Java.LangEspecificação JVMJSR-30, JSR-68, JSR-118, JSR-228

Payment API Expert Group – PAPI-EGLíder da especificação – Jean Yves Bitterlich (Siemens)Outros representates: Sony, Symbiam, Nokya, T-Mobile, Aplix, Mtsushita Eletric, etc

Page 9: Payment API (JSR 229)

Escopo e Requisitos

EscopoDefinir uma API genérica para iniciativas de “PaymentTransaction” de maneira segura e transparente Definir uma sintaxe de descrição de dados de pagamento para suportar diferentes “Adapters”

Page 10: Payment API (JSR 229)

Escopo e Requisitos

EscopoPermitir que desenvolvedores construam aplicações com controle de produtos e serviços precificados e passíveis de pagamentoPortanto, inclui métodos para:

Requisitar transações de pagamentoRequisitar gerenciamento de preços para produtos e serviçosDisponibilizar serviços de pagamento móvel

Page 11: Payment API (JSR 229)

Escopo e Requisitos

RequisitosA Payment API é um pacote opcional que roda sob:

CLDCMIDP ou IMP

Não é uma especificação para Aplicações, mas para PaymentModule-PM e Payment Adapaters-PA.

implica que PM e PA podem adicionar outros requisitos fora do escopo dessa especificação• Ex: PPSMS usam JSR-120 e JSR-205

Page 12: Payment API (JSR 229)

Escopo e Requisitos

RequisitosMIDP x IMP

MIDP oferece interface com o usuárioIMP não oferece interface com o usuário

ObservaçõesNão determina método de pagamentoAPI extras dependem da forma de pagamento

Premium-Price SMS (PPSMS) JapãoVodafon e Cingular possuem SMS Center(SMSC)Wireless API

Tipos de comunicaçãoSMS – Short Message ServiceNFC – Near Field Communication

Page 13: Payment API (JSR 229)

Arquitetura

A figura mostra os componentes do lado do terminal em uma transação de pagamento

Page 14: Payment API (JSR 229)

ArquiteturaPanorama funcional e de componentes (EN)

Page 15: Payment API (JSR 229)

ArquiteturaPanorama funcional e de componentes (PT)

Page 16: Payment API (JSR 229)

Arquitetura

AtoresApplication: lógica do negocio, recursos da API, pode persistir dados

prover dados no arquivo JAR-Manifest que são injetados pelo comerciante em tempo de deploy

Payment Module: gerenciar um ou mais Adapters, interagir com o usuário final quando necessário, interage com o Adapter, faz a intermediação dos dados provisionados

Payment Adapter: implementa a lógica para processar um pagamento baseado nas requisições do Payment Module, suporta o envio do Payload (dados do pagamento), adota protocolo de comunicação

Page 17: Payment API (JSR 229)

Arquitetura

AtoresImplementer: desenvolvedor que implementa o módulo de pagamento e ou adaptador de pagamento, em conformidade com a JSR-229Payment Service Provider - PSP: provê informações ao comerciante, dependendo do tipo de pagamento também responde pela confirmação do pagamentoPrice Manager: fixa, atualiza e informa preços aos PSPApplication Provider/Merchant: Homologador e Provedor de aplicações baseada em PAPI

Tem relacionamento com o Price ManagerApplication Developer: Implementa os recursos da JSR-229

Tem relacionamento com o comerciante(merchant)

Page 18: Payment API (JSR 229)

Arquitetura

Relacionamento de ConfiançaUsuários finais confiam no módulo de pagamento e nos adaptadores quanto ao sigilo das suas informaçõesDesenvolvedores confiam nos provedores de aplicações e nos fabricantes quanto a não alteração das suas implementaçõesO Provedor de APP confia no gerenciador de preçosOs PSPs confiam nos fabricantes quanto aos terminais seguros e compatíveisOs fabricantes confiam nas implementações dos adaptadores

Page 19: Payment API (JSR 229)

Arquitetura

ResponsabilidadesApplication: gerenciar seu estado internoPayment Module:

responsabilidade = funcionalidades providas e não acessíveis diretamente pela APPProver mapeamento JAR-Manifest Adapter• dados de um APP não devem ser acessados por outra APPSelecionar Métodos• oferecer ao usuário uma forma de selecionar o método desejado• em MIDP isso é simples• em IMP não existe mais de um métodoHistórico das transaçõesInteração de apresentação de erros

Page 20: Payment API (JSR 229)

Arquitetura

ResponsabilidadesPayment Module: (continuação...)

Atualização de preços e dados

Page 21: Payment API (JSR 229)

Arquitetura

ResponsabilidadesPayment Adapter:

Encaminhar carga de pagamentos• adota uma carga de até 132 bytes

Prover autenticação de pagamentoInteração de apresentação de erros

Page 22: Payment API (JSR 229)

Pacote

javax.microedition.payment.

Page 23: Payment API (JSR 229)

PacoteDesign

Page 24: Payment API (JSR 229)

Pacote

– Interface TransactionListener

• recebe notificação de registros de transações geradas pelo PM e por conseguinte processadas

• pressupõe que o PM esteja apto a processar uma transação– dados provisionados corretamente

• Método processed() recebe um parâmetro– Registro que mantém o estado da transação

» SUCCESSFUL, FAILED, REJECTED– O registro é identificado pelo ID retornado pelo método

PROCESS() que disparou o início da transação– O registro contém:

» featureID» Estado final» TimeStamp

Page 25: Payment API (JSR 229)

Mobile Payment API

Interface TransactionRecord• Cada transação é representada por um objeto que

implementa esta interface

Page 26: Payment API (JSR 229)

Pacote

Classe TransactionModule - TM• Representa a ligação entre a APP e o PM• Cada chamada do método PROCESS() retorna imediatamente

(assíncrono)

Page 27: Payment API (JSR 229)

Pacote

• Construtor – instancia um objeto TM e verifica se as informações provisionadas estão corretas– parâmetro – o próprio MIDLet ou IMLet

• Métodos:– SetListener() define o listener para eventos assíncronos – Process() tem duas assinaturas

• inicia uma transação para um recurso identificado pelo featuredID configurando no JAR/JAD

• pode gerar exceções• se iniciado, o PM notificará a APP através do listener

quando a transação for encerrada• o listener tem que ser definido antes de chamar esse

método

Page 28: Payment API (JSR 229)

Pacote

Membros da Classe TransactionModule (continuação..)

– Process() tem duas assinaturas• ao chamar esse método o PM deve interagir com o usuário

apresentando os dados das features bem como datas do provisionamento

• deve pedir confirmação e seleção de método(adapter)• Parâmetros:

– FeatureID, featureTitle, featureDescription– payload – vetor de bytes contendo dados – ex: code activation

de um jogo (pode gerar TransactionPayloadException)• Retorno - ID positivo e único• Exceções

– TransactionModuleException– TransactionListenerException– TransactionFeatureException

Page 29: Payment API (JSR 229)

Pacote

Membros da Classe TransactionModule (continuação..)

– getPastTransactions(int max) • retorna um vetor de objetos TransactionRecord• o tamanho do vetor é limitado pelo parâmetro max• ordena em ordem crescente• max = 0 nada é retornado

– deliverMissedTransactions() • solicita ao PM para gerar todas as transações perdidas na

interface listener PROCESSED()• não gera duplicida quando chamado mais de uma vez

Page 30: Payment API (JSR 229)

Provisionamento de dados

Dados são entregues como parte do JAR-ManifestOutros dados podem ser providos pelo JADO MIDLet deve proteger o provisionamento através de assinatura do JAR

para facilitar o desenvolvimento o modo DEBUG dispensa a assinatura

Page 31: Payment API (JSR 229)

Provisionamento de dados

TagMandatório /

Opcional DescriçãoPay-Version M Versão do JAR-Manifest

Pay-Adapters M Adapters registrados. Pode ser uma lista separada por vírgula

Pay-Debug-DemoMode O Valor boleano e se true habilita o modo debug

Pay-Debug- (outros) O Habilita debug específico para ser simular a falha

Arquivo JAD e tags

JAD

Page 32: Payment API (JSR 229)

Provisionamento de dados

TagMandatório /

Opcional DescriçãoPay-Version M Versão do JAR-Manifest

Pay-Update-Stamp M Data do último provisionamento

Pay-Update-URL M URL que aponta para a última versão dos dados de provisionamento

Pay-Cache O Especifica se vai usar cache ou não. Valores possíveis:

[yes|no|<Expiration-Date>].Pay-Providers M Lista de provedores suportados

Pay-feature-<n> M Representa a feature configurada para o adapter - <n> é um número sequencialsem lacunas e começando de ZERO

Arquivo JAR-Manifest e tags

JAR-Manifest

Page 33: Payment API (JSR 229)

Provisionamento de dados

TagMandatório /

Opcional DescriçãoPay-Version M Versão do JAR-Manifest

Pay-Update-Stamp M Data do último provisionamento

Pay-Update-URL M URL que aponta para a última versão dos dados de provisionamento

Pay-Cache O Especifica se vai usar cache ou não. Valores possíveis:

[yes|no|<Expiration-Date>].Pay-Providers M Lista de provedores suportados

Pay-feature-<n> M Representa a feature configurada para o adapter - <n> é um número sequencialsem lacunas e começando de ZERO

Arquivo JAR-Manifest e tags

JAR-Manifest

Page 34: Payment API (JSR 229)

Provisionamento de dados

Arquivo JAD - exemplo

[…]Pay-Version: 1.0Pay-Adapters: PPSMSPay-Debug-DemoMode: yesPay-Debug-FailInitialize: noPay-Debug-FailIO: noPay-Debug-MissedTransactions: noPay-Debug-RandomTests: noPay-Debug-AutoRequestMode: accept

Page 35: Payment API (JSR 229)

Provisionamento de dados

Arquivo JAR-Manifest - exemplo

[…]Pay-Version: 1.0Pay-Update-Stamp: 2004-11-15 02:00+01:00Pay-Update-URL: http://<update-site>/thisgame.manifest.jppPay-Providers: TestPay-Feature-0: 0Pay-Test-Info: PPSMS, EUR, 001, 01Pay-Test-Tag-0: 2.40, 4321, 0x123456789abcdef0, 1

Page 36: Payment API (JSR 229)

Provisionamento de dados

Arquivo JAD – exemploUma aplicação cujo provedor suporta SMS e X-Test(adapter proprietário) proverá os seguintes arquivos JAD e JAR respectivamente

JAD

[…]Pay-Version: 1.0Pay-Adapters: PPSMS, X-TESTMIDlet-Permissions: javax.microedition.payment.process.jppMIDlet-Certificate-<n>-<m>: <base64 encoding of a certificate>MIDlet-Jar-RSA-SHA1: <base64 encoded Jar signature>

Page 37: Payment API (JSR 229)

Provisionamento de dados

Arquivo JAR-Manifest - exemplo

[…]Pay-Version: 1.0Pay-Update-Stamp: 2004-11-15 02:00+01:00Pay-Providers: SMS1, Test1Card, Test2CardPay-Update-URL: http://<update-site>/thisgame.manifest.jppPay-Cache: noPay-Feature-0: 0Pay-Feature-1: 0Pay-Feature-2: 1Pay-SMS1-Info: PPSMS, EUR, 928, 99Pay-SMS1-Tag-0: 1.20, 9990000, 0x0cba98765400Pay-SMS1-Tag-1: 2.50, 9990000, 0x0cba98765401, 2Pay-Test1Card-Info: X-TEST8, EUR, c4d21, soap://<soap-site-1>/Pay-Test1Card-Tag-0: 1.21Pay-Test1Card-Tag-1: 2.46Pay-Test2Card-Info: X-TEST8, USD, 8DiU, soap://<soap-site-2>/jsr229

Page 38: Payment API (JSR 229)

Segurança

No contexto da JSR-229, segurança está relacionada com a garantia do provisionamento de dados, da aplicação e seu estado contra modificações não autorizadas

Trata-se também de garantir que o proprietário do terminal tenha conhecimento de todas as transações realizadas no mesmo

A JSR-229 foi definida e projetada para tirar vantagem dos recursos de segurança e mecanismos de controle previstos pela MIDP2.0.

Page 39: Payment API (JSR 229)

Segurança

RequisitosResistência a adulteração de:

provisionamento de dados de pagamentosdo estado da informação de pagamentosdo código da aplicação de pagamentos

Proteger :o proprietário do terminal contra sobre-pagamentoo PSP contra acesso fraudulentoo Provedor de Aplicações contra acesso fraudulento

Page 40: Payment API (JSR 229)

Segurança

Permission NameResistência a adulteração de:

provisionamento de dados de pagamentosdo estado da informação de pagamentosdo código da aplicação de pagamentos

Proteger :o proprietário do terminal contra sobre-pagamentoo PSP contra acesso fraudulentoo Provedor de Aplicações contra acesso fraudulento

Page 41: Payment API (JSR 229)

Adapters

A JSR faz uma definição do Premium Priced SMS Adapter e faz recomendações de nomeação para novos Adapters

Mostra como o PPSMS devem ser implementados

Page 42: Payment API (JSR 229)

Adapters

Modelo de pagamento PPSMSBaseado

no número Premium Priced SMS pré-definido pela operadoraou no valor inserido no corpo da mensagem

Essa especificação tanto é válida para SMS-MO (mobileoriginated) como SMS-MT(mobile terminated)

Page 43: Payment API (JSR 229)

Adapters

Especificação do Provisionamento de DadosADAPTER NAMESPACE - PPSMS

Tag DescriçãoPay-<ProviderTitle>-info Descreve infromações no modelo de provider

<info> - Moeda, MCC, MNCPay-SMS1-Info: PPSMS, EUR, 928, 99

Pay-<ProviderTitle>-tag-<m> The format is <Price>, <PremiumPriced-SMSNumber,<Prefix>,[,NbSMS]Prefix – um vetor de byte que antecede o SMS,uso livreEx:Pay-SMS1-Tag-1: 2.80, 9990000, 0x0cba98765401, 2

Page 44: Payment API (JSR 229)

Adapters

LimitaçãoFormato 8-bit SMS (máx 140 caracteres)Confiabilidade do Adapter (não é 100%)

Page 45: Payment API (JSR 229)

Adapters

Exemplo arquivo JAR-Manifest PPSMS

Page 46: Payment API (JSR 229)

Adapters

Exemplo arquivo JAR-ManifestPPSMS

Page 47: Payment API (JSR 229)

Bibliografia

http://jcp.org/en/jsr/detail?id=229http://wiki.forum.nokia.com/index.php/API_de_pagamento:_JSR_229http://www.devmedia.com.br/post-10331-Artigo-WebMobile-19-Construindo-Mobile-Payment-com-Java-ME.htmlhttp://download.oracle.com/javame/dev-tools/wtk-cldc-2.5.2-01/UserGuide-html/payment.htmlhttp://innovator.samsungmobile.com/cms/cnts/knowledge.detail.view.do?platformId=3&cntsId=7160

Page 48: Payment API (JSR 229)

Iniciativas da Industria