gpt4 book ai didi

javascript - Stripe 在本地返回成功的测试交易,但不在实时页面上返回

转载 作者:行者123 更新时间:2023-11-28 01:18:41 26 4
gpt4 key购买 nike

我已设置页面以使用 SSL 和 MAMP Pro 在本地服务器上执行测试事务。提交时,我收到“信用卡收费成功”,并且我在 Stripe 的测试付款数据页面上看到交易已完成。当上传到服务器(带有有效的 SSL 证书)时,我收到“错误:无法调用 pay.php 来处理交易”。奇怪的是,交易在 Stripe 端成功完成。我不明白为什么 react 不同。我的 PHP 错误日志中没有错误,并且在记录提交的变量时检查了所有内容。

购买 Controller .js:

function stripeResponseHandler(status, response)
{
if (response.error)
{
// Stripe.js failed to generate a token. The error message will explain why.
// Usually, it's because the customer mistyped their card info.
// You should customize this to present the message in a pretty manner:
alert(response.error.message);
}
else
{
// Stripe.js generated a token successfully. We're ready to charge the card!
var token = response.id;
var fName = $('#first_name').val();
var lName = $('#last_name').val();
var email = $('#email').val();

// alert(fName);
// alert(lName); WORKS

// We need to know what amount to charge. Assume $20.00 for the tutorial.
// You would obviously calculate this on your own:
var price = 70;

// Make the call to the server-script to process the order.
// Pass the token and non-sensitive form information.
var request = $.ajax ({
type: "POST",
url: "../pay.php",
dataType: "json",
data: {
"stripeToken" : token,
"fName" : fName,
"lName" : lName,
"email" : email,
"price" : price
}
});

request.done(function(msg)
{
if (msg.result === 0)
{
// Customize this section to present a success message and display whatever
// should be displayed to the user.
alert("The credit card was charged successfully!");
}
else
{
// The card was NOT charged successfully, but we interfaced with Stripe
// just fine. There's likely an issue with the user's credit card.
// Customize this section to present an error explanation
alert("The user's credit card failed.");
}
});

request.fail(function(jqXHR, textStatus)
{
// We failed to make the AJAX call to pay.php. Something's wrong on our end.
// This should not normally happen, but we need to handle it if it does.
alert("Error: failed to call pay.php to process the transaction.");
});
}
}

$(document).ready(function()
{
$('#purchase_premium').submit(function(event)


{
// immediately disable the submit button to prevent double submits
$('#purchase_submit').attr("disabled", "disabled");

var fName = $('#first_name').val();
var lName = $('#last_name').val();
var email = $('#email').val();
var cardNumber = $('#cc_number').val();
var cardCVC = $('#cc_cvc').val();

// Boom! We passed the basic validation, so we're ready to send the info to
// Stripe to create a token! (We'll add this code soon.)


Stripe.createToken({
number: cardNumber,
cvc: cardCVC,
exp_month: $('#cc_expiration_month').val(),
exp_year: $('#cc_expiration_year').val()
}, stripeResponseHandler);

});
});

支付.php

<?php

// Credit Card Billing
require_once('includes/Stripe.php'); // change this path to wherever you put the Stripe PHP library!

// For testing purposes
function createLog ($str) {
$file = 'pay_log.txt';
// The new person to add to the file
$str .= "\n";
// Write the contents to the file,
// using the FILE_APPEND flag to append the content to the end of the file
// and the LOCK_EX flag to prevent anyone else writing to the file at the same time
file_put_contents($file, $str, FILE_APPEND | LOCK_EX);
}

// Helper Function: used to post an error message back to our caller
function returnErrorWithMessage($message)
{
$a = array('result' => 1, 'errorMessage' => $message);
echo json_encode($a);
}



$trialAPIKey = "---"; // These are the SECRET keys!
$liveAPIKey = "---";

Stripe::setApiKey($trialAPIKey); // Switch to change between live and test environments

// Get all the values from the form
$token = $_POST['stripeToken'];
$email = $_POST['email'];
$firstName = $_POST['fName'];
$lastName = $_POST['lName'];
$price = $_POST['price'];


$priceInCents = $price * 100; // Stripe requires the amount to be expressed in cents

try
{
// We must have all of this information to proceed. If it's missing, balk.
if (!isset($token)) throw new Exception("Website Error: The Stripe token was not generated correctly or passed to the payment handler script. Your credit card was NOT charged. Please report this problem to the webmaster.");
if (!isset($email)) throw new Exception("Website Error: The email address was NULL in the payment handler script. Your credit card was NOT charged. Please report this problem to the webmaster.");
if (!isset($firstName)) throw new Exception("Website Error: FirstName was NULL in the payment handler script. Your credit card was NOT charged. Please report this problem to the webmaster.");
if (!isset($lastName)) throw new Exception("Website Error: LastName was NULL in the payment handler script. Your credit card was NOT charged. Please report this problem to the webmaster.");
if (!isset($priceInCents)) throw new Exception("Website Error: Price was NULL in the payment handler script. Your credit card was NOT charged. Please report this problem to the webmaster.");

try
{
// create the charge on Stripe's servers. THIS WILL CHARGE THE CARD!
$charge = Stripe_Charge::create(array(
"amount" => $priceInCents,
"currency" => "usd",
"card" => $token,
"description" => $email)
);

// If no exception was thrown, the charge was successful!
// Here, you might record the user's info in a database, email a receipt, etc.

// Return a result code of '0' and whatever other information you'd like.
// This is accessible to the jQuery Ajax call return-handler in "buy-controller.js"
$array = array('result' => 0, 'email' => $email, 'price' => $price, 'message' => 'Thank you; your transaction was successful!');
echo json_encode($array);
}
catch (Stripe_Error $e)
{
// The charge failed for some reason. Stripe's message will explain why.
$message = $e->getMessage();
returnErrorWithMessage($message);
}
}
catch (Exception $e)
{
// One or more variables was NULL
$message = $e->getMessage();
returnErrorWithMessage($message);
}

?>

编辑:

通过运行console.log(jqXHR.responseText);在 request.fail block 中,我得到:

<br />
<b>Warning</b>: stream_socket_client() [<a href='function.stream-socket-client'>function.stream-socket-client</a>]: Unable to set verify locations `/nfs/c06/h04/mnt/188388/domains/website.com/html/includes/Stripe/../data/ca-certificates.crt' `(null)' in <b>/nfs/c06/h04/mnt/188388/domains/website.com/html/includes/Stripe/ApiRequestor.php</b> on line <b>340</b><br />
<br />
<b>Warning</b>: stream_socket_client() [<a href='function.stream-socket-client'>function.stream-socket-client</a>]: failed to create an SSL handle in <b>/nfs/c06/h04/mnt/188388/domains/website.com/html/includes/Stripe/ApiRequestor.php</b> on line <b>340</b><br />
<br />
<b>Warning</b>: stream_socket_client() [<a href='function.stream-socket-client'>function.stream-socket-client</a>]: Failed to enable crypto in <b>/nfs/c06/h04/mnt/188388/domains/website.com/html/includes/Stripe/ApiRequestor.php</b> on line <b>340</b><br />
<br />
<b>Warning</b>: stream_socket_client() [<a href='function.stream-socket-client'>function.stream-socket-client</a>]: unable to connect to ssl://api.stripe.com:443 (Unknown error) in <b>/nfs/c06/h04/mnt/188388/domains/website.com/html/includes/Stripe/ApiRequestor.php</b> on line <b>340</b><br />
<br />
<b>Warning</b>: stream_context_get_params() expects parameter 1 to be resource, boolean given in <b>/nfs/c06/h04/mnt/188388/domains/website.com/html/includes/Stripe/ApiRequestor.php</b> on line <b>350</b><br />
<br />
<b>Warning</b>: openssl_x509_export() [<a href='function.openssl-x509-export'>function.openssl-x509-export</a>]: cannot get cert from parameter 1 in <b>/nfs/c06/h04/mnt/188388/domains/website.com/html/includes/Stripe/ApiRequestor.php</b> on line <b>355</b><br />
{"result":0,"email":"timh@blah.com","price":"70","message":"Thank you; your transaction was successful!"}

看起来最后它试图通过 AJAX 传递成功的事务。我不知道该怎么做,但任何帮助将不胜感激。

最佳答案

关闭 pay.php 上的错误报告会抑制导致 JSON 响应无效的警告。

关于javascript - Stripe 在本地返回成功的测试交易,但不在实时页面上返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23501078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com