[英]Basic Paypal Sandbox Authorization and Capture Logic for Express Checkout
我不理解文檔,或者文檔的部分不正確。 這是我第一次做除了基本IPN響應之外的任何事情。
我有一個開發人員帳戶,設置了包括簽名在內的所有憑據。 我的整個網站是PHP,我希望對所有Paypal授權和捕獲使用一個功能。 我現在正在編寫此功能,並且僅具有以下非動態功能
function testHandler()
{
if ( function_exists('get_magic_quotes_gpc') ) { $get_magic_quotes_exists = true; }
$req = '';
$myPost = array(
'USER' => 'USER',
'PWD' => 'PASSWORD',
'SIGNATURE' => 'SIGNATURE',
'METHOD' => 'SetExpressCheckout',
//'METHOD' => 'GetExpressCheckoutDetails',
//'TOKEN' => 'EC-XXXXXXXXXXXX',
'VERSION' => '95'
'PAYMENTREQUEST_0_PAYMENTACTION'=> 'Authorization', #Sets up authorization for a single future payment
'PAYMENTREQUEST_0_AMT' => '1', #The amount authorized
'PAYMENTREQUEST_0_CURRENCYCODE' => 'USD', #The currency, e.g. US dollars
'cancelUrl' => 'http://www.yourdomain.com/cancel.html',
'returnUrl' => 'http://www.yourdomain.com/success.html'
);
foreach ( $myPost as $key => $value )
{
if ( $get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1 )
{
$value = urlencode(stripslashes($value));
}
else
{
$value = urlencode($value);
}
$req .= "&$key=$value";
}
$ch = curl_init( 'https://api-3t.sandbox.paypal.com/nvp' );
curl_setopt( $ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1) ;
curl_setopt( $ch, CURLOPT_POST, 1) ;
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $req );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 1 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt( $ch, CURLOPT_FORBID_REUSE, 1 );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Connection: Close') );
if( !( $res = curl_exec($ch) ) ) { curl_close($ch); exit; }
curl_close($ch);
return $res;
}
首先,這是我需要的所有后端嗎? 提供$ myPost的內容適合我們在此過程中采取的任何步驟。
我已經在服務器上運行了此腳本,它確實返回了令牌。 我手動輸入令牌來模擬要重定向的客戶,並且看到一個空白的結帳頁面,這是預期的,因為在任何時候都沒有傳遞任何商品詳細信息。
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXXX
創建令牌(如標准快速結帳變量)時,是否應該在$ myPost中包含訂單詳細信息? item_name等。即使價格過去了,為什么還沒有顯示呢? 結帳頁面的摘要完全沒有內容。
接下來,需要使用$ myPost中被注釋掉的部分來通過GetExpressCheckoutDetails檢索payerID。
當我嘗試運行該步驟的代碼時,得到此響應
TOKEN=EC%2dXXXXXXXXXX&BILLINGAGREEMENTACCEPTEDSTATUS=0&CHECKOUTSTATUS=PaymentActionNotInitiated&TIMESTAMP=2015%2d01%2d12T22%3a47%3a01Z&CORRELATIONID=403d2feb197db&ACK=Success&VERSION=95&BUILD=14726230&CURRENCYCODE=USD&AMT=1%2e00&SHIPPINGAMT=0%2e00&HANDLINGAMT=0%2e00&TAXAMT=0%2e00&INSURANCEAMT=0%2e00&SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_CURRENCYCODE=USD&PAYMENTREQUEST_0_AMT=1%2e00&PAYMENTREQUEST_0_SHIPPINGAMT=0%2e00&PAYMENTREQUEST_0_HANDLINGAMT=0%2e00&PAYMENTREQUEST_0_TAXAMT=0%2e00&PAYMENTREQUEST_0_INSURANCEAMT=0%2e00&PAYMENTREQUEST_0_SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED=false&PAYMENTREQUESTINFO_0_ERRORCODE=0
看到沒有輸入付款信息,這很有意義。 我是否應該在沙盒中輸入真實的財務信息以進行下一步? 創建令牌時,我應該從客戶那里收集並通過它嗎? 在哪里可以訪問此創建的令牌並強制執行下一步?
如果這是實時的活動,並且只要我能夠傳遞商品的詳細信息,以使結帳頁面不為空白,則客戶將輸入其詳細信息,並使用其令牌在URL中重定向到下一頁。 那時我可以將令牌與GetExpressCheckoutDetails一起使用並檢索PayerID? 通過該PayerID,我可以使用DoExpressCheckoutPayment來獲取交易ID以進行最終付款捕獲?
謝謝閱讀
聽起來您已經掌握了要點。 快速結賬由3個獨立的API調用: SetExpressCheckout , GetExpressCheckoutDetails和DoExpressCheckoutPayment 。
SEC只是此過程的第一步,是的,可以在調用中包含更多參數,以便可以顯示所有訂單數據並按預期使用它們,如您在前面的鏈接中看到的那樣。
在最后一次DECP呼叫完成之前,不會動用任何資金,只有該請求中包含的詳細信息將被保存並通過PayPal系統傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.