【问题标题】:Update PayPal Express Checkout Payment with orderId before executing payment在执行付款之前使用 orderId 更新 PayPal Express Checkout Payment
【发布时间】:2017-04-22 20:55:04
【问题描述】:

所以我在网上进行了研究,但我找不到任何关于如何使用 PayPal 提供的快速结账类中的 Patch 方法的很好解释。

我的结帐流程分为 3 个步骤。

第一步 一切开始的页面是一个简单的“购物车查看器页面”,其中有一个按钮“使用 PayPal 结帐” 当我们单击该按钮时,会向我的服务器发送一个 javascript 发布请求,要求它回复 PayPal Link(客户将登录并批准交易)

第二步 在客户批准并以PayPal PaymentId 回到我的网站后,我获取此令牌并收集客户信息以使用他们存档的贝宝确认地址自动填写表格

第三步 客户选择送货方式并点击“PayNow”,然后我会为他的名字创建一个 orderId,并将包含运费和OrderId

的更新发送到 PayPal

这里有一些代码

Step3 代码

//$PaymentId = PayPal Payement Id Customer Returned with from paypal
//PayerId = PayPal PayerId Customer returned with from paypal
//$SubTotal,$ShippingCost,$Tax,$Total,$NewOrderNumber = Are setted with appropriate values.

$PP_Payment = PayPal\Api\Payment::get($PaymentId,$PayPalAPIContext);
$PP_Execution = new PayPal\API\PaymentExecution();
$PP_Execution -> setPayerId($PayerId);

$PP_Transaction = new \PayPal\Api\Transaction();
$PP_Amount = new \PayPal\Api\Amount();
$PP_Details = new \PayPal\Api\Details();

$PP_Details -> setSubtotal($SubTotal);
$PP_Details -> setShipping($ShippingCost);
$PP_Details -> setTax($Tax);

$PP_Amount -> setCurrency('CAD');
$PP_Amount -> setTotal($Total);
$PP_Amount -> setDetails($PP_Details);

$PP_Transaction -> setInvoiceNumber($NewOrderNumber);
$PP_Transaction -> setAmount($PP_Amount);
$PP_Transaction -> setDescription('Order #'.$NewOrderNumber);

$PP_Execution -> addTransaction($PP_Transaction);
$PP_Payment -> setIntent('sale');

$PP_Response = $PP_Payment -> execute($PP_Execution,$PayPalAPIContext);
try{
    if($PP_Response -> getState() == 'approved')
    {
        //Stuff to do when transaction did go tru!
    }
}
catch(\PayPal\Exception\PayPalConnectionException $e)
{
    //Error Handeling Code Here!
}

所以即使我设置了这两个

$PP_Transaction -> setInvoiceNumber($NewOrderNumber);
$PP_Transaction -> setAmount($PP_Amount);

它不适用于贝宝上的交易。

所以我对如何做到这一点进行了一些研究,发现我需要使用

$PP_Patch = new \PayPal\Api\Patch();

但是没有关于使用什么来更新发票编号和运输的文档 所以我尝试用以下代码即兴发挥

$PP_Patch = new \PayPal\Api\Patch();
$PP_Patch -> setOp('add')
    ->setPath('/transactions/0')
    ->setValue(json_decode('{
    "invoice_number":'.$NewOrderNumber.'
    }'));

$PP_Payment -> update($PP_Patch,$PayPalAPIContext);

那么有人对此有一点经验吗?有人可以指出正确的方向,或者只是一个正确的文档,显示用于setOp() 方法的路径

【问题讨论】:

    标签: php api paypal


    【解决方案1】:

    好的,所以补丁方法根本没有文档。

    要找出您需要的路径,您需要查看 create_payment 方法JSON 并从中找出您需要添加的内容。就我而言,我需要invoice_number,所以我需要/transactions/0/invoice_number 我们可以看到它here

    因此,由于我在交易中没有发票编号。我需要patchopadd

    $PP_Patch = new \PayPal\Api\Patch();
    $PP_Patch -> setOp('add');
    $PP_Patch -> setPath('/transactions/0/invoice_number');
    $PP_Patch -> setValue($NewOrderNumber);
    $PP_PathReq = new \PayPal\Api\PatchRequest();
    $PP_PathReq -> setPatches(array($PP_Patch));
    $PP_Payment -> update($PP_PathReq,$PayPalAPIContext);
    

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 2017-08-18
      • 2018-08-25
      • 2018-08-05
      • 2015-11-11
      • 2010-12-03
      • 2014-08-21
      • 2013-07-16
      相关资源
      最近更新 更多