在执行付款之前使用orderId更新PayPal Express Checkout付款

时间:2016-12-07 19:14:05

标签: php api paypal

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

我的结帐流程在3Steps中运行。

步骤1 一切都开始的页面是一个简单的“购物车查看器页面”,其中有一个按钮“Checkout With PayPal” 当我们点击该按钮时,有一个javascript帖子请求被发送到我的服务器,要求它回复PayPal Link(客户将登录并批准交易)

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

步骤3 客户选择送货方式,然后点击“PayNow”,然后我会创建一个订单ID到他的名字,并发送更新到PayPal与运费和OrderId

所以这里有一些代码

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

它不适用于PayPal上的交易。

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

$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()方法的路径

1 个答案:

答案 0 :(得分:0)

好的,对于补丁方法,根本没有文档。

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

因为我在交易中没有发票号码。我需要patch op add

$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);
相关问题