Heim > Artikel > Backend-Entwicklung > Ausführliche Erklärung des PHP-Andockens mit PayPal-Zahlung
Umgebungsvorbereitung
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
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.
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
Das Folgende ist ein Rückrufcode-Snippet für eine erfolgreiche Zahlung, Pseudocode-Codefunction 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());//错误提示
}
}
composer require paypal/rest-api-sdk-php
Eine Belegnummer kann für mehrere Rückerstattungen verwendet werden
Das 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-TutorialDas 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!