Heim  >  Artikel  >  PHP-Framework  >  Ausführliche Erklärung des Laravel-Zugangs zur PayPal-Zahlung

Ausführliche Erklärung des Laravel-Zugangs zur PayPal-Zahlung

藏色散人
藏色散人nach vorne
2020-06-15 12:02:574702Durchsuche

PayPal

PayPal, ein internationales Handelszahlungstool, das von vielen Benutzern auf der ganzen Welt verwendet wird, kann die Abholung und Zahlung im Ausland problemlos durchführen! Ein Konto ist universell, und wenn Sie PayPal-Händler werden, können Sie überall mehr Zahlungsmethoden akzeptieren.

Paypal SDK herunterladen

Fügen Sie „paypal/rest-api-sdk-php“: „1.7.4“ zu Composer.json hinzu, wie im Bild gezeigt:

Ausführliche Erklärung des Laravel-Zugangs zur PayPal-Zahlung

Ausführencomposer update

Entwicklerkonto registrieren, Testanwendung erstellen, Konto testen

Adresse:

https://developer.paypal.com

Erstellen Sie ein Sandbox-Testkonto

Konto-Backend (Sie können Ihre Verbrauchsaufzeichnungen sehen):

https://www.sandbox.paypal.com/signin?returnUri=https%3A%2F%2Fwww.sandbox.paypal.com%2Fmyaccount%2Fsummary&state=%2F

Erstellen Sie eine Anwendung

Ausführliche Erklärung des Laravel-Zugangs zur PayPal-Zahlung

Anwendungskonfiguration anzeigen

Klicken Sie auf die erstellte Anwendung, um die Konfigurations-Client-ID Secret anzuzeigen, die später für die Anforderungsschnittstelle verwendet wird. Sandbox ist die Testumgebung und Live ist die Umgebung.

Ausführliche Erklärung des Laravel-Zugangs zur PayPal-Zahlung

Erstellen Sie ein neues Testkonto

Sie können das festlegen Betrag und Passwort

Ausführliche Erklärung des Laravel-Zugangs zur PayPal-Zahlung

Zugangscode

Bestelllogik

<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use PayPal\Api\Payer;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\Details;
use PayPal\Api\Amount;
use PayPal\Api\Transaction;
use PayPal\Api\RedirectUrls;
use PayPal\Api\Payment;
use PayPal\Auth\OAuthTokenCredential;
use PayPal\Exception\PayPalConnectionException;
use PayPal\Rest\ApiContext;
use PayPal\Api\PaymentExecution;
class paypalController extends Controller
{
    const clientId = &#39;xxxxxxxxx&#39;;//应用Client ID
    const clientSecret = &#39;xxxxxxxx&#39;;//Secret
    const accept_url = &#39;http://xxx.laravel.com/Api/paypal/Callback&#39;; //支付成功和取消交易的跳转地址
    const Currency = &#39;USD&#39;;//货币单位
    protected $PayPal;
    public function __construct()
    {
        $this->PayPal = new ApiContext(
            new OAuthTokenCredential(
                self::clientId,
                self::clientSecret
            )
        );
 //如果是沙盒测试环境不设置,请注释掉
//        $this->PayPal->setConfig(
//            array(
//                &#39;mode&#39; => &#39;live&#39;,
//            )
//        );
    }
    /**
     * @param
     * $product 商品
     * $price 价钱
     * $shipping 运费
     * $description 描述内容
     */
    public function pay()
    {
        $product = &#39;1123&#39;;
        $price = 1;
        $shipping = 0;
        $description = &#39;1123123&#39;;
        $paypal = $this->PayPal;
        $total = $price + $shipping;//总价
        $payer = new Payer();
        $payer->setPaymentMethod(&#39;paypal&#39;);
        $item = new Item();
        $item->setName($product)->setCurrency(self::Currency)->setQuantity(1)->setPrice($price); 
        $itemList = new ItemList();
        $itemList->setItems([$item]);
        $details = new Details();
        $details->setShipping($shipping)->setSubtotal($price);
        $amount = new Amount();
        $amount->setCurrency(self::Currency)->setTotal($total)->setDetails($details);
        $transaction = new Transaction();
        $transaction->setAmount($amount)->setItemList($itemList)->setDescription($description)->setInvoiceNumber(uniqid());
        $redirectUrls = new RedirectUrls();
        $redirectUrls->setReturnUrl(self::accept_url . &#39;?success=true&#39;)->setCancelUrl(self::accept_url . &#39;/?success=false&#39;);
        $payment = new Payment();
        $payment->setIntent(&#39;sale&#39;)->setPayer($payer)->setRedirectUrls($redirectUrls)->setTransactions([$transaction]);
        try {
            $payment->create($paypal);
        } catch (PayPalConnectionException $e) {
            echo $e->getData();
            die();
        }
        $approvalUrl = $payment->getApprovalLink();
        header("Location: {$approvalUrl}");
    }

Nach Abschluss des Bestelllogik, Sie gelangen zur Paypal-Zahlungsseite. Zum ersten Mal müssen Sie das Kontopasswort eingeben, wie im Bild gezeigt:

Ausführliche Erklärung des Laravel-Zugangs zur PayPal-Zahlung

Geben Sie die Zahlungsseite ein. Wenn Sie die PayPal-Restzahlung auswählen, wird die Zahlung abgeschlossen oder die Transaktion abgebrochen. Es wird automatisch zu der Sprungadresse gesprungen, die Sie bei der Bestellung angegeben haben, und zwei Parameter werden übergeben: paymentId (Paypal-Bestellnummer) und PayerID (Benutzer-ID). kann entsprechende Logik entsprechend Ihrer Geschäftslogik schreiben. Im Allgemeinen bestätigt der synchrone Rückruf, ob der Benutzer zahlt, und der asynchrone Rückruf übernimmt die Geschäftslogik

Synchroner Rückruf

 /**
     * 回调
     */
    public function Callback()
    {
        $success = trim($_GET[&#39;success&#39;]);
        if ($success == &#39;false&#39; && !isset($_GET[&#39;paymentId&#39;]) && !isset($_GET[&#39;PayerID&#39;])) {
            echo &#39;取消付款&#39;;die;
        }
        $paymentId = trim($_GET[&#39;paymentId&#39;]);
        $PayerID = trim($_GET[&#39;PayerID&#39;]);
        if (!isset($success, $paymentId, $PayerID)) {
            echo &#39;支付失败&#39;;die;
        }
        if ((bool)$_GET[&#39;success&#39;] === &#39;false&#39;) {
            echo  &#39;支付失败,支付ID【&#39; . $paymentId . &#39;】,支付人ID【&#39; . $PayerID . &#39;】&#39;;die;
        }
        $payment = Payment::get($paymentId, $this->PayPal);
        $execute = new PaymentExecution();
        $execute->setPayerId($PayerID);
        try {
            $payment->execute($execute, $this->PayPal);
        } catch (Exception $e) {
            echo &#39;,支付失败,支付ID【&#39; . $paymentId . &#39;】,支付人ID【&#39; . $PayerID . &#39;】&#39;;die;
        }
        echo &#39;支付成功,支付ID【&#39; . $paymentId . &#39;】,支付人ID【&#39; . $PayerID . &#39;】&#39;;die;
    }

Asynchroner Rückruf

Die Rückrufadresse wird im Hintergrund konfiguriert. Die Einstellung dauert normalerweise einige Zeit, bis sie wirksam wird Morgen, wie im Bild gezeigt:

Ausführliche Erklärung des Laravel-Zugangs zur PayPal-Zahlung

Sie können viele Ereignisse überprüfen, um Benachrichtigungen zu senden, aber das Wichtigste ist, dass die Zahlung abgeschlossen ist (Zahlungsverkauf abgeschlossen) und die Zahlung erfolgt Verkauf zurückerstattet

Zahlung abgeschlossen

public function notify(){
        //获取回调结果
        $json_data = $this->get_JsonData();
        if(!empty($json_data)){
             Log::debug("paypal notify info:\r\n".json_encode($json_data));
        }else{
            Log::debug("paypal notify fail:参加为空");
        }
          //自己打印$json_data的值看有那些是你业务上用到的
          //比如我用到
          $data[&#39;invoice&#39;] = $json_data[&#39;resource&#39;][&#39;invoice_number&#39;];
          $data[&#39;txn_id&#39;] = $json_data[&#39;resource&#39;][&#39;id&#39;];
          $data[&#39;total&#39;] = $json_data[&#39;resource&#39;][&#39;amount&#39;][&#39;total&#39;];
          $data[&#39;status&#39;] = isset($json_data[&#39;status&#39;])?$json_data[&#39;status&#39;]:&#39;&#39;;
          $data[&#39;state&#39;] = $json_data[&#39;resource&#39;][&#39;state&#39;];
        try {
                 //处理相关业务
        } catch (\Exception $e) {
            //记录错误日志
            Log::error("paypal notify fail:".$e->getMessage());
            return "fail";
        }
        return "success";
    }
    public function get_JsonData(){
        $json = file_get_contents(&#39;php://input&#39;);
        if ($json) {
            $json = str_replace("&#39;", &#39;&#39;, $json);
            $json = json_decode($json,true);
        }
        return $json;
    }

Bearbeitung der Rückerstattung

public function returnMoney()
    {
        try {
            $txn_id = "xxxxxxx";  //异步加调中拿到的id
            $amt = new Amount();
            $amt->setCurrency(&#39;USD&#39;)
                ->setTotal(&#39;99&#39;);  // 退款的费用
            $refund = new Refund();
            $refund->setAmount($amt);
            $sale = new Sale();
            $sale->setId($txn_id);
            $refundedSale = $sale->refund($refund, $this->PayPal);
        } catch (\Exception $e) {
            // PayPal无效退款
            return json_decode(json_encode([&#39;message&#39; => $e->getMessage(), &#39;code&#39; => $e->getCode(), &#39;state&#39; => $e->getMessage()]));  // to object
        }
        // 退款完成
        return $refundedSale; 
    }

Zugehörigen Ablauf anzeigen

Ausführliche Erklärung des Laravel-Zugangs zur PayPal-Zahlung

Zusammenfassung

Paypal ist immer noch sehr hilfreich für den Ausbau des Auslandszahlungsgeschäfts, es unterstützt die Verknüpfung mehrerer Währungen mit verschiedenen Kreditkarten und Bankkarten Der Nachteil ist, dass beim Zugriff keine Paypal-Techniker zur Verfügung stehen. Ich habe den Paypal-Verbindungsmitarbeiter jedoch erst nach Abschluss des Zugriffs kontaktiert. Es ist nicht sehr schwierig Informationen online. Ich hoffe, dieser Artikel kann Ihnen helfen. Wenn Sie an einer Zahlung im Ausland interessiert sind, können Sie dies mit mir besprechen.

Empfohlene verwandte Tutorials: „laravel

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung des Laravel-Zugangs zur PayPal-Zahlung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen