Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Amigos,
Não tenho muito conhecimento de JSON e estou com um probleminha que é o seguinte.
Eu recupero as informações via JSON e preciso inserir essas informações no banco de dados e redirecionar.
Segue o script
var funcaoSucesso = function(data){
alert('Sucesso\n' + JSON.stringify(data));
window.open(data.url);
};
Não sou especialista, mas sei que também podemos recuperar da seguinte forma e exibir no alert
alert(data.Mensagem + data.Status);
Sei que tem muito material em PHP utilizando o "encode" e "decode" mas o exemplo é sempre com a string já pronta, eu não consegui desenvolver essa string no script acima para poder interpretar no PHP e fazer a incluão.
Alguem pode me ajudar com isso? Só preciso de uma luz, não precisam me enviar tudo pronto.
Att
Eu recebo da seguinte forma pelo JSON
{"Codigo":123,"Status":"OK","Mensagem":"Legal, funcionou"}
o que eu preciso é que o PHP receba essas variaveis da seguinte forma:
$codigo = 123;
$status = 'OK';
$mensagem = 'Legal, funcionou';
E pegar esse valor e inserir no MySql, pode ser até por Ajax, ou não, pq se eu tiver esse resultado em PHP nem precisa de inserção direta por AJAX.
Att
usa json_decode(), essa string vai virar um objeto ou array, testa assim
http://php.net/manual/pt_BR/function.json-decode.php
$valor = json_decode('{"Codigo":123,"Status":"OK","Mensagem":"Legal, funcionou"}');
echo "<pre>";
print_r($valor);
echo $valor->Codigo ."<br>";Então shini, essa string é mostrada em um alert dessa forma:
var funcaoSucesso = function(data){
alert('Sucesso\n' + JSON.stringify(data));
window.open(data.url);
};
Para eu usar o json_decode eu tenho que colocar essa string em uma variavel PHP correto? como vc mesmo citou no exemplo utilizando a variavel "$valor"
Sendo que vc já pegou o valor retornado pelo JSON que é exibido em um alert, como seria pegar esse valor que o JSON coloca em um alert mas em uma variavel PHP.
Algo como
var funcaoSucesso = function(data){
$valor = JSON.stringify(data);
window.open(data.url);
};
Só que ai estamos declando a variavel $valor em javascritp correto? ai como eu pego esse valor para transformar em PHP?
Att
da onde vem o parametro data?
Então Shini, vem de um outro javascript já pronto, esse javascript retorna as informações passadas lá em cima.
esse data é q vc tem q passar pro php. tenta ai, se n conseguir posta o codigo todo.
Isso, as informações da "data" que eu preciso recuperar pelo JSON e passar para o PHP, vou inserir o codigo completo, pq é muito grande.
É um codigo de pagamento para o MOIP
(function() {
var jMoip;
var falha = new Array();
var errors = new Array();
var indice = 0;
var URL = "https://desenvolvedor.moip.com.br/sandbox";
var requestUrl = window.location;
if (window.jQuery === undefined) {
var scriptTag = document.createElement('script');
scriptTag.setAttribute("type","text/javascript");
scriptTag.setAttribute("src", URL + "/scripts/jquery-1.7.min.js");
scriptTag.onload = scriptLoadHandler;
scriptTag.onreadystatechange = function () {
if (this.readyState == 'complete' || this.readyState == 'loaded') {
scriptLoadHandler();
}
};
(document.getElementsByTagName("head")[0] || document.documentElement).appendChild(scriptTag);
} else if(window.jQuery.fn.jquery <= '1.7') {
var scriptTag = document.createElement('script');
scriptTag.setAttribute("type","text/javascript");
scriptTag.setAttribute("src", URL + "/scripts/jquery-1.7.min.js");
scriptTag.onload = scriptLoadHandler;
scriptTag.onreadystatechange = function () {
if (this.readyState == 'complete' || this.readyState == 'loaded') {
scriptLoadHandler();
}
};
(document.getElementsByTagName("head")[0] || document.documentElement).appendChild(scriptTag);
} else {
jMoip = window.jQuery;
jMoip.getScript(URL + "/widget-fb/js/json2.js");
jMoip.getScript(URL + "/scripts/util.js");
}
function scriptLoadHandler() {
jMoip = window.jQuery.noConflict(false);
jMoip.getScript(URL + "/widget-fb/js/json2.js");
jMoip.getScript(URL + "/scripts/util.js");
}
var MoipWidget = function(json) {
jMoip(document).ready(function(jMoip) {
param = {
pagamentoWidget:{
referer : requestUrl.href,
token : jMoip("#MoipWidget").attr("data-token"),
dadosPagamento: json
}
};
var serviceUri = "/rest/pagamento?callback=?";
validarJson(param);
if (errors.length > 0) {
var callback_error = jMoip("#MoipWidget").attr("callback-method-error");
__function = eval(callback_error);
if (typeof window.__function == "function") {
__function(errors);
errors = new Array();
return;
}
}
var conf = {
url: URL + serviceUri,
type: "GET",
dataType: "json",
scriptCharset: "utf-8",
async: true,
data: {"pagamentoWidget":JSON.stringify(param)},
headers:{
"Content-Type": "application/json",
"Accept": "application/json"
},
success: function(data){
if(data.StatusPagamento == "Sucesso"){
var callback_success = jMoip("#MoipWidget").attr("callback-method-success");
setarToken(data);
eval(callback_success)(data);
} else {
var callback_error = jMoip("#MoipWidget").attr("callback-method-error");
eval(callback_error)(data);
}
}
};
jMoip.ajax(conf);
});
};
//### validações do json ###
validarJson = function(json) {
var token = json.pagamentoWidget.token;
var pagamento = json.pagamentoWidget.dadosPagamento;
validarToken(token);
validarFormaDePagamento(pagamento);
};
validarToken = function(token) {
if(naoInformou(token)) {
adicionarErro(914, "Informe o token da Instrução");
}
};
validarFormaDePagamento = function(pagamento) {
var forma = pagamento.Forma;
if(!jMoip.isFunction(window["validar" + forma])) {
adicionarErro(900, "Forma de pagamento inválida");
return;
}
var fn = window["validar" + forma];
fn(pagamento);
};
//### validações por forma de pagamento ###
validarCartaoCredito = function(pagamento) {
validarInstituicao(pagamento.Instituicao);
validarParcelas(pagamento.Parcelas);
validarPagamentoCartao(pagamento);
};
validarDebitoBancario = function(pagamento) {
validarInstituicao(pagamento.Instituicao);
};
validarBoletoBancario = function(pagamento) {
};
//### validações dos dados de cartão de crédito ###
validarPagamentoCartao = function(pagamento) {
var cartao = pagamento.CartaoCredito;
var cofre = pagamento.CartaoCredito.Cofre;
var instituicao = pagamento.Instituicao;
if (naoInformou(cartao)) {
adicionarErro(905, "Informe os dados do cartão de crédito");
}
//cofre
else if (informou(cofre)) {
validarCofre(cartao, instituicao);
//cartão de crédito
} else {
validarCartao(cartao, instituicao);
}
};
validarInstituicao = function(instituicao) {
if (naoInformou(instituicao)) {
adicionarErro(901, "Informe a instituição de pagamento");
}
};
validarCofre = function(cartao, instituicao) {
var cofre = cartao.Cofre;
var cvv = cartao.CodigoSeguranca;
if (naoInformou(cofre)) {
adicionarErro(913, "Informe o cofre a ser utilizado");
}
if (naoInformou(cvv)) {
adicionarErro(907, "Informe o código de segurança do cartão");
} else {
var qtdCaracteres = String(cvv).length;
if (isNaN(cvv)) {
adicionarErro(907, "Código de segurança inválido");
}
else if (qtdCaracteres < 3 || qtdCaracteres > 4) {
adicionarErro(907, "Código de segurança inválido");
}
}
};
validarCartao = function(cartao, instituicao) {
var numero = cartao.Numero;
if (informou(numero)) {
cartao.Numero = String(numero).replace(/\D/g, "");
}
validarNumeroDoCartao(cartao, instituicao);
validarCvv(cartao.CodigoSeguranca, instituicao);
validarDataDeExpiracao(cartao.Expiracao);
validarPortador(cartao.Portador);
};
validarNumeroDoCartao = function(cartao, instituicao) {
var numero = cartao.Numero;
if (naoInformou(numero)) {
adicionarErro(905, "Informe o número do cartão");
} else {
var qtdCaracteres = String(numero).length;
if (instituicao == "Visa" && qtdCaracteres != 16) {
adicionarErro(905, "Número de cartão inválido");
}
else if (instituicao == "Mastercard" && qtdCaracteres != 16) {
adicionarErro(905, "Número de cartão inválido");
}
else if (instituicao == "AmericanExpress" && (qtdCaracteres < 15 || qtdCaracteres > 16)) {
adicionarErro(905, "Número de cartão inválido");
}
else if (instituicao == "Diners" && qtdCaracteres != 14) {
adicionarErro(905, "Número de cartão inválido");
}
else if (instituicao == "Hipercard" && (qtdCaracteres < 13 || qtdCaracteres > 19 || qtdCaracteres == 17 ||qtdCaracteres == 18)) {
adicionarErro(905, "Número de cartão inválido");
}
}
};
validarCvv = function(cvv, instituicao) {
if (naoInformou(cvv)) {
adicionarErro(907, "Informe o código de segurança do cartão");
} else {
var qtdCaracteres = String(cvv).length;
if (isNaN(cvv)) {
adicionarErro(907, "Código de segurança inválido");
}
else if (instituicao == "AmericanExpress" && qtdCaracteres != 4) {
adicionarErro(907, "Código de segurança inválido");
}
else if (instituicao != "AmericanExpress" && qtdCaracteres != 3) {
adicionarErro(907, "Código de segurança inválido");
}
}
};
validarParcelas = function(parcelas){
if (naoInformou(parcelas)) {
adicionarErro(902, "Informe a quantidade de parcelas");
} else if (isNaN(parcelas) || parcelas < 1 || parcelas > 12){
adicionarErro(902, "Quantidade de parcelas deve ser entre 1 e 12");
}
};
validarPortador = function(portador){
if (naoInformou(portador)) {
adicionarErro(908, "Informe os dados do portador do cartão");
} else {
if (naoInformou(portador.Nome)) {
adicionarErro(909, "Informe o nome do portador como está no cartão");
}
if(naoInformou(portador.DataNascimento)) {
adicionarErro(910, "Informe a data de nascimento do portador");
} else if(!dataDeNascimentoEhValida(portador.DataNascimento)) {
adicionarErro(910, "Data de nascimento do portador deve estar no formato DD/MM/AAAA");
}
if(naoInformou(portador.Telefone)) {
adicionarErro(911, "Informe o telefone do portador");
} else if(!telefoneEhValido(portador.Telefone)) {
adicionarErro(911, "O telefone do portador é inválido");
}
if(naoInformou(portador.Identidade)) {
adicionarErro(912, "Informe o CPF do portador");
} else if(!cpfEhValido(portador.Identidade)) {
adicionarErro(912, "O CPF do portador inválido");
}
}
};
telefoneEhValido = function(telefone) {
telefone = String(telefone).replace(/\D/g, "");
if (telefone.length < 8) {
return false;
}
return true;
};
cpfEhValido = function(cpf) {
cpf = String(cpf).replace(/\D/g, "");
if (cpf.length != 11) {
return false;
}
return true;
};
dataDeNascimentoEhValida = function(data) {
barras = data.split("/");
if (barras.length == 3) {
dia = barras[0];
mes = barras[1];
ano = barras[2];
if(!diaEhValido(dia) || !mesEhValido(mes) || !anoEhValido(ano)) {
return false;
} else {
return true;
}
}
return false;
};
validarDataDeExpiracao = function(data) {
var dataDeExpiracao = String(data);
if(naoInformou(dataDeExpiracao)) {
adicionarErro(906, "Informe a data de expiração do cartão");
} else if(dataDeExpiracao.indexOf("/") < 0) {
adicionarErro(906, "Data de expiração deve estar no formato 'MM/AA'");
return;
} else {
partes = dataDeExpiracao.split("/");
if(partes.length == 2) {
mes = partes[0];
ano = partes[1];
if (!mesEhValido || !anoEhValido) {
adicionarErro(906, "Data de expiração deve estar no formato 'MM/AA'");
}
} else {
adicionarErro(906, "Data de expiração deve estar no formato 'MM/AA'");
}
}
};
diaEhValido = function(dia) {
return !isNaN(dia) && dia >= 1 && dia <= 31;
};
mesEhValido = function(mes) {
return !isNaN(mes) && mes >= 1 && mes <= 12;
};
anoEhValido = function(ano) {
return !isNaN(ano) && ano.length == 4;
};
informou = function(dado) {
return !naoInformou(dado);
};
naoInformou = function(dado) {
return dado == undefined || String(dado) == '';
};
setarToken = function(data) {
data["url"] = URL + "/Instrucao.do?token=" + jMoip("#MoipWidget").attr("data-token");
};
adicionarErro = function(codigoErro, mensagemErro) {
var erro = {
Codigo: codigoErro,
Mensagem: mensagemErro
};
errors.push(erro);
};
var parcelamento;
var MoipUtil = {
calcularParcela: function(settings) {
parcelamento = settings;
var request = { "token": jMoip("#MoipWidget").attr("data-token"), "instituicao" : parcelamento.instituicao };
var conf = {
url: URL + "/rest/pagamento/consultarparcelamento?callback=?",
type: "GET",
dataType: "json",
scriptCharset: "utf-8",
async: true,
data: request,
headers:{
"Content-Type": "application/json",
"Accept": "application/json"
},
success: function(data){
eval(parcelamento.callback)(data);
}
};
jMoip.ajax(conf);
}
};
window.MoipWidget = MoipWidget;
window.MoipUtil = MoipUtil;
})();crie um iput hidden para cada valor do data ai vc consegue enviar para o php.
document.getElementById('codigo').value = data.codigo;
Shini, achei uma solução nesse link, da uma olhada
Veja se é isso
é isso ai.
Shini,
Agora recebendo atraves desse input, eu conseguiria enviar um ajax via post com essas infos para não ter que dar um refresh na pagina?
correto.
Shini,
Estou quase fechando isso... mas um help pode ser?
Tenho esse script, estou enviando para um outro arquivo, ele chega a enviar, mas insere tudo em branco
var funcaoSucesso = function(data){
var postData = JSON.stringify(data);
$.ajax({
type: "POST",
dataType: "json",
url: "insert.php",
data: postData,
success: function(data){
alert('enviou');
}
});
alert('Sucesso\n' + JSON.stringify(data));
};
Veja o PHP
<? include "../conexao.php";
$postData = $_GET['postData'];
$dados = json_decode($postData);
$Status = $dados->Status;
$Codigo = $dados->CodigoMoIP;
$insert = mysql_query("INSERT INTO teste (codigo, status) VALUES ('$Codigo', '$Status') ");
exit;
?>
O que pode ser?
inserindo eu sei que está, mas com valores em branco
acho q vc deve enviar pelo $_POST e não pelo $_GET
$.ajax({ type: "POST",
$_GET['postData'];já fiz isso
tentei receber por POST, REQUEST e GET
e nada, insere o registro em branco
alguma outra ideia?
rapaz... estou precisando muito resolver esse problema, estou o dia todo pesquisando ja visitei uma penca de sites
qual o correto?
type: "POST" ou method: "POST" ??
troque <? por <?php
imprima o valor de de $_GET e $_POST, posta ai o resultado.
echo"<pre>";
print_r($_POST);
echo"<pre>";
print_r($_GET);isso no arquivo PHP ?
sim
não exibiu nada, não deu nem o exit que coloquei
mas acho q não era para exibir mesmo não, eu nao estou chamando por ajax?
vc consegue ver a saida do ajax pelo firebug?
consegui ver
me retornou esse erro:
<b>Fatal error</b>: Cannot use object of type stdClass as array in
$_POST e $_GET vieram em branco?
tente $dados['Codigo'] ao ivnes de $dados->Codigo
Shini
Consegui resover o problema ontem
era só acrescentar "true" no json_decode
$dados = json_decode($postData, true);
Funcionou na hora!
Obrigado ai pela ajuda
q bom, o json estava vindo pelo $_POST mesmo?
qual o formato q chega a string no php? posta ai.