发布变量在Razorpay支付脚本上表现不同

时间:2016-09-19 20:49:22

标签: javascript php jquery variables post

我试图从表单中将客户和产品详细信息发布到Razorpay。但是,它不会触发与我在接收文件中具有相同变量时相同的结果。代码应该是自我解释的;

表格

<form action="razorpay/index.php" method="POST">
Name: <input type="text" name="cname" required><br>
Phone : <input type="phone" name="cphone" required><br>
Email : <input type="email" name="cemail" required><br>
Address : <textarea cols="50" rows="10" name="caddress" required></textarea>
<input type="hidden" name="gtotal" value="<?php echo $gtotal;?>">
<input type="hidden" name="vcomp" value="<?php echo $vcomp;?>">
<input type="hidden" name="proddescr" value="<?php echo $proddescr;?>">
<input type="submit" name="prodetsub">

接收发布变量的PHP文件

<?php 

// If the below variables are not commented, the script works fine with the values

/*$_POST['prodetsub']="submit";
$_POST['gtotal']=8000;
$_POST['vcomp']="Chalo Bazaar";
$_POST['proddescr']="Product Description";
$_POST['cname']="Customer Name";
$_POST['cemail']="customer@email.com";
$_POST['caddress']="Customer Address, Line 1, Line 2, Line 3";
$_POST['cphone']="9999999999";
*/

///But if I try to receive the variables from the post as below, the variables are not passed to javascript and alerted.

if(isset($_POST['prodetsub'])){?>
<form action="charge.php" method="POST">
<?php 
$gtotal=trim($_POST['gtotal']);
$vcomp=trim($_POST['vcomp']);
$proddescr=trim($_POST['proddescr']);
$cname=trim($_POST['cname']);
$cemail=trim($_POST['cemail']);
$caddress=trim($_POST['caddress']);
$cphone=trim($_POST['cphone']);
echo $cname."<br>"; 
echo $cemail."<br>"; 
echo $cphone."<br>"; 
echo $caddress."<br>"; 
echo $gtotal."<br>"; 
echo $vcomp."<br>"; 
echo $proddescr."<br>"; 
?>
<button id="rzp-button1">Pay</button>
<script src="https://checkout.razorpay.com/v1/checkout.js"></script>
<script>
var x=<?php echo $gtotal;?>;
var mn="<?php echo $vcomp;?>";
var d="<?php echo $proddescr;?>";
var cn="<?php echo $cname;?>";
alert(cn);
    var cem="<?php echo $cemail;?>";
    alert(cem);
    var cadd="<?php echo $caddress;?>";
    alert(cadd);
    var cph="<?php echo $cphone;?>";
    alert(cph);

var options = {
"key": "rzp_test_WyK93y9mvps7SN",
"amount": x, // 2000 paise = INR 20
"name": mn,
"description": d,
"image": "../images/logo.png",
"handler": function (response){
    alert(response.razorpay_payment_id);
},
"prefill": {
    "name": cn,
    "email": cem,
    "contact":cph
},
"notes": {
    "address": cadd
},
"theme": {
    "color": "#F37254"
}
};
var rzp1 = new Razorpay(options);

document.getElementById('rzp-button1').onclick = function(e){
rzp1.open();
e.preventDefault();

}
</script>
  <input type="hidden" name="shopping_order_id" value="21">

</form>
<?php } else{echo "Nothing Submitted<br>";}?>

在两种情况下,变量都能完美回显。但是当它来自表单时,它们不会传递给javascript。因此它不会在javascript中触发警报。但是,当我激活顶部注释掉的变量并在同一文件中指定值时,它可以正常工作

我想这是一个我遗漏的小问题。但是我花了很多时间试图弄清楚并且输了。希望有人能看到我出错的地方。

编辑:

我现在对变量进行了json_enc编码。

源代码显示值正确输出如下

var x="30250";
var mn=""Chalo Bazaar"";
var d=""Unicorn Silver Colour. 4 Year old. In good Condition"";

    var cn=""Anit Gopinath"";
    alert(cn);
    var cem=""anitgopinath@gmail.com"";
    alert(cem);
    var cadd=""506\/C2, Panchganga,\r\nLok Upvan, Phase I, Pokhran II"";
    alert(cadd);
    var cph=""9833157945"";
    alert(cph);

Chrome javascript控制台出错

&#34; index.php:8 Uncaught SyntaxError:意外的标识符&#34;

我想知道它是否是崩溃javascript的地址中的斜杠

3 个答案:

答案 0 :(得分:1)

不要这样做:

//Somewhere in your code...
var array1: [(Int32, Int32)] = []

//...

//And call `thefunc` as:
MyClass.thefunc(&array1, otherstuff: someInt32Value)

您直接将文本从PHP转储到Javascript上下文中,并且可以简单地引入JS语法错误,从而终止整个var cem="<?php echo $cemail;?>"; 块。当您执行php-&gt; js输出时,请始终使用<script>,例如

json_encode()

为什么呢?考虑如果该var包含var cem = <?php echo json_encode($cemail); ?>; 会发生什么。你的代码会产生这个:

"

答案 1 :(得分:1)

您提到alert窗口无法正常工作,这通常发生在javascript代码中出现错误时。我们必须找出错误是什么。在浏览器中打开javascript控制台(Mozilla Firefox中的F12键)。

哦,错误是双倍引用!因此,为了解决此问题,我们可以删除json_encode个调用,或者我们可以删除javascript双引号。

有效吗?大。很高兴为您提供帮助。

答案 2 :(得分:0)

您正在检查没有值的POST输入名称。建议检查其他内容,例如隐藏的输入。

// form has <input type="submit" name="prodetsub">
// which apparentl causes this to be false
if(isset($_POST['prodetsub'])){?>

为什么不使用

之类的东西
<input type="hidden" name="SUBMIT" value="1" />
// and check for form submit like 
if ((isset($_POST['SUBMIT'])) && ($_POST['SUBMIT'] ==1)){