【发布时间】:2017-04-22 20:55:04
【问题描述】:
所以我在网上进行了研究,但我找不到任何关于如何使用 PayPal 提供的快速结账类中的 Patch 方法的很好解释。
我的结帐流程分为 3 个步骤。
第一步
一切开始的页面是一个简单的“购物车查看器页面”,其中有一个按钮“使用 PayPal 结帐”
当我们单击该按钮时,会向我的服务器发送一个 javascript 发布请求,要求它回复 PayPal Link(客户将登录并批准交易)
第二步
在客户批准并以PayPal PaymentId 回到我的网站后,我获取此令牌并收集客户信息以使用他们存档的贝宝确认地址自动填写表格
第三步
客户选择送货方式并点击“PayNow”,然后我会为他的名字创建一个 orderId,并将包含运费和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);
它不适用于贝宝上的交易。
所以我对如何做到这一点进行了一些研究,发现我需要使用
$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() 方法的路径
【问题讨论】: