簡體   English   中英

PayPal REST API(PHP)未完成交易

[英]PayPal REST API (PHP) not completing transaction

我對PayPal的REST API相對較新,因此這里可能缺少關鍵要素,但是我所做的工作是在GitHub上建立了一個類似於它們的示例:

https://github.com/paypal/rest-api-sdk-php/blob/master/sample/payments/CreatePaymentUsingPayPal.php

我非常接近這一點,因為我在PayPal開發人員網站上創建的應用中將API上下文設置為客戶端ID和密碼(首先使用沙箱,現在使用實時沙箱)。 這是創建apiContext之后的部分:

            $payer = new Payer();
            $payer->setPayment_method("paypal");

            $item = new Item();
            $item -> setName($itemDescription)
                    -> setCurrency("USD")
                    -> setQuantity(1)
                    -> setPrice($itemPrice);

            $itemList = new ItemList();
            $itemList->setItems(array($item));

            $amount = new Amount();
            $amount->setCurrency("USD")
                    ->setTotal($itemPrice);

            $transaction = new Transaction();
            $transaction->setAmount($amount)
                    ->setItemList($itemList)
                    ->setDescription($itemDescription);

            $redirectURLs = new RedirectUrls();
            $redirectURLs->setReturnUrl($successURL);
            $redirectURLs->setCancelUrl($cancelURL);

            $payment = new Payment();
            $payment->setIntent("sale");
            $payment->setPayer($payer);
            $payment->setRedirectUrls($redirectURLs);
            $payment->setTransactions(array($transaction));

            try {
                    $payment->create($apiContext);
            }
            catch (PayPal\Exception\PPConnectionException $ex) {

                    print "Exception:  " . $ex->getMessage() . PHP_EOL;
                    var_dump($ex->getData());
                    exit(1);
            }

            # get the redirect URL to pass the user on to PayPal for payment processing
            $redirectURL = "";
            foreach ( $payment->getLinks() as $link ) {
                    if ( $link->getRel() == "approval_url" ) {
                            $redirectURL = $link->getHref();
                            break;
                    }
            }

            // if we get a URL, redirect the user to PayPal's website
            if ( $redirectURL != "" ) {

                    $ppPayID = $payment->getId();

                    # write the ID to the DB
                    $dbQuery = "update members set ppPayID = '" . dbAccess("sanitize", $ppPayID) . "' where memberID = $memberID;";

                    # update the DB
                    $dbResults = dbAccess("query", $dbQuery);

                    //header("Location: $redirectURL");
                    print "<script language='JavaScript'>location.href = '$redirectURL';</script>";
                    exit;
            }
            else {
                    return false;
            }

一切似乎都運行良好:傳遞給PayPal時,我看到了項目信息,我可以取消交易並通過取消URL返回我的PHP應用程序,我什至能夠使用真實帳戶提交付款並被退回通過成功網址返回我的應用。 這是它的樣子;

http://example.com/scripts.php?pp=success&memberID=1&token=EC-7G861271R3854####&PayerID=77PAUYJCFJ###

(其中#也是字母數字字符,以防萬一)

我的問題是,盡管交易看起來很成功,但交易沒有顯示在我的商人帳戶的任何地方,也沒有顯示在我的個人帳戶上。 知道這里發生了什么嗎?

因此,該示例缺少交易過程的關鍵部分:執行付款。 對於其他為此苦苦掙扎的人,以下是實現此目的的必要代碼:

https://developer.paypal.com/docs/api/#execute-an-approved-paypal-payment

注意:您需要像在數據庫中一樣捕獲$ payment-> getID,然后將URL PayerID發送回去。

該示例分為兩部分。 第二部分是接收成功返回的URL,並處理請求。

正如您在https://github.com/paypal/PayPal-PHP-SDK/blob/master/sample/payments/ExecutePayment.php中看到的那樣,您需要使用請求中提供的ID執行付款。

根據您的用例,我將繼續進行下去,看看是否可以將此頁面與該頁面合並,以使它對人們來說變得顯而易見。 如果沒有,我想在示例代碼中以某種方式非常清楚地表明,在該示例中,有比該php文件更多的內容。

暫無
暫無

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

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