通过 PayPal Buy Now 按钮的自定义字段发送一个 json 编码的 var

Posted

技术标签:

【中文标题】通过 PayPal Buy Now 按钮的自定义字段发送一个 json 编码的 var【英文标题】:send a json encoded var via custom field of PayPal Buy Now button 【发布时间】:2017-06-19 01:58:15 【问题描述】:

我的想法是在我的测试网站上有一个标准的 PayPal Buy Now 按钮。我能够学习如何将单个变量传递到 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" >
<img  border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif"  >
</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】:

首先,您不是 echo-ing 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

【讨论】:

以下代码非常适合我: 非常非常感谢! @菲尔

以上是关于通过 PayPal Buy Now 按钮的自定义字段发送一个 json 编码的 var的主要内容,如果未能解决你的问题,请参考以下文章

Paypal Buy Now IPN 在 POST vars 中返回空 item_number

使用 CSS 修复自定义字体行高

R语言str_flatten函数通过自定义字符连接(concatenate)字符串向量中的字符串

为啥自定义字体会移动文本(更改垂直对齐方式)? [复制]

C++11 用户自定义字面值

如何在 Python 中用“”替换我的自定义字符?