2

So I wish to bill customers (who are not users) the same amount as what is displayed in the stripe form

<form action="/charge" method="POST">
                 {!! csrf_field() !!}
                  <script
                    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                    data-key="pk_test_key"
                    data-amount="{{ $note->price*100 }}"
                    data-name="Hello World"
                    data-description="{{$note->title}}"
                    data-image="/img/documentation/checkout/marketplace.png"
                    data-locale="auto"
                    data-currency="aud">
                  </script>
                </form>

In the form the price displayed is the price listed in the relevant note model * 100. I would like the customer to actually be billed this value, it will change depending upon the note.

Here is my server billing

public function charge()
{
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here https://dashboard.stripe.com/account/apikeys
    \Stripe\Stripe::setApiKey("sk_test_key");

    // Get the credit card details submitted by the form
    $token = $_POST['stripeToken'];

    // Create the charge on Stripe's servers - this will charge the user's card
    try {
      $charge = \Stripe\Charge::create(array(
        "amount" => 100, // amount in cents, again
        "currency" => "aud",
        "source" => $token,
        "description" => "Example charge"
        ));
    } catch(\Stripe\Error\Card $e) {
      // The card has been declined
    }

    return 'payment succesful';
}

I need to set the "amount" equal to the note value.

Otherwise, payment is going through on my cashier test account and mostly everything else needs to be working.

The customers are not registered users though.

4

1 回答 1

2

数量必须是您在服务器端计算的东西,否则人们可以修改 DOM 并传递他们想要的任何数量。

相反,将 存储id在服务器端的缓存中,并将notein 作为依赖项传递给charge函数,然后比较 2。

/**
 * Assuming name of "view" page
 */
public function checkout(Note $note) 
{
    /**
     * Always forget this on each page load, so we can switch seamlessly between Notes.
     */
    Illuminate\Support\Facades\Cache::forget('nid')->put('nid', $note->id);
}

不要忘记修改charge路由以包含对我们Note依赖项的新引用

route::post('charge/{note}', 'Controller@charge')->name('charge');

确保更新您的表格以note通过

<form action="{{route('charge', $note)}}" method="POST">

旁注我喜欢命名路线,但这不是必需的。

然后在处理请求时,比较$nid$note->id

public function charge(Illuminate\Http\Request $request, Note $note)
{
    $nid = Illuminate\Support\Facades\Cache::get('nid');

    // id's match, no sneaky stuff. safe to use $note->price now
    if ($nid === $note->id) {
        //now we can process our payment.
        // Set your secret key: remember to change this to your live secret key in production
        // See your keys here https://dashboard.stripe.com/account/apikeys
        \Stripe\Stripe::setApiKey("sk_test_key");

        // Get the credit card details submitted by the form
        $token = $request->get('stripeToken');

        // Create the charge on Stripe's servers - this will charge the user's card
        try {
            $charge = \Stripe\Charge::create(array(
                "amount" => number_format($note->price, 0, '', ''), // amount in cents, again
                "currency" => "aud",
                "source" => $token,
                "description" => "Example charge"
            ));
        } catch(\Stripe\Error\Card $e) {
            // The card has been declined
        }    
    }
}
于 2016-06-27T05:25:53.230 回答