![](/img/trans.png)
[英]PayPal Express Checkout, update database on successful payment
[英]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.