Как реализовать Stripe ACH с PLAID в PHP - PullRequest
0 голосов
/ 25 сентября 2019

Шаг 1. Сначала соединитесь с PLAID с Stripe и с помощью открытого ключа получите public_token и account_id

<script src="https://cdn.plaid.com/link/v2/stable/link-initialize.js"></script>

 <script>
 var linkHandler = Plaid.create({
    clientName: 'Scholastic Expeditions',
    countryCodes: ['US'],
    env: 'sandbox',
    // Replace with your public_key from the Dashboard
    key: '071e075d1d6a109d6g2adb12c426c08',
    product: ['auth'],
    // Optional, use webhooks to get transaction and error updates
    webhook: 'http://test.code.org',
    // Optional, specify a language to localize Link
    language: 'en',
    onLoad: function() {
      // Optional, called when Link loads
    },
    onSuccess: function(public_token, metadata) {
        //account_id = metadata.account_id
        account_id = metadata.accounts[0].id
        sendBackendServer(public_token,account_id);
    },
    onExit: function(err, metadata) {
        // The user exited the Link flow.
        if (err != null) {
            // The user encountered a Plaid API error prior to exiting.
        }
    }
});
document.getElementById('linkButton').onclick = function() {
   linkHandler.open();
};
</script>

Шаг 2: На стороне сервера получите access_token и stripe_token с помощью curl

$plaid_client_id = '5d82ff239085b9001306139c';
$public_token = $_REQUEST['public_token'];
$plaid_secret = '565228fd7511c2d1ea2d1bc46eab15';
$env = 'sandbox';
$account_id = $_REQUEST['account_id'];


$headers[] = 'Content-Type: application/json';

$params = array(
    "client_id" => $plaid_client_id,
    "secret" => $plaid_secret,
    "public_token" => $public_token
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://" . $env . ".plaid.com/item/public_token/exchange");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 80);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

if(!$result = curl_exec($ch)) {
    trigger_error(curl_error($ch));
}
curl_close($ch);

$jsonParsed = json_decode($result);

$btok_params = array(
    'client_id'    => $plaid_client_id,
    'secret'       => $plaid_secret,
    'access_token' => $jsonParsed->access_token,
    'account_id'   => $account_id
 );

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://" . $env . ".plaid.com/processor/stripe/bank_account_token/create");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($btok_params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 80);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

if(!$result = curl_exec($ch)) {
    trigger_error(curl_error($ch));
}
curl_close($ch);

$btoken = json_decode($result);

$stripe_bank_account_token = $btoken->stripe_bank_account_token;

Шаг3: с использованием суммы оплаты stripe_bank_account_token

$charge = Stripe_Charge::create(array(       
    "amount" => $totalPayAmount,
    "currency" => 'USD',
    "source" => $tokenID,
    "description" => 'test_account')              
);

Мой вопрос: 1. На производстве может быть банковская проверка, и сбор занимает время, поэтому как мы можем справиться с этим с нашей стороны.2. Как я могу автоматически пополнить счет автоматически из учетной записи пользователя

...