Raf*_*fiq 5 php stripe-payments stripe-sca
这是我的 HTML 表单,并使用 stripe 最新的 PaymentIntent API。我的问题是我没有弹出 3D 安全授权。谁能帮助我指导那些让我出错的事情?我试图遵循条纹文档(https://stripe.com/docs/ payments/ payment-intents/web#handling-next-actions),但它完全令人困惑。
\n\n<script src=\'https://js.stripe.com/v3/\' type=\'text/javascript\'></script>\n<form action="process_payment.php" method="post" id="payment-form">\n <div class="form-row">\n <label for="card-element">\n Credit or debit card\n </label>\n <div id="card-element"><!-- Your form goes here --></div>\n </div>\n <!-- Used to display form errors -->\n <div id="card-errors" role="alert"></div>\n <button class="atbdp_pay_btn" type="submit">Pay</button>\n</form>\nRun Code Online (Sandbox Code Playgroud)\n\nJavaScript
\n\ndocument.addEventListener("DOMContentLoaded", function(event) {\n var stripe = Stripe(\'pk_test_xxxxxxxxxx\'); // test publishable API key\n var elements = stripe.elements();\n\n var card = elements.create(\'card\');\n // Add an instance of the card UI component into the `card-element` <div>\n card.mount(\'#card-element\');\n\n // Handle events and errors\n card.addEventListener(\'change\', function(event) {\n var displayError = document.getElementById(\'card-errors\');\n if (event.error) {\n displayError.textContent = event.error.message;\n } else {\n displayError.textContent = \'\';\n }\n });\n\n function stripeTokenHandler(token) {\n // Insert the token ID into the form so it gets submitted to the server\n var form = document.getElementById(\'payment-form\');\n var hiddenInput = document.createElement(\'input\');\n hiddenInput.setAttribute(\'type\', \'hidden\');\n hiddenInput.setAttribute(\'name\', \'stripeToken\');\n hiddenInput.setAttribute(\'value\', token.id);\n form.appendChild(hiddenInput);\n\n // Submit the form\n form.submit();\n }\n\n function createToken() {\n stripe.createToken(card).then(function(result) {\n if (result.error) {\n // Inform the user if there was an error\n var errorElement = document.getElementById(\'card-errors\');\n errorElement.textContent = result.error.message;\n } else {\n // Send the token to your server\n stripeTokenHandler(result.token);\n }\n });\n };\n\n // Create a token when the form is submitted.\n var form = document.getElementById(\'payment-form\');\n form.addEventListener(\'submit\', function(e) {\n e.preventDefault();\n createToken();\n });\n\n });\nRun Code Online (Sandbox Code Playgroud)\n\n最后处理响应
\n\nrequire_once \'init.php\';\n\\Stripe\\Stripe::setApiKey( \'sk_test_xxxxxxxx\' );\n$stripeToken = $_POST[\'stripeToken\']; // stripe will handle the sanitization\n$error_msg = \'\';\ntry {\n $intent = \\Stripe\\PaymentIntent::create([\n \'payment_method_data\' => [\n \'type\' => \'card\',\n \'card\' => [\'token\' => $stripeToken],\n ],\n \'amount\' => 19 * 100,\n \'currency\' => \'usd\',\n \'confirmation_method\' => \'manual\',\n \'confirm\' => true,\n ]);\n $result = generatePaymentResponse($intent);\n}catch (\\Stripe\\Card $exception){\n\n}\n\nfunction generatePaymentResponse($intent) {\n if ($intent->status == \'requires_source_action\' &&\n $intent->next_action->type == \'use_stripe_sdk\') {\n # Tell the client to handle the action\n echo json_encode([\n \'requires_action\' => true,\n \'payment_intent_client_secret\' => $intent->client_secret\n ]);\n } else if ($intent->status == \'succeeded\') {\n # The payment didn\xe2\x80\x99t need any additional actions and completed!\n # Handle post-payment fulfillment\n echo json_encode([\n \'success\' => true\n ]);\n } else {\n # Invalid status\n http_response_code(500);\n echo json_encode([\'error\' => \'Invalid PaymentIntent status\']);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n响应是
\n\n"requires_action": true,\n "payment_intent_client_secret": "pi_1FIowAIUv6RpAcZVcd9txP1g_secret_M0byttxAd4ZFB4NxLgsanaZZS"\nRun Code Online (Sandbox Code Playgroud)\n