Laravel Paypal - 从网站传递送货地址

时间:2017-01-22 16:01:18

标签: php laravel paypal paypal-rest-sdk

我刚从net-shell(https://github.com/net-shell/laravel-paypal)实现了Laravel的PayPal API,到目前为止一切正常,但是现在有一件事我不知道或者我不知道该怎么做:在我的门户网站,用户必须注册他们的地址。我想要的是这封电子邮件(用于在我的门户网站注册)用作送货地址,稍后也会在PayPal网站上显示(因此无论用户为PayPal输入了什么地址)。

有没有办法做到这一点?

我知道似乎有一个PayPal:ShippingAdress,我可以使用,但如果这是正确的,那我怎么能将它分配给付款?

修改:我现在尝试使用$transaction->setShippingAddress();$payer->setShippingAddress();$payment->setShippingAddress();之类的许多变体,但没有任何效果,此方法永远找不到。现在在Paypal / Api / ShippingAddress中我找到了方法setDefaultAddress,所以我考虑创建这样一个对象并使用这样的方法:

$shippingAddress = [
            "recipient_name" => "John Johnson",
            "line1" => "Whatever street 2",
            "line2" => "Another street 2",
            "city" => "London",
            "country_code" => "UK",
            "postal_code" => "NR30 1LY",
            "state" => "England",
            "phone" => "3123123123"
        ];

        $shippingAddr = PayPal::ShippingAddresss();
        $shippingAddr->setDefaultAddress($shippingAddress);

使用此代码时不会出错,但也没有设置地址,我现在需要将此创建的shippingAddress对象分配给付款或交易,就像我使用详细信息,创建详细信息对象然后使用{{ 1}},但我找不到shippingAddress .....

EDIT2 : 通过项目列表获取提示,这是我创建和设置该列表的方式:

$amount->setDetails($details);

然后

 $itemList = PayPal::itemList();

        foreach ($items as $item)
                $product = Product::where('id', '=', $item->product->id)->first();
                $itemName = $product->name;
                $itemPrice = $product->price;
                $itemAmount = $item->amount;
                $payPalItem = PayPal::item();
                $payPalItem->setName($itemName)
                    ->setDescription($itemName)
                    ->setCurrency('EUR')
                    ->setQuantity($itemAmount)
                    ->setPrice($itemPrice);
                $itemList->addItem($payPalItem);
            }

2 个答案:

答案 0 :(得分:1)

在与问题作者(@nameless - greetings!)进行聊天研究后,我们发现添加另一个送货地址的地方是itemList:

您收集订单中的商品

 $itemList = PayPal::itemList();

    foreach ($items as $item)
            $product = Product::where('id', '=', $item->product->id)->first();
            $itemName = $product->name;
            $itemPrice = $product->price;
            $itemAmount = $item->amount;
            $payPalItem = PayPal::item();
            $payPalItem->setName($itemName)
                ->setDescription($itemName)
                ->setCurrency('EUR')
                ->setQuantity($itemAmount)
                ->setPrice($itemPrice);
            $itemList->addItem($payPalItem);
        }

最后一步是将地址附加到$ itemList

$shippingAddress = [
                "recipient_name" => "John Johnson",
                "line1" => "Whatever street 2",
                "line2" => "Another street 2",
                "city" => "London",
                "country_code" => "GB",
                "postal_code" => "NR30 1LY",
                "state" => "England",
                "phone" => "3123123123"
            ];

$itemList->setShippingAddress($shippingAddres);

请注意,国家/地区属于ISO 3166-1,因此GB - 不是英国。如果输入错误的双字母代码 - 响应将返回400错误的代码。

答案 1 :(得分:-1)

在paypal中创建IPN以检查会话属性是否正确传递。如果用户使用不同的电子邮件,则交易无效。