Heim >Backend-Entwicklung >PHP-Tutorial >Ausführliche Erklärung, wie man PHP mit der PayPal-Zahlung verbindet

Ausführliche Erklärung, wie man PHP mit der PayPal-Zahlung verbindet

藏色散人
藏色散人nach vorne
2020-10-30 15:05:038886Durchsuche

Empfohlen: „PHP-Video-Tutorial

Umgebungsvorbereitung

  • Registrieren Sie ein PayPal-Konto
  • Registrieren Sie ein PayPal-Entwicklerkonto
  • Erstellen Sie ein PayPal-Sandbox-Testkonto
  • Erstellen Sie eine Paypal-Anwendung
  • Laden Sie PHP SDK
  • implement Payment
  • imPlement -Zahlungserfolgs -Rückruf herunter. „„Händlerbenutzer“, geben Sie die erforderlichen Informationen ein und gehen Sie nach der Registrierung zu Ihrer E-Mail-Adresse, um sie zu aktivieren Schritt zum Anmelden
  • Klicken Sie auf die linke Navigationsleiste „Konten“, erstellen Sie zwei Sandbox-Konten, ein persönliches Konto (persönlich) für die Zahlung und ein Händlerkonto (geschäftlich) für den Inkasso. Sie können dies auswählen Erstellen Sie ein Konto, damit Sie es sich leichter merken können. Denken Sie daran, das Guthaben nach der Kontoerstellung für den nächsten Test 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

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.

  • 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());//错误提示
      }
  }

  • Ausführliche Erklärung, wie man PHP mit der PayPal-Zahlung verbindet
  • Rückerstattung

    Die Rückerstattung muss eine erfolgreiche Einzahlungsscheinnummer haben

    • Eine Belegnummer kann für mehrere Rückerstattungen verwendet werden
      Ausführliche Erklärung, wie man PHP mit der PayPal-Zahlung verbindet
    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

    Das Händlerkonto reduziert den Saldo und erhöht die Bearbeitungsgebühr (die Bearbeitungsgebühr ist die Übergebühr der vorherigen Zahlung) ), der Saldo 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());
          }
      }
    • Mehr Schnittstellencode Beispiele
    • composer require paypal/rest-api-sdk-php

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

    Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie man PHP mit der PayPal-Zahlung verbindet. 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