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

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

藏色散人
Freigeben: 2020-06-15 12:02:57
nach vorne
4853 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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 dem Login kopieren

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;
    }
Nach dem Login kopieren

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;
    }
Nach dem Login kopieren

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; 
    }
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage