我目前正在尝试将PayPal结帐按钮集成到网站,但我没有取得多大成功。
基本上,用户可以将产品编号和数量添加到存储在服务器上的购物车中。然后,他们可以进入“查看购物车”页面,向他们展示购物车中的产品。从那里,他们应该能够点击按钮将所有相关信息传输到PayPal,这样他们就可以使用PayPal结账,但我生成的按钮只是转到白页(在PayPal的末尾https://www.paypal.com/cgi-bin/webscr
)。
以下是生成按钮的代码:
$sendPayData = array(
"METHOD" => "BMCreateButton",
"USER" => "****",
"PWD" => "****",
"SIGNATURE" => "****",
"BUTTONCODE" => "CLEARTEXT", //Just while debugging
"BUTTONTYPE" => "BUYNOW",
"BUTTONCOUNTRY" => "GB",
"BUTTONIMAGE" => "reg",
"VERSION" => "65.1"
);
$productInfo = array();
$connection = new mysqli(constant("PERCH_DB_SERVER"),constant("PERCH_DB_USERNAME"),constant("PERCH_DB_PASSWORD"),constant("PERCH_DB_DATABASE"));
$sql = 'SELECT * FROM perch2_shop_products WHERE productCode IN ("'.implode('","',array_keys($_SESSION["cartProducts"])).'")';
if($connection->connect_error){
die("Connection Failed: ".$connection->connect_error);
}
$result = $connection->query($sql);
$total = 0;
if($result->num_rows>0){
$i = 0;
while($row = $result->fetch_assoc()){
$sendPayData["L_BUTTONVAR".((3*$i)+1)] = 'item_name_'.($i+1).'='.preg_replace("/[^A-Za-z0-9 ]/", '',$row["productTitle"]);
$sendPayData["L_BUTTONVAR".((3*$i)+2)] = 'quantity_'.($i+1).'='.$_SESSION["cartProducts"][$row["productCode"]];
$sendPayData["L_BUTTONVAR".((3*$i)+3)] = 'amount_'.($i+1).'='.$row["productPrice"];
$total += $row["productPrice"];
$i++;
}
}
$i--;
$sendPayData["L_BUTTONVAR".((3*$i)+4)] = "cmd=_cart";
$sendPayData["L_BUTTONVAR".((3*$i)+5)] = "upload=1";
$sendPayData["L_BUTTONVAR".((3*$i)+6)] = "currency_code=GBP";
$sendPayData["L_BUTTONVAR".((3*$i)+7)] = "business=****";
$sendPayData["L_BUTTONVAR".((3*$i)+8)] = "no_shipping=1";
$sendPayData["L_BUTTONVAR".((3*$i)+9)] = "no_note=1";
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_URL, 'https://api-3t.paypal.com/nvp?'.http_build_query($sendPayData));
$nvpPayReturn = curl_exec($curl);
curl_close($curl);
parse_str($nvpPayReturn, $returnArray);
echo $returnArray["WEBSITECODE"];
为了简化这里的事情,发送给paypal的变量(没有间距):
https://api-3t.paypal.com/nvp?
METHOD=BMCreateButton&
USER=****&
PWD=****&
SIGNATURE=****&
BUTTONCODE=CLEARTEXT&
BUTTONTYPE=BUYNOW&
BUTTONCOUNTRY=GB&
BUTTONIMAGE=reg&
VERSION=65.1&
L_BUTTONVAR1=item_name_1%3DName1&
L_BUTTONVAR2=quantity_1%3D1&
L_BUTTONVAR3=amount_1%3D6.85&
L_BUTTONVAR4=item_name_2%3DName2&
L_BUTTONVAR5=quantity_2%3D1&
L_BUTTONVAR6=amount_2%3D5.99&
L_BUTTONVAR7=item_name_3%3DName3&
L_BUTTONVAR8=quantity_3%3D1&
L_BUTTONVAR9=amount_3%3D12.85&
L_BUTTONVAR10=cmd%3D_cart&
L_BUTTONVAR11=upload%3D1&
L_BUTTONVAR12=currency_code%3DGBP&
L_BUTTONVAR13=business%3D****&
L_BUTTONVAR14=no_shipping%3D1&
L_BUTTONVAR15=no_note%3D1
原来,paypal没有应用cmd变量,cmd仍然是:
<input type="hidden" name="cmd" value="_xclick">
而不是:
<input type="hidden" name="cmd" value="_cart">
如果我找到原因,我会更新。
正如之前所说,这似乎是PayPal的一个问题而不是我的PHP,因为白色屏幕是我转移到PayPal网站时。
似乎如果您将按钮类型设置为cart
而不是buynow
,那么它会将cmd
设置为_cart
,但只有item_name
才生成按钮{ {1}},quantity
而不是item_name_1
,quantity_1
等。但是,如果您这样做,当您点击进入PayPal时,它会说您的购物车是空的。
如果我手动将项目变量更改为_1
,则按钮将按预期工作,显示PayPal登录页面,其中包含订单中列出的所有项目。
PayPals按钮生成器有问题吗?
它进入白色屏幕的原因是因为如果您定义cmd
变量,它将只添加另一个变量而不是覆盖旧变量。 Paypal然后不知道该做什么,因为有2个。
似乎没有办法创建上传购物车按钮,除非您使用html手动创建,这可能会被篡改。
如果您将buynow
更改为cart
并从按钮中删除<input type="hidden" name="cmd" value="_cart">
,那么它就能正常运行。由于某些原因,使用upload=1
变量不会覆盖add=1
按钮的cart
功能,并导致您的购物篮显示为空。
但即使这在html版本中有效,我也需要能够使用加密按钮,所以除了将订单分组到一个项目之外我仍然不知道该做什么,然后使用custom
变量来将订单详细信息发送到IPN。
答案 0 :(得分:0)
由于尚未得到答复,我想我也可以回答那些与我在同一条船上的人。
虽然这不是一个真正的答案,你是否可以实现我尝试使用Paypal按钮生成器实现的目标,但我最终使用快速结账API(这是Paypal支持建议而不是按钮)他们的一些建议没有起作用后发电机。)
自从我上次使用它以来,这个API似乎有所改变,现在可能有更好的方法。