Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung des PHP-Andockens mit PayPal-Zahlung

Ausführliche Erklärung des PHP-Andockens mit PayPal-Zahlung

藏色散人
藏色散人nach vorne
2021-03-02 15:34:044447Durchsuche

Umgebungsvorbereitung

  • Registrieren Sie ein PayPal-Konto.
  • Registrieren Sie ein PayPal-Entwicklerkonto.
  • Erstellen Sie ein PayPal-Sandbox-Testkonto.
  • Erstellen Sie eine PayPal-Anwendung
  • Zahlungserfolg umsetzen Rückruf
  • Rückerstattung realisieren
  • Weitere API-Code-Vorlagen
  • Registrieren Sie ein PayPal-Konto

www.paypal.com Registrieren Sie ein HändlerkontoWählen Sie „Händlerbenutzer erstellen“ und geben Sie die erforderlichen Informationen ein , und die Registrierung ist abgeschlossen E-Mail-Aktivierung

  • Registrieren Sie ein PayPal-Entwicklerkonto

developer.paypal.com Verwenden Sie das im vorherigen Schritt registrierte Konto, um sich anzumeldenKlicken Sie zum Erstellen auf Konten in der linken Navigationsleiste zwei Sandbox-Konten und ein persönliches Konto werden für die Zahlung verwendet, und ein Händlerkonto (Geschäftskonto) wird standardmäßig für die Erstellung zweier Konten verwendet. Sie können diese nach der Erstellung des Kontos selbst erstellen. Denken Sie daran, für spätere Tests einen Saldo auf das Girokonto hinzuzufügen.

  • Verwenden Sie das soeben erstellte Testkonto, um sich auf der Sandbox-Testseite anzumelden, überprüfen Sie den Betrag und die Transaktionsinformationen www.sandbox.paypal.com

  • Ausführliche Erklärung des PHP-Andockens mit PayPal-Zahlung
  • Erstellen Sie eine Sandbox-Anwendungs-APP

Ein Konto wird standardmäßig als Standardanwendung erstellt. Klicken Sie zum Anzeigen, um die Client-ID und das Geheimnis abzurufen. Sie werden beim nächsten Schnittstellenaufruf verwendet (bitte erstellen Sie eine Live-Anwendung neu, wenn Sie online gehen). Laden Sie SDK

    i herunter, verwenden Sie das Laravel -Framework und verwenden Sie den Composer, um das PayPal -Paket herunterzuladen.

  • Ausführliche Erklärung des PHP-Andockens mit PayPal-Zahlung

Das Folgende ist ein Rückrufcode-Snippet für eine erfolgreiche Zahlung, Pseudocode-Code

function createPayPal(){
      $shippingPrice = 2;
      $taxPrice = 0;
      $subTotal = 26;
      $item1 = new PayPal\Api\Item();
      $item1->setName("产品2")->setCurrency("USD")->setQuantity(1)->setPrice(10);
      $item2 = new PayPal\Api\Item();
      $item2->setName("产品1")->setCurrency("USD")->setQuantity(2)->setPrice(8);

      $itemList = new PayPal\Api\ItemList();
      $itemList->addItems([$item1,$item2]);

      // Set payment details
      $details = new PayPal\Api\Details();
      $details->setShipping($shippingPrice)->setTax($taxPrice)->setSubtotal($subTotal);

      // Set payment amount
      //注意,此处的subtotal,必须是产品数*产品价格,所有值必须是正确的,否则会报错
      $total = $shippingPrice + $subTotal + $taxPrice;
      $amount = new PayPal\Api\Amount();
      $amount->setCurrency("USD")->setTotal($total)->setDetails($details);

      // Set transaction object
      $transaction = new PayPal\Api\Transaction();
      $transaction->setAmount($amount)->setItemList($itemList)->setDescription("这是交易描述")
          ->setInvoiceNumber(uniqid());//setInvoiceNumber为支付唯一标识符,在使用时建议改成订单号

      $payer = new PayPal\Api\Payer();
      $payer->setPaymentMethod('paypal');//["credit_card", "paypal"]
      $redirectUrls = new PayPal\Api\RedirectUrls();
      $redirectUrl = "http://test.com/redirect/success";//支付成功跳转的回调
      $cancelUrl = "http://test.com/redirect/cancel";//取消支付的回调
      $redirectUrls->setReturnUrl($redirectUrl)->setCancelUrl($cancelUrl);

      // Create the full payment object
      $payment = new PayPal\Api\Payment();
      $payment->setIntent("sale")->setPayer($payer)->setRedirectUrls($redirectUrls)->addTransaction($transaction);

      try {
          $clientId = "xxxxxx";//上面应用的clientId和secret
          $secret = "XXXXXX";
          $oAuth = new \PayPal\Auth\OAuthTokenCredential($clientId, $secret);
          $apiContext =  new \PayPal\Rest\ApiContext($oAuth);
          if(env('APP_DEBUG') === false ){
              $apiContext->setConfig(['mode' => 'live']);//设置线上环境,默认是sandbox
          }
          $payment->create($apiContext);
          $approvalUrl = $payment->getApprovalLink();
          dd($approvalUrl);//这个是请求支付的链接,在浏览器中请求此链接就会跳转到支付页面
      } catch (\Exception $e) {
          dd($e->getMessage());//错误提示
      }
  }

  • Rückerstattung
  • composer require paypal/rest-api-sdk-php
Die Rückerstattung muss eine erfolgreiche Einzahlungsscheinnummer haben

Eine Belegnummer kann für mehrere Rückerstattungen verwendet werden

  • Nachdem die Rückerstattung erfolgreich war, wird sie nicht im Transaktionsdatensatz des Kontos angezeigt. Melden Sie sich beim Testen bitte beim Testkonto an und notieren Sie die Änderungen im Kontostand selbst, um festzustellen, ob die Rückerstattung erfolgt Die Rückerstattung ist erfolgreich

    Ausführliche Erklärung des PHP-Andockens mit PayPal-ZahlungDas Guthaben des Händlerkontos wird reduziert und die Bearbeitungsgebühr erhöht (die Bearbeitungsgebühr ist die Übergebühr der vorherigen Zahlung), das Guthaben des Benutzerkontos erhöht sich

    function payRedirect(Request $request)
      {
          $paymentID = $request->get('paymentId');
          $payerId = $request->get('PayerID');
    
          $clientId = "xxxxxx";//上面应用的clientId和secret
          $secret = "XXXXXX";
          $oAuth = new \PayPal\Auth\OAuthTokenCredential($clientId, $secret);
          $apiContext =  new \PayPal\Rest\ApiContext($oAuth);       
          if(env('APP_DEBUG') === false ){
              $apiContext->setConfig(['mode' => 'live']);//设置线上环境,默认是sandbox
          }
          $payment = \PayPal\Api\Payment::get($paymentID, $apiContext);
    
          $execute = new \PayPal\Api\PaymentExecution();
          $execute->setPayerId($payerId);
    
          try{
              $payment = $payment->execute($execute, $apiContext);//执行,从paypal获取支付结果
              $paymentState = $payment->getState();//Possible values: created, approved, failed.
              $invoiceNum = $payment->getTransactions()[0]->getInvoiceNumber();
              $payNum = $payment->getTransactions()[0]->getRelatedResources()[0]->getSale()->getId();//这是支付的流水单号,必须保存,在退款时会使用到
              $total = $payment->getTransactions()[0]->getRelatedResources()[0]->getSale()->getAmount()->getTotal();//支付总金额
              $transactionState = $payment->getTransactions()[0]->getRelatedResources()[0]->getSale()->getState();//Possible values: completed, partially_refunded, pending, refunded, denied.
    
              if($paymentState == 'approved' && $transactionState == 'completed'){
                  //处理成功的逻辑,例如:判断支付金额与订单金额,更新订单状态等
                  return "success";//返回成功标识
              }else{
                  //paypal回调错误,paypal状态不正确
                  return "error";//返回错误标识
              }
          }catch(\Exception $e){
              dd($e->getMessage());
          }
      }
  • Weitere Beispiele für Schnittstellencodes

http://paypal.github.io/PayPal-PHP-SDK/sample/Empfohlen: „

PHP-Video-Tutorial

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

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