2016-10-22 257 views
1

使用下面的php代码我可以很容易地将我的用户的银行帐户添加额外的信息到我的分区帐户。如何使用条纹创建用户银行帐户?

<?php 
try { 
require_once('vendor/autoload.php'); 
Stripe\Stripe::setApiKey("sk_test_code"); 

$account = \Stripe\Account::create(
    array(
     "country" => "US", 
     "managed" => true, 
     "email" => "[email protected]", 
     "legal_entity" => array(
      'address' => array(
       'city' => 'Carlifonia', // 
       'country' => 'US', 
       "line1" => 'Address line 1', 
       "line2" => 'Address line 2', 
       "postal_code" => '90046', 
       "state" => 'Denver' // 
      ), 
      'business_name' => '', 
      'business_tax_id' => '', 
      'dob' => array(
       'day' => '01', 
       'month' => '01', 
       'year' => '1990', 
      ), 
      'first_name' => 'Test Lynn First Name', 
      'last_name' => 'Test Lynn Last Name', 
      //'personal_id_number' => '000000000', 
      'ssn_last_4' => '4444', 
      'type' => 'individual' 
     ), 
     'tos_acceptance' => array(
      'date' => time(), 
      'ip' => $_SERVER['REMOTE_ADDR'] 
     ), 
     'transfer_schedule' => array(
      "interval" => 'weekly', 
      "weekly_anchor" => 'sunday' 
     ), 
     'external_account' => array(
      "object" => "bank_account", 
      "country" => "US", 
      "account_holder_type" => 'individual', r 
      "routing_number" => "111000025", 
      "account_number" => "00" 
     ) 
    ) 
); 

    //send the file, this line will be reached if no error was thrown above 
    echo "<h1>Account ID = ".$account['id']."</h1>"; 
    echo "<h1>Secret Key = ".$account['keys']['secret']."</h1>"; 
    echo "<h1>Publish Key = ".$account['keys']['publishable']."</h1>"; 

} 
//catch the errors in any way you like 

catch(Stripe_CardError $e) { 
    print_r($e); 
} 

catch (Stripe_InvalidRequestError $e) { 
// Invalid parameters were supplied to Stripe's API 
    print_r($e); 

} catch (Stripe_AuthenticationError $e) { 
// Authentication with Stripe's API failed 
// (maybe you changed API keys recently) 
    print_r($e); 

} catch (Stripe_ApiConnectionError $e) { 
// Network communication with Stripe failed 
    print_r($e); 
} catch (Stripe_Error $e) { 
    print_r($e); 
// Display a very generic error to the user, and maybe send 
// yourself an email 
} catch (Exception $e) { 
    echo '<pre>'; 
    $e_json = $e->getJsonBody(); 
    echo $error = $e_json['error']['message']; 
    echo '</pre>'; 
// Something else happened, completely unrelated to Stripe 
} 
?> 

HTML表单是这个样子:

<form role="form" id="bank-payment-form" method="POST" action="<?php echo esc_url(SITE_URL.'test-bank-create') ?>"> 
    <div class="row"> 
     <div class="col-md-12"><h3>Identity Verification<hr/></h3></div> 
     <div class="bank-errors"></div> 
     <div class="form-group col-xs-12 col-sm-4 col-md-4"> 
      <label class="control-label" for="date-time">Date Of Birth</label> 
      <select class="form-control day"> 
       <option value="">--Select Day--</option> 
       <?php 
       for ($d = 1; $d <=31; $d++) { 
        echo "<option value='$d'>$d</option>"; 
       } 
       ?> 
      </select> 
     </div> 
     <div class="form-group col-xs-12 col-sm-4 col-md-4"> 
      <label class="control-label" for="date-time">&nbsp;</label> 
      <select class="form-control month"> 
       <option value="">--Select Month--</option> 
       <?php 
       for ($m = 1; $m <=12; $m++) { 
        echo "<option value='$m'>$m</option>"; 
       } 
       ?> 
      </select> 
     </div> 
     <div class="form-group col-xs-12 col-sm-4 col-md-4"> 
      <label class="control-label" for="date-time">&nbsp;</label> 
      <select class="form-control year">> 
       <option value="">--Select Year--</option> 
       <?php 
       for ($i =2010; $i > 1900 ; $i--) { 
        echo "<option value='$i'>$i</option>"; 
       } 
       ?> 
      </select> 
     </div> 
     <div class="form-group col-xs-12 col-sm-12 col-md-12"> 
      <label class="control-label" for="date-time">Address</label> 
      <input type="text" placeholder="Address 1" class="form-control address1" value=""> 
     </div> 
     <div class="form-group col-xs-12 col-sm-12 col-md-12"> 
      <input type="text" placeholder="Address 2 (optional)" class="form-control address2" value=""> 
     </div> 
     <div class="form-group col-xs-12 col-sm-6 col-md-6"> 
      <label class="control-label" for="date-time">Country</label> 
      <input type="text" value="US" disabled class="form-control country"> 
      <input type="hidden" value="USD" data-stripe="country" disabled class="form-control" data-stripe="country"> 
     </div> 
     <div class="form-group col-xs-12 col-sm-6 col-md-6"> 
      <label class="control-label" for="date-time">State</label> 
      <select class="form-control state" id="area" required> 
      <?php 
      $get_location = mysqli_query($conn, "SELECT * FROM product_area"); 
      if(mysqli_num_rows($get_location) == 0) { 
       $choose = 'No state found'; 
      } else { 
       $choose = 'Choose State'; 
      } 
      ?> 
      <option value=""><?php echo $choose; ?></option> 
      <?php           
      while($get_location_result = mysqli_fetch_array($get_location)) { 
       $location_id = (int) $get_location_result['parea_id']; 
       $location_name = htmlspecialchars($get_location_result['parea_name']); 
       echo "<option value='$location_id'>$location_name</option>"; 
      } 
      ?>      
      </select> 
     </div> 
     <div class="form-group col-xs-12 col-sm-6 col-md-6"> 
      <label class="control-label" for="date-time">City</label> 
      <select id="sub_area" class="form-control city"> 
        <option value="">--Select City--</option> 
      </select> 
     </div> 
     <div class="form-group col-xs-12 col-sm-6 col-md-6"> 
      <label class="control-label" for="date-time">Zip Code</label> 
      <input type="text" value="<?php echo $zip_db; ?>" placeholder="Zip Code" class="form-control zip"> 
     </div> 

     <div class="form-group col-xs-12 col-sm-12 col-md-12"> 
      <label class="control-label" for="date-time">SSN Number</label> 
      <input type="text" placeholder="SSN Number" class="form-control ssn" value=""> 
      <small>Your SSN is used to verify your identity.</small> 
     </div> 
     <div class="col-md-12"><h4><b>Funds Recipient</b></h4></div> 
     <div class="form-group col-xs-12 col-sm-12 col-md-12"> 
      <select class="form-control account_holder_type"> 
       <option value="">--Select Account Holder Type--</option> 
       <option value="individual">Individual</option> 
       <option value="company">Company</option> 
      </select> 
     </div> 
     <div class="col-md-12"><h4><b>Bank Account</b></h4></div> 
     <div class="form-group col-xs-12 col-sm-6 col-md-6"> 
      <label class="control-label" for="date-time">Routing Number</label> 
      <input type="text" class="form-control routing_number" value="" placeholder="123456789"> 
      <small>Your routing number will be 9 digits</small> 
     </div>      
     <div class="form-group col-xs-12 col-sm-6 col-md-6"> 
      <label class="control-label" for="date-time">Account Number</label> 
      <input type="text" class="form-control account_number" value="" placeholder=""> 
      <small>Your routing number will be 9 digits</small> 
     </div>      
     <div class="col-md-6 col-sm-6 col-xs-12"> 
      <input type="submit" value="Verify Identity" class="submit btn btn-booking"> 
     </div>      
     <?php } ?>  
    </div>      
</div>  
</div> 
</form> 

我看到stripe.js。他们使用下面的js代码添加银行账号:

Stripe.bankAccount.createToken({ 
    country: $('.country').val(), 
    currency: $('.currency').val(), 
    routing_number: $('.routing-number').val(), 
    account_number: $('.account-number').val(), 
    account_holder_name: $('.name').val(), 
    account_holder_type: $('.account_holder_type').val() 
}, stripeResponseHandler); 

不过你看到的是,在我的HTML表单我有另外的字段e.g出生日期。

我的问题是如何添加一个用户的银行帐户使用此stripe.js与我所有的HTML表单字段?

回答

2

托管帐户的legal entity属性所需的字段不是您可以直接通过Stripe.js传递的字段。

你在可以在这里做的是创建一个银行账户令牌,将它附加到您的表单,其中包含其他信息,然后将该表单提交到您的后端进行处理。

以下是它的工作原理:设置一个处理程序以在表单提交或单击提交按钮时侦听,使用它来触发您的Stripe.bankAccount.createToken呼叫。

在您的createToken调用的stripeResponseHandler回调中,将名为stripeToken的隐藏输入附加到目标表单,然后提交表单。

该表格将通过银行账户令牌以及您在<form></form>标签和指定名称之间创建的任何其他表单字段传递给您的后端,您可以使用php(例如$_POST['stripeToken']获取银行账户令牌你已经追加了,或者$_POST['dob-year'],如果你有一个属性为name="dob-year"的字段)。

你可以看到在这里的行动的基本思想: https://jsfiddle.net/pay62y2f/

+0

Thanks.a很多@duck。 –