wirecardBrasil / moip-sdk-php

Cliente em PHP para integração server-side com APIs Moip v2
MIT License
124 stars 90 forks source link

Não foi possível decriptografar dados de cartão de crédito #44

Closed valentim-guilherme closed 8 years ago

valentim-guilherme commented 8 years ago

Usando esta ferramenta para criptografar o cartão: http://moip.github.io/moip-sdk-js/

Tendo este resultado de Cartão Criptografado: H1i8lIaVTdhSLkHLnEfuaKBVwXUIFUnBxeJ/V8H+n+ESKQ9fX1+QrZFYgRlsOX5Q+7f07U8wc13fSqkBxoFrygrU104wF4V2qJAXisiR8p1h4dRuS9SHGVe4zJ6/cv+CcrH7yp3fIMlkkCfRT6iknSwDlUdmDpmoeMza+Stula5d8b7W+6QGyONATgvY9gDkw8jPtm3JVmyo2TMjZ09HZO8FGk5nBELNeyNFWz9Myi/Bxkq/vdU2Tj1u/Y8+rB3wVXTy/524qBlbkHmA/4fKMPTZSBHrPKNx1xYgMJnCVUW59PO1GF6Lch6CGz6TLC6x38DoCJKWxafebykUF5I9RQ==

Para estes dados: Número do cartão: 5555666677778884 CVC:123 Mês de expiração (MM): 11 Ano de expiração (AA): 22

Usando o SDK PHP com o seguinte código:

    $order = $this->moip->orders()->get($x);

    $payment = $order->payments()
             ->setCreditCardHash($this->temp_has_card,
                             $this->moip->customers()->setOwnId('sandbox_v2_1401147277')
                                               ->setFullname('Jose Portador da Silva')
                                               ->setEmail('fulano@email.com')
                                               ->setBirthDate('1988-12-30')
                                               ->setTaxDocument('33333333333')
                                               ->setPhone(11, 66778899))
             ->execute();

ONDE $X é um valor válido de uma order ONDE $this->temp_has_card é o cartão criptografado citado a cima.

Tenho a seguinte resposta do servidor da Moip: [responseBody:Moip\Http\HTTPResponse:private] => {"errors":[{"code":"PAY-?","path":"fundingInstrument","description":"Não foi possível decriptografar dados de cartão de crédito"}]} [statusCode:Moip\Http\HTTPResponse:private] => 400 [statusMessage:Moip\Http\HTTPResponse:private] => Bad Request

Resposta completa: Moip\Http\HTTPResponse Object ( [responseHeader:Moip\Http\HTTPResponse:private] => Array ( [date] => Array ( [name] => Date [value] => Thu, 17 Mar 2016 18:29:01 GMT )

        [server] => Array
            (
                [name] => Server
                [value] => Apache
            )

        [status] => Array
            (
                [name] => Status
                [value] => 400 Bad Request
            )

        [x-newrelic-app-data] => Array
            (
                [name] => x-newrelic-app-data
                [value] => PxQFUlBXAQoTV1VaDgIEV0YdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOFAVtGAkWVVNBETpMGV8QXAdKcVBPb0pJAEgMVgwQRRdJNixrZxlGTVIZARtWSgYCAlpRVVEcVAlbFBoCAQoBC1hTWFJWAlACUgRTGm4=
            )

        [vary] => Array
            (
                [name] => vary
                [value] => Accept-Encoding
            )

        [content-type] => Array
            (
                [name] => content-type
                [value] => application/json
            )

        [content-length] => Array
            (
                [name] => Content-Length
                [value] => 135
            )

        [x-content-type-options] => Array
            (
                [name] => X-Content-Type-Options
                [value] => nosniff
            )

    )

[responseBody:Moip\Http\HTTPResponse:private] => {"errors":[{"code":"PAY-?","path":"fundingInstrument","description":"Não foi possível decriptografar dados de cartão de crédito"}]}
[statusCode:Moip\Http\HTTPResponse:private] => 400
[statusMessage:Moip\Http\HTTPResponse:private] => Bad Request

)

Moip\Http\HTTPResponse Object ( [responseHeader:Moip\Http\HTTPResponse:private] => Array ( [date] => Array ( [name] => Date [value] => Thu, 17 Mar 2016 18:29:01 GMT )

        [server] => Array
            (
                [name] => Server
                [value] => Apache
            )

        [status] => Array
            (
                [name] => Status
                [value] => 400 Bad Request
            )

        [x-newrelic-app-data] => Array
            (
                [name] => x-newrelic-app-data
                [value] => PxQFUlBXAQoTV1VaDgIEV0YdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOFAVtGAkWVVNBETpMGV8QXAdKcVBPb0pJAEgMVgwQRRdJNixrZxlGTVIZARtWSgYCAlpRVVEcVAlbFBoCAQoBC1hTWFJWAlACUgRTGm4=
            )

        [vary] => Array
            (
                [name] => vary
                [value] => Accept-Encoding
            )

        [content-type] => Array
            (
                [name] => content-type
                [value] => application/json
            )

        [content-length] => Array
            (
                [name] => Content-Length
                [value] => 135
            )

        [x-content-type-options] => Array
            (
                [name] => X-Content-Type-Options
                [value] => nosniff
            )

    )

[responseBody:Moip\Http\HTTPResponse:private] => {"errors":[{"code":"PAY-?","path":"fundingInstrument","description":"Não foi possível decriptografar dados de cartão de crédito"}]}
[statusCode:Moip\Http\HTTPResponse:private] => 400
[statusMessage:Moip\Http\HTTPResponse:private] => Bad Request

)

Já passaram por isso ?

menezes- commented 8 years ago

Você colocou sua chave pública certa na ferramenta ? Provavelmente o problema está relacionado a isso.

valentim-guilherme commented 8 years ago

Obrigado pela rápida resposta menezes. Eu estava utilizando a versão "moip/moip-sdk-php": "1.x-dev" do sdk porque precisava do "setDiscount" em Resource\Orders, que na versão estável ainda não esta publicado. Voltei para a versão "moip/moip-sdk-php": "~1" e tudo esta funcionando normalmente agora porém não consigo configurar um desconto para o pedido. Atualmente como vocês estão fazendo para que na versão estável seja configurado o desconto ?

SOSTheBlack commented 8 years ago

@valentim-guilherme como você está tentando fazer o desconto do pedido, especifique por favor

valentim-guilherme commented 8 years ago

Bom dia SOSTheBlack, entrei em contato com o suporte da moip e eles me enviaram outro src/Resource/Orders.php contendo a função setDiscount e não mais a "setDiscont" que esta na versão estável atualmente. A diferença agora é que existe a verificação isset de subtotals e caso não exista é realizada a criação, desta maneira consegui realizar o desconto. Segue abaixo o código da função: /* * Set discounted value of the item will be subtracted from the total value of the items. * * @param int|float $value discounted value. / public function setDiscount($value) {

     if (!isset($this->data->amount->subtotals)) {
        $this->data->amount->subtotals = new stdClass();
    }
    $this->data->amount->subtotals->discount = (float) $value;

    return $this;
}
SOSTheBlack commented 8 years ago

@valentim-guilherme Me passa esse arquivo por e-mial para eu analisar por favor jeancesargarcia@gmail.com.

Pelo problema ter se resolvido o issue será fechado.