簡體   English   中英

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

[英]Update PayPal Express Checkout Payment with orderId before executing payment

因此,我在網上進行了研究,但是在PayPal提供的用於快速結帳的類中找不到關於如何使用Patch方法的很好的解釋。

我的結帳流程分3步進行。

步驟1一切開始的頁面是一個簡單的“購物車查看器”頁面,其中有一個按鈕“使用PayPal結帳”當我們單擊該按鈕時,有一個javascript發布請求發送到我的服務器,要求它用PayPal Link答復PayPal Link (客戶將在此處登錄並批准交易)

步驟2在客戶批准並使用PayPal PaymentId返回我的網站后,我獲取此令牌並收集客戶信息,以在表單中自動填寫他們具有的PayPal PaymentId確認地址。

Step3客戶選擇送貨方式並僅單擊“ PayNow”,然后我將為其創建一個orderId,並將包含運費和OrderId的更新發送至PayPal

所以這是一些代碼

第三步代碼

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

好的,因此根本沒有有關補丁方法的文檔。

為了找到所需的路徑,您將需要查看JSON的create_payment方法,然后從中找出您需要添加的內容。 就我而言,我需要invoice_number所以我需要/transactions/0/invoice_number我們可以在這里看到 在此處輸入圖片說明

因此,由於我沒有交易中的發票編號。 我需要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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM