Heim > Artikel > PHP-Framework > Ausführliche Erklärung des Laravel-Zugangs zur PayPal-Zahlung
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ü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
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.
Erstellen Sie ein neues Testkonto
Sie können das festlegen Betrag und Passwort
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 = 'xxxxxxxxx';//应用Client ID const clientSecret = 'xxxxxxxx';//Secret const accept_url = 'http://xxx.laravel.com/Api/paypal/Callback'; //支付成功和取消交易的跳转地址 const Currency = 'USD';//货币单位 protected $PayPal; public function __construct() { $this->PayPal = new ApiContext( new OAuthTokenCredential( self::clientId, self::clientSecret ) ); //如果是沙盒测试环境不设置,请注释掉 // $this->PayPal->setConfig( // array( // 'mode' => 'live', // ) // ); } /** * @param * $product 商品 * $price 价钱 * $shipping 运费 * $description 描述内容 */ public function pay() { $product = '1123'; $price = 1; $shipping = 0; $description = '1123123'; $paypal = $this->PayPal; $total = $price + $shipping;//总价 $payer = new Payer(); $payer->setPaymentMethod('paypal'); $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 . '?success=true')->setCancelUrl(self::accept_url . '/?success=false'); $payment = new Payment(); $payment->setIntent('sale')->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:
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['success']); if ($success == 'false' && !isset($_GET['paymentId']) && !isset($_GET['PayerID'])) { echo '取消付款';die; } $paymentId = trim($_GET['paymentId']); $PayerID = trim($_GET['PayerID']); if (!isset($success, $paymentId, $PayerID)) { echo '支付失败';die; } if ((bool)$_GET['success'] === 'false') { echo '支付失败,支付ID【' . $paymentId . '】,支付人ID【' . $PayerID . '】';die; } $payment = Payment::get($paymentId, $this->PayPal); $execute = new PaymentExecution(); $execute->setPayerId($PayerID); try { $payment->execute($execute, $this->PayPal); } catch (Exception $e) { echo ',支付失败,支付ID【' . $paymentId . '】,支付人ID【' . $PayerID . '】';die; } echo '支付成功,支付ID【' . $paymentId . '】,支付人ID【' . $PayerID . '】';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:
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['invoice'] = $json_data['resource']['invoice_number']; $data['txn_id'] = $json_data['resource']['id']; $data['total'] = $json_data['resource']['amount']['total']; $data['status'] = isset($json_data['status'])?$json_data['status']:''; $data['state'] = $json_data['resource']['state']; try { //处理相关业务 } catch (\Exception $e) { //记录错误日志 Log::error("paypal notify fail:".$e->getMessage()); return "fail"; } return "success"; } public function get_JsonData(){ $json = file_get_contents('php://input'); if ($json) { $json = str_replace("'", '', $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('USD') ->setTotal('99'); // 退款的费用 $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(['message' => $e->getMessage(), 'code' => $e->getCode(), 'state' => $e->getMessage()])); // to object } // 退款完成 return $refundedSale; }
Zugehörigen Ablauf anzeigen
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!