在我的網站上用戶可以用物品填寫他們的訂單筐。用PayPal結賬我的訂單筐
一旦完成,他們可以點擊結帳按鈕。
我希望他們使用PayPal結帳。
一旦用戶點擊結賬按鈕,用戶將被重定向到PayPal,並看到要支付的產品概覽。
如果用戶完成支付流程,用戶將被重定向到我的成功頁面。
但是,我期望成功頁面也收到付款的交易ID,但貝寶只發回一個令牌和一個payerid。
我結賬形式如下:
<form action="/en/checkout">
<input type="submit" name="submit" value="Checkout">
</form>
我的代碼,不會結帳是:
function checkoutAction()
{
$request = $this->getRequest();
require_once(LIB_PATH.'/MFW/Paypal/Flows/Paypal_NVP.php');
$paypal_nvp = new MFW_Paypal_NVP();
// this should normally be filled by looping though the basket items
$data = array('L_PAYMENTREQUEST_0_NAME0'=>'Single License',
'L_PAYMENTREQUEST_0_NUMBER0'=>'1111-2222-3333-4444-5555-6666-7777-8888',
'L_PAYMENTREQUEST_0_AMT0'=>39.99, // or enterprise 299.00
'L_PAYMENTREQUEST_0_QTY0'=>1,
);
$_SESSION['Payment_Amount'] = 39.99;
$result = $paypal_nvp->CallShortcutExpressCheckout(59.98, $data);
$ack = strtoupper($result['ACK']);
if($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING') {
$paypal->RedirectToPayPal($result['TOKEN']);
exit();
}
}
在Paypal_NCP類的代碼:
function generate_nvp_string($total_value, $data = array())
{
$params = array('PAYMENTREQUEST_0_AMT'=>$total_value,
'PAYMENTREQUEST_0_PAYMENTACTION'=>$this->payment_type,
'RETURNURL'=>$this->return_url,
'CANCELURL'=>$this->cancel_url,
'PAYMENTREQUEST_0_CURRENCYCODE'=>$this->currency,
);
$params = array_merge($params, $data);
$nvp_string = '';
foreach($params as $name => $value) {
$nvp_string.= '&'.$name.'='.$value;
}
// example string
// &PAYMENTREQUEST_0_AMT=39.99&PAYMENTREQUEST_0_PAYMENTACTION=Sale&RETURNURL=http://return-address&CANCELURL=http://cancel-address&PAYMENTREQUEST_0_CURRENCYCODE=EUR&L_PAYMENTREQUEST_0_NAME0=Single License&L_PAYMENTREQUEST_0_NUMBER0=1111-2222-3333-4444-5555-6666-7777-8888&L_PAYMENTREQUEST_0_AMT0=39.99&L_PAYMENTREQUEST_0_QTY0=1
return $nvp_string;
}
function CallShortcutExpressCheckout($total_value, $data = array())
{
$_SESSION['currencyCodeType'] = $this->currency;
$_SESSION['PaymentType'] = $this->payment_type;
$result = $this->hash_call('SetExpressCheckout', $this->generate_nvp_string($total_value, $data));
$ack = strtoupper($result['ACK']);
if ($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING') {
$_SESSION['TOKEN'] = urldecode($result['TOKEN']);
}
return $result;
}
那麼怎麼辦我得到的交易信息讓我能夠在後臺處理付款事宜? (我需要一個交易ID爲此)
沒有用過你已經發布什麼,但看起來非常有前途。我會去嘗試一下。我真的很討厭問愚蠢的問題或RTFM手動問題。但PayPal的文檔只是我一生中遇到過的最糟糕的文檔。不可能在那裏找到任何東西。我還不需要IPN來檢查付款狀態。電子支票和東西(可能需要一些時間來處理/驗證)? – PeeHaa
是的,爲了跟蹤創建後的交易,您可以使用IPN。但這不是必需的。在您呼叫DoExpressCheckoutPayment並收到ACK =成功響應後,您還將獲得PAYMENTSTATUS =已完成或待定。 – Robert