PayPal API 与 Laravel - 数据更新

2024-03-07

我正在尝试实施API of PayPal payment with Laravel 5.1。但是当我登录到PayPal (sandbox),它使用我在帐户中使用的地址,并且还使用 PayPal 帐户中的名称而不是我网站中的数据。这是我的问题。

我想使用我网站上的数据,因为如果我从我的网站输入送货地址(例如)而不使用它,那就没有意义了。请参阅下面我的代码以供参考(或在下面评论我的一些详细信息)。

class PaypalPaymentController extends BaseController
{

    private $_api_context;

    public function __construct(){
        $paypal_conf = \Config::get('paypal');

        $this->_api_context = new ApiContext(new OAuthTokenCredential(
            $paypal_conf['client_id'],
            $paypal_conf['secret']
        ));

        $this->_api_context->setConfig($paypal_conf['settings']);
    }

    public function payWithPaypal(Request $request){
        $payer = new Payer;
        $payer->setPaymentMethod('paypal');

        $price = 0;

        switch($request->get('amount')) {
            case '10 books':
                $price = 6200;
                break;
            case '20 books':
                $price = 12200;
                break;
            case '50 books':
                $price = 25200;
                break;
            default:
                return redirect()
                        ->route('bookstore.shipping')
                        ->with('danger', 'Please select the right amount of book/s.');
                break;
        }

        $item1 = new Item();
        $item1->setName($request->get('amount'))
                ->setCurrency('PHP')
                ->setQuantity(1)
                ->setPrice($price);

        $item_list = new ItemList();
        $item_list->setItems([$item1]);

        $amount = new Amount();
        $amount->setCurrency('PHP')
                ->setTotal($price);

        $transaction = new Transaction();
        $transaction->setAmount($amount)
                    ->setItemList($item_list)
                    ->setDescription('Books transaction');

        $redirect_urls = new RedirectUrls();
        $redirect_urls->setReturnUrl(route('bookstore.payment-status'))
                        ->setCancelUrl(route('bookstore.payment-status'));

        $payment = new Payment();
        $payment->setIntent('Sale')
                ->setPayer($payer)
                ->setRedirectUrls($redirect_urls)
                ->setTransactions([$transaction]);

         $patchReplace = new Patch();
         $patchReplace->setOp('add')
                    ->setPath('/transactions/0/item_list/shipping_address')
                    ->setValue(json_decode('{
                        "line1": "345 Lark Ave",
                        "city": "Montreal",
                        "state": "QC",
                        "postal_code": "H1A4K2",
                        "country_code": "CA"
                    }'));

         $patchRequest = (new PatchRequest())->setPatches([$patchReplace]);


        try{

            $payment->create($this->_api_context);
            $payment->update($patchRequest, $this->_api_context);

        } catch(\Palpal\Exception\PPConnectionException $e){

            if(\Config::get('app.debug')){
                return redirect()
                        ->route('bookstore.shipping')
                        ->with('danger', 'Connection Timeout.');
            }

            return redirect()
                    ->route('bookstore.shipping')
                    ->with('danger', 'Some error occured, sorry for the inconvenience.');
        }

        foreach($payment->getLinks() as $link){
            if($link->getRel() == 'approval_url'){
                $redirect_url = $link->getHref();
                break;
            }
        }

        Session::put('paypal_payment_id', $payment->getId());

        if(isset($redirect_url)){
            return Redirect::away($redirect_url);
        }

        return redirect()
                ->route('bookstore.shipping')
                ->with('danger', 'Unknown error occured.');
    }

    public function getPaymentStatus(){
        $payment_id = Session::get('paypal_payment_id');
        Session::forget('paypal_payment_id');

        if(empty(Input::get('PayerID')) || empty(Input::get('token'))){
            return redirect()
                    ->route('bookstore.shipping')
                    ->with('danger', 'Payment failed.');
        }

        $payment = Payment::get($payment_id, $this->_api_context);
        $execution = new PaymentExecution();
        $execution->setPayerId(Input::get('PayerID'));

        $result = $payment->execute($execution, $this->_api_context);

        if($result->getState() == 'approved'){
            // Send Email
            $email_data = [
                'number_of_books' => $payment->transactions[0]->item_list->items[0]->name,
                'shipping' => [
                    'street' => $payment->payer->payer_info->shipping_address->line1,
                    'city' => $payment->payer->payer_info->shipping_address->city,
                    'state' => $payment->payer->payer_info->shipping_address->state,
                    'country' => $payment->payer->payer_info->shipping_address->country_code,
                ]
            ];

            // Send email function here ...

            return redirect()
                    ->route('bookstore.shipping')
                    ->with('success', 'Transaction payment success!');
        }

        return redirect()
                ->route('bookstore.shipping')
                ->with('danger', 'Payment failed.');
    }

}

我还回顾了这个链接 https://stackoverflow.com/questions/39927124/paypal-php-set-no-shipping但它似乎无法回答我的问题。还,what if这个国家有一个省吗?我们怎样才能添加它呢?

Update 1

  1. 新增Patch() class.
  2. 编辑后的代码在Try Catch.

注:accepted答案也会收到bounty加上up.

更新 2 带教程

  1. 对于 PHP/Laravel(我目前使用的是 v5.1),安装这个包贝宝/rest-api-sdk-php https://github.com/paypal/PayPal-PHP-SDK

  2. 在 PayPal 中创建沙盒帐户 https://www.sandbox.paypal.com/ph/webapps/mpp/merchant。选择.

  3. 继续,直到看到选项,选择购物世界 https://www.paypal.com/ph/webapps/mpp/online-shopping.

  4. 登录到开发者.paypal.com https://developer.paypal.com/.

  5. Click Accounts https://developer.paypal.com/developer/accounts/. Click 创建账户 https://developer.paypal.com/developer/accounts/create.

  6. 选择您想要的国家。在账户类型中选择个人(买家账户)。

  7. 添加电子邮件地址,避免使用-. Use _反而。

  8. 输入您想要的 PayPal 余额。

  9. 单击创建帐户。

让它活起来吗?

https://github.com/paypal/PayPal-PHP-SDK/wiki/Going-Live https://github.com/paypal/PayPal-PHP-SDK/wiki/Going-Live


创建付款后,尝试更新地址,如下所示这个例子 http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payments/UpdatePayment.html.

$paymentId = $createdPayment->getId();

$patch = new \PayPal\Api\Patch();
$patch->setOp('add')
    ->setPath('/transactions/0/item_list/shipping_address')
    ->setValue([
        "recipient_name" => "Gruneberg, Anna",
        "line1" => "52 N Main St",
        "city" => "San Jose",
        "state" => "CA",
        "postal_code" => "95112",
        "country_code" => "US"
    ]);

$patchRequest = new \PayPal\Api\PatchRequest();
$patchRequest->setPatches([$patch]);
$result = $createdPayment->update($patchRequest, $apiContext);

我也查看了此链接,但似乎它无法回答我的问题。另外,如果这个国家有一个省怎么办?我们怎样才能添加它呢?

使用州代码此处列出 https://developer.paypal.com/docs/classic/api/state_codes/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PayPal API 与 Laravel - 数据更新 的相关文章

  • 安装后如何使用 npm 包 (chart.js)?

    我正在制作一个练习 Laravel 站点 并且我已经通过 npm install 安装了 Chart js 这是一个愚蠢的问题 但现在我如何从这里使用它 或通过 npm 安装的任何东西 这些文件安装在节点模块文件夹中 我应该在页眉中使用标签
  • PHP文件上传

    如果我想在文件名转到服务器的永久位置 而不是临时位置 之前更改文件名 我该如何执行此操作 代码如下
  • 检查文件权限

    我怎样才能检查file permissions 无需通过运行操作系统特定命令passthru or exec Use 文件权限 http php net fileperms功能 clearstatcache echo substr spri
  • PHP 和 NLP:嵌套括号(解析器输出)到数组?

    想要将带有嵌套括号的文本转换为嵌套数组 以下是 NLP 解析器的输出示例 TOP S NP PRP I VP VBP love NP NP DT a JJ big NN bed PP IN of NP NNS roses 原文 我喜欢一大床
  • 如何在 Zend Framework 中处理移动设备?

    我接手了一个噩梦般的项目 我正在迁移一个写得很差的站点 并慢慢地将其迁移到 Zend Framework 应用程序中 不幸的是 我没有时间做补救工作 使这变得可以忍受 也许是一个或两个模型 我现在被告知该网站很快就会有移动版本 建议是克隆旧
  • 如何将粘在一起的单词分开?

    我有很多命名不好的文件 videoofmegoingtoschool avi 是否有一个库或某种算法可以正确地将其分离 video of me going to school avi 我不认为那里有什么 我可以想象一个程序 它使用单词词典并
  • Laravel 5.4 升级 - 违反完整性约束 - 列不能为空

    奇怪的是 所有这些都在 5 2 中工作 但我不知道可以改变什么来实现这一点 下面是错误和正在插入的数组 SQLSTATE 23000 Integrity constraint violation 1048 Column gender can
  • 创建 Facebook 测试用户时访问令牌出现问题

    我正在尝试为我的 Facebook 应用程序创建测试用户 他们在 11 月份的博客文章 http developers facebook com blog post 429 中宣布了此功能 并在此处记录了该功能 http developer
  • 如何处理 AJAX 请求中的会话超时

    我相信你们都熟悉使用 AJAX 的投票系统 嗯 看那边 我有类似的东西 当你投票赞成或反对时 它使用 AJAX 从 votes php 请求新值 问题是我正在使用会话来获取用户 ID 因此一个人只能投票一次 如果他们在页面上坐了一个小时然后
  • Yii2 中 init() 和 __construct() 方法有什么区别

    init 方法 public function init construct method public function construct 那么 它们之间有什么区别 应该使用哪一个呢 init 是从以下对象扩展的任何对象的方法yii b
  • 删除 woocommerce 店面主页标题 php

    我正在使用 woocommerce 的店面主题 我需要用 php 删除主页标题 h1 我知道 css 解决方案 但我不想使用它 因为我想将 h1 添加到该页面的其他位置 并且在一个页面中包含 2 个 h1 对 seo 不利页 我也知道删除页
  • 在 null laravel 上调用成员函数 save()

    大家好 我正在使用 laravel 5 多态关系将数据保存在数据库中 但我遇到了一些问题 当我尝试将数据保存在数据库中时 它会抛出此错误 对 null 调用成员函数 save 我不知道为什么我会遇到这个错误 我正在关注多态关系的本教程在 L
  • 如何在 Smarty 中打印 json

    我从 api 获取 json 如何使用 Smarty 打印 json Json格式 first name jinu last name mk loginid email protected cdn cgi l email protectio
  • 重新排列数组键 php [重复]

    这个问题在这里已经有答案了 我有这个数组 Array 15 gt 13 1 16 gt Mark one answer 19 gt You see a car on the hard shoulder of a motorway with
  • 我怎样才能让这个脚本在 WordPress 上运行?

    我有这个脚本 document ready function text1 click function this hide 代码html div class div1 p class text1 text to appear when th
  • UTF-8、PHP、Win7 - 现在是否有解决方案可以使用 php 在 Win 7 上保存 UTF-8 文件名?

    更新 只是为了不让您阅读所有内容 PHP 开头 7 1 0alpha2 在 Windows 上支持 UTF 8 文件名 感谢阿纳托尔 贝尔斯基 根据 stackoverflow 上的一些链接 我找到了部分答案 https stackover
  • wordpress - 像 stackoverflow 中那样内嵌 ajax 注释

    我有一个 WordPress 博客 希望为人们提供与 stackoverflow 中添加评论相同的用户体验 有很多评论 ajax 插件 但我找不到一个可以使用的插件 它允许您在主页上内联 进入并添加评论 而无需先深入到单独的单个帖子页面 任
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • PHP 中的多个插入查询[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个 php html 表单 它将结果插入到狗展数据库中 问题是 无论我做什么 我都会收到此错误 查询失败 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 INSE
  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏

随机推荐

  • 这些 PMD 规则的原因是什么?

    数据流异常分析 已找到 DD 变量 变量 异常 行 n1 n2 数据流异常分析 已找到 DU 变量 变量 异常 行 n1 n2 DD 和 DU 听起来很熟悉 我想说的是与最弱的前后条件相关的测试和分析之类的事情 但我不记得具体细节了 Nul
  • spring boot jpa无法创建表

    当我设置时 我使用 spring boot starter data jpa 来持久化我的实体 spring jpa hibernate ddl auto update 发生错误 但值为create或create drop 一切顺利 创建了
  • 插入新项目时如何防止recyclerview自动滚动到底部?

    我在用RecyclerView查看我的数据 但是当有很多项目时 RecyclerView每次插入新项目时都会自动滚动到底部 如何预防呢 这是插入代码 Override public void onChildAdded NonNull Dat
  • “gcc -s”和“strip”命令有什么区别?

    我想知道这两者有什么区别 gcc s 从可执行文件中删除所有符号表和重定位信息 strip 丢弃目标文件中的符号 它们有相同的含义吗 您使用哪一个来 减少可执行文件的大小 加快其运行速度 gcc作为编译器 链接器 其 s选项是完成的事情链接
  • azure-arm-consumation:获取资源组的消耗

    在我的 Node js 项目中 我尝试使用azure arm 消费包 https learn microsoft com en us javascript api azure arm consumption view azure node
  • 为什么 ioctl 返回“错误地址”

    我使用下面的代码从嵌入式板的 SPI 端口输出数据 olimex imx233 micro 这不是板特定的问题 当我运行代码时ioctl返回 地址错误 我正在修改代码http twilight ponies cz spi test c ht
  • 如何获取由而不是插入触发器插入的表标识?

    我有一个问题描述如下 我有一张表 其中有一个而不是插入触发器 create table TMessage ID int identity 1 1 dscp varchar 50 GO Alter trigger tr tmessage on
  • 颤振变化波二次贝塞尔曲线到点

    通过下面的实现代码 我们有了这个自定义形状设计 在这个设计中我想将其更改为 当我刚刚学习创建自定义形状时 我无法做到这一点 有任何人可以帮助我如何实现这一目标吗 thanks import package flutter material
  • 需要新的委派权限时未征求用户同意

    我有一个 ASP NET 应用程序 它使用 OWIN 中间件对我的 Azure Active Directory 实例进行身份验证 在 Azure 门户中 我已为 ASP NET 应用程序创建了应用程序注册 并且身份验证效果很好 用户已经登
  • 如何使用 jsp:include param 标记将对象传递到另一个 jsp

    我正在尝试使用 jsp include 标记将 DTO 对象从一个 jsp 发送到另一个 jsp 但它始终将其视为字符串 我无法在包含的 jsp 文件中使用 DTO 这是一个代码
  • IComparer 和 IEqualityComparer 接口中逆变的好处

    On the msdn页面 http msdn microsoft com en us library dd465120 aspx关于逆变 我发现一个非常有趣的例子 它显示了 IComparer 中逆变的好处 首先 他们使用相当奇怪的基类和
  • 如何关闭 jQuery 工具提示

    我一直在尝试使用 jQuery 制作非常简单的 javascript 工具提示 但遇到了困难 这个想法是有很少的内联元素 span 里面一个div The span元素将包含一个工具提示div带有一些 html 图像和链接 单击时应打开工具
  • Angular 日期选择器 - 动态更新 MAT_DATE_FORMATS

    我在一家Angular9与日期一起使用的应用程序 它显示并更新几个
  • 获得良好的 Google PageRank [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 在 SEO 中 人们经常谈论 GooglePageRank http en wikipedia org wiki PageRank 这有点像第 22
  • UIActivityViewController 关闭后正确的方向

    我正在从我的控制器呈现 UIActivityViewController 我遇到过轮换问题 选择某些数据共享选项后 假设 邮件 将显示邮件撰写视图控制器 但是 如果我旋转设备并随后关闭邮件控制器 我的 VC 不会旋转到当前方向 我尝试为 U
  • Android:时间计算,如何添加指定的分钟数

    我想向时间对象添加 15 分钟 这样 09 46 就会变成 10 01 Time time new Time time hours 9 time minutes 46 time minute 15 这不起作用 什么方式不行呢 如果问题是您的
  • 通过gradle构建spring-boot应用程序时,静态资源应该存储在哪里?

    我找到了存储静态文件的示例 src main webapp and src main resources static 有什么区别以及存储静态文件的最佳位置在哪里spring boot app 如果你的资源在src main webapp这
  • WCF 类型故障和内部服务器错误代码 500?

    这是我的回复信封
  • 将文本输入保存到 kivy 应用程序中的变量

    我正在制作一个基于文本的游戏 游戏有时会要求用户输入他们的姓氏 我已经找到了一种将名称保存到文件并从文件加载名称的方法 但我不知道如何保存已输入变量的文本 我尝试过网上看到的各种方法 但到目前为止没有一个对我有用 我的代码部分目前看起来像这
  • PayPal API 与 Laravel - 数据更新

    我正在尝试实施API of PayPal payment with Laravel 5 1 但是当我登录到PayPal sandbox 它使用我在帐户中使用的地址 并且还使用 PayPal 帐户中的名称而不是我网站中的数据 这是我的问题 我