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

Posted

技术标签:

【中文标题】Laravel Paypal - 从网站传递送货地址【英文标题】:Laravel Paypal - pass shipping address from website 【发布时间】:2017-06-07 04:18:21 【问题描述】:

我刚刚从 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 对象分配给付款或交易,就像我使用详细信息一样,创建详细信息对象,然后使用 @987654327 @,但我没有为 shippingAddress 找到任何东西.....

编辑2: 通过项目列表获得提示,这就是我创建和设置该列表的方式:

 $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);
            

然后

$transaction = PayPal::Transaction();
        $transaction->setAmount($amount);
        $transaction->setItemList($itemList);

【问题讨论】:

没人知道吗? 只是给您一些快速的信息,当您通过 Paypal 销售商品时,如果您没有将商品运送到他们帐户上的地址,您就没有卖家保护。仅供参考 和我一样的问题。我不推荐老兄。我以前用过 5.2。有效。但是,我不能传递地址。我尝试关注 Paypal 文档,但在 paypal 结帐页面中无法预加载任何内容。客户需要再次输入他们的地址详细信息和电话号码作为客人结帐。我还没有测试这个 api github.com/anouarabdsslm/laravel-paypalpayment。但是,它看起来像更多的文档。 它工作意味着只是基本的流程工作。你可能会混淆我的评论。 @KelvinKyaw 查看接受的答案,我与他进行了长时间的研究,但现在开始工作了! 【参考方案1】:

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

【讨论】:

这与我的回答有何关系?我基本上需要将送货地址传递给贝宝 API,这样它就不会使用贝宝系统中的地址,而是客户在我的页面上注册时使用的地址。【参考方案2】:

在与问题作者(@nameless - 问候!)进行聊天研究后,我们发现添加另一个送货地址的地方是 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,而不是 UK。如果您输入错误的两个字母代码 - 响应将返回 400 格式错误的代码。

【讨论】:

感谢答案 - 但似乎 setShippingAddress 在交易中不可用。我收到Call to undefined method PayPal\Api\Transaction::setShippingAddress() 另外,在 PayPal/api/Shipping address 我发现 ` /** * 付款人的默认送货地址。 * * @param bool $default_address * * @return $this */ public function setDefaultAddress($default_address) $this->default_address = $default_address;返回$这个; ` 所以也许添加 $payer->setShippingAddress ?? same result...找不到方法...我在想的是如果我需要$shippingAddr = new ShippingAddress之类的东西然后使用$shippingAddr->setShippingAddress($shippingAddress)但是我在哪里分配这个... $shipping = PayPal::setShippingAddress(); $shipping->setLine1('我的第一行); ??

以上是关于Laravel Paypal - 从网站传递送货地址的主要内容,如果未能解决你的问题,请参考以下文章

使用 PayPal Checkout Express 时是不是可以通过 SetExpressCheckout 传递送货地址?

Magento:Paypal 将送货地址作为默认地址,而不是帐单地址

从 Paypal 账单协议表单中删除送货地址

使用 react-paypal-js 禁用送货地址

从 Paypal NVP 请求中获取送货地址

PayPal API 通过交易 ID 获取送货地址