簡體   English   中英

基本Paypal沙盒授權和Express Checkout捕獲邏輯

[英]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調用: SetExpressCheckoutGetExpressCheckoutDetailsDoExpressCheckoutPayment

SEC只是此過程的第一步,是的,可以在調用中包含更多參數,以便可以顯示所有訂單數據並按預期使用它們,如您在前面的鏈接中看到的那樣。

在最后一次DECP呼叫完成之前,不會動用任何資金,只有該請求中包含的詳細信息將被保存並通過PayPal系統傳遞。

暫無
暫無

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

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