通过PayPal立即购买按钮的自定义字段发送json编码的var

时间:2017-02-02 05:21:45

标签: php json button paypal

我的想法是我的测试网站上有一个标准的PayPal立即购买按钮。我能够学习如何将单个变量传递到PayPal支付处理页面并将其恢复到我的监听/成功页面中。我通过在包含按钮的表单中向隐藏的" custom" 字段引入值来实现此目的。到目前为止没问题。

但是,由于我需要一个数据数组,而不仅仅是单个变量的单个值,我尝试应用JSON ENCODE方法发送数据,然后在我的成功消息URL中使用JSON DECODE方法。我有三个定义的变量:$ st_id,$ selected_mod,$ selected_tut。

可悲的是,他们都不能通过。我怎样才能使它工作?感谢。

    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="JKXXXXXXXXXXXXX">
<input type="hidden" name="rm" value="2">
<input type="hidden" name="custom" value="<?php json_encode( array($st_id,$selected_mod,$selected_tut,JSON_FORCE_OBJECT) ) ;?>">
<input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
// THE FOLLOWING IS MY CODE IN SUCCESS MESSAGE URL
<?php
$ipn_post_data = $_POST;
    //$st_id=$_POST['custom']; //this works if I use a simple variable than a json encoded array

$posted_json = json_decode($_POST['custom']);
$json_st_id= $posted_json['0'];
$json_mod_code= $posted_json['1'];
$json_tut_id= $posted_json['2'];

echo "Wow! Payment was done.";

echo "Your student ID:&nbsp".$json_st_id."<br />";

echo "Module:&nbsp".$json_mod_code."<br />";

echo "Selected Tutor:&nbsp".$json_tut_id."<br />";

echo "Please save the above information until you will receive a confirmation from us. Thank you."
?>

1 个答案:

答案 0 :(得分:0)

首先,您不是echo - JSON编码数组,因此您的value属性将为空。

其次,您将获得数组中任何字符串值的嵌套双引号,例如

value="[123,"some mod","some tut",16]"

您需要正确编码HTML属性值

value="<?= htmlspecialchars(json_encode([$st_id,$selected_mod,$selected_tut])) ?>"

另外,我真的不会使用JSON_FORCE_OBJECT(你做错了)和数组。

请参阅http://php.net/manual/function.htmlspecialchars.php