Paypal,IPN/Webhooks在我的paypal帐户中创建发票,以便汇款

jal*_*nga 9 paypal

我想通过IPN或Webhooks创建以下情况.用户想要提取一些钱,当他点击按钮退出时,将在我的Paypal帐户中发票,我可以选择接受或拒绝发送钱.接受或拒绝后,我的应用程序将收到通知,如果钱已发送.

我正在阅读他们的文档,但我找不到我想要的东西.

Dre*_*ell 0

我认为您对为此需要哪些 PayPal 功能有点困惑。

IPN 和 Webhooks 是事务后处理工具。在创建发票、收到付款、提交争议等之后,他们不会触发任何事情。

另外,您不想使用实际的发票 API 来执行此操作,因为 PayPal 会收取更高的费用。

如果您为用户提供提款按钮,您可以使用Payouts API直接在该操作上触发付款。

您没有指定您使用的语言,但这里有一个会触发付款的 PHP 脚本示例:

<?php

$paypal_client_id = "your_client_id";
$paypal_secret = "your_secret";

$payee_email = "payee@example.com";
$amount = 10.00;
$currency = "USD";

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.paypal.com/v1/oauth2/token",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "grant_type=client_credentials",
  CURLOPT_HTTPHEADER => array(
    "Authorization: Basic " . base64_encode("$paypal_client_id:$paypal_secret"),
    "Content-Type: application/x-www-form-urlencoded"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  $access_token = json_decode($response)->access_token;
  
  $curl = curl_init();
  
  curl_setopt_array($curl, array(
    CURLOPT_URL => "https://api.paypal.com/v1/payments/payouts",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "{\"sender_batch_header\": {\"sender_batch_id\":\"batch_" . time() . "\",\"email_subject\":\"You have a payment\"},\"items\":[{\"recipient_type\":\"EMAIL\",\"amount\":{\"value\":$amount,\"currency\":\"$currency\"},\"receiver\":\"$payee_email\",\"note\":\"Thank you.\",\"sender_item_id\":\"item_" . time() . "\"}]}",
    CURLOPT_HTTPHEADER => array(
      "Content-Type: application/json",
      "Authorization: Bearer $access_token"
    ),
  ));
  
  $response = curl_exec($curl);
  $err = curl_error($curl);
  
  curl_close($curl);
  
  if ($err) {
    echo "cURL Error #:" . $err;
  } else {
    $payout = json_decode($response);
    
    if ($payout->batch_header->batch_status == "SUCCESS") {
      echo "Payout sent successfully!";
    } else {
      echo "Payout failed: " . $payout->batch_header->failure_reason;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

要让您的应用程序在付款完成时收到通知,您可以订阅 Webhook PAYMENT.PAYOUTSBATCH.SUCCESS

以下是订阅该 Webhook 的脚本示例:

<?php

$paypal_client_id = "your_client_id";
$paypal_secret = "your_secret";

$webhook_url = "https://www.example.com/webhooks/payouts_success";

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.paypal.com/v1/oauth2/token",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "grant_type=client_credentials",
  CURLOPT_HTTPHEADER => array(
    "Authorization: Basic " . base64_encode("$paypal_client_id:$paypal_secret"),
    "Content-Type: application/x-www-form-urlencoded"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  $access_token = json_decode($response)->access_token;
  
  $curl = curl_init();
  
  curl_setopt_array($curl, array(
    CURLOPT_URL => "https://api.paypal.com/v1/notifications/webhooks",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "{\"url\":\"$webhook_url\",\"event_types\":[{\"name\":\"PAYMENT.PAYOUTSBATCH.SUCCESS\"}]}",
    CURLOPT_HTTPHEADER => array(
      "Content-Type: application/json",
      "Authorization: Bearer $access_token"
    ),
  ));
  
  $response = curl_exec($curl);
  $err = curl_error($curl);
  
  curl_close($curl);
  
  if ($err) {
    echo "cURL Error #:" . $err;
  } else {
    $webhook = json_decode($response);
    
    if ($webhook->name == "PAYMENT.PAYOUTSBATCH.SUCCESS") {
      echo "Webhook subscribed successfully!";
    } else {
      echo "Webhook subscription failed: " . $webhook->name;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在您提供的 Webhook URL 处设置一个 Webhook 处理程序。下面是一个示例:

<?php

$webhook_data = json_decode(file_get_contents('php://input'), true);

if ($webhook_data["event_type"] == "PAYMENT.PAYOUTSBATCH.SUCCESS") {
  // handle the payout success event
  $batch_id = $webhook_data["resource"]["batch_header"]["payout_batch_id"];
  $status = $webhook_data["resource"]["batch_header"]["batch_status"];
  
  // log the batch ID and status for reference
  error_log("Batch ID: $batch_id");
  error_log("Status: $status");
  
  // process the successful payout
  // ...
} else {
  // handle other event types
  // ...
}
Run Code Online (Sandbox Code Playgroud)