gpt4 book ai didi

php - 在 PHP 中使用 POST 响应

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:09 25 4
gpt4 key购买 nike

我正在设置一个简单的 Paypal 按钮。单击时,我需要将订单写入我的数据库,然后通过 POST 将其重定向到 paypal。数据库部分工作得很好,但是 POST 到 paypal 却不行。

我正在使用 code by wez furlong向 paypal 服务器发送 post 请求并需要处理响应以便正确重定向客户端(我需要从响应中获取位置)。

最后,这应该像普通的 paypal“立即购买”按钮一样,在单击时将用户重定向到 paypal。

我似乎无法得到回应,而 Paypal 文档对此非常含糊。如何提取正确的 url 以重定向客户端?

感谢任何帮助!托拜厄斯

最佳答案

以下是我在我的网站上实现此功能的方式。它工作正常:

显示 Paypal 按钮的代码:

Content += "<br/><a href='javascript:Pay();'><img src='http://www.example.com/images/paypal_checkout_button.jpg' alt='Secure payment through PayPal' border='0' /></a><br/><br/>";

Pay() 是客户端点击按钮时调用的 javascript 函数。

Pay()函数代码

function Pay() {
var MessageParam = "msgjson=" + JSON.encode(msgJSON) + "&invoicejson=" + JSON.encode(invoiceJSON);
var myRequest = new Request({url:"http://www.example.com/savetransaction.php", onSuccess: function(InvoiceId) {CallPayPal(InvoiceId);}}).post(MessageParam);
}

Function Pay 做了两件事:

1 - 将交易的详细信息提交给在服务器上运行的 PHP 脚本 (savetransaction.php)。此脚本将事务保存在数据库中。请注意,交易在数据库中保存为 Pending。一旦我从 Paypal 收到已付款的确认信息,它将更改为已付款。脚本 savetransaction.php 返回一个发票 ID 号,这是插入后数据库中的 ID。这是在整个支付过程中标识此交易的唯一标识符。我会将此号码发送到 paypal,它会在付款确认中将其发回给我。

2 - onSuccess 它调用函数 CallPayPal(InvoiceId),这会将客户端发送到 Paypal(见下文)。

函数CallPayPal(InvoideId)代码

function CallPayPal(InvoiceId) {
var PayPalUrl = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_xclick-subscriptions&business=YOURCODEHERE&lc=US&item_name=YOURITEMNAMEHERE&item_number=YOURITEMNUMBER&no_note=1&no_shipping=2&rm=1&return=URL_OF_SCRIPT_THAT_WILL_HANDLE_PAYPAL_RESPONSE&cancel_return=URL_OF_SCRIPT_THAT_WILL_BE_CALLED_IF_CLIENT_CANCEL_PAYMENT_AT_PAYPAL&src=1&a3=" + invoiceJSON.AmtSubs + "&p3=1&t3=M&currency_code=USD&bn=PP%2dSubscriptionsBF%3abtn_subscribeCC_LG%2egif%3aNonHosted";
window.open(PayPalUrl + "&invoice=" + InvoiceId,"_self");
}

您需要更改 Paypal 网址以满足您的需要。我的是订阅按钮。请注意,我在末尾包含了 InvoiceId。这将由 PayPal 接收并在响应中发回。

当客户完成付款后,Paypal 会将他发送回我在返回变量中包含的地址。 Paypal 会将交易代码附加到 url。请参阅下面我处理 Paypal 返回的 php 脚本:

PayPalPDT.php 代码

$req = 'cmd=_notify-synch';

$tx_token = $_GET['tx'];
$auth_token = "enter your own authorization token";
$req .= "&tx=$tx_token&at=$auth_token";

// post back to PayPal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";

//$fp = fsockopen ('http://www.sandbox.paypal.com', 80, $errno, $errstr, 30);
// If possible, securely post back to paypal using HTTPS
// Your PHP server will need to be SSL enabled
// replace www.sandbox.paypal.com with www.paypal.com when you go live
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

if (!$fp)
{
// HTTP ERROR
}
else
{
fputs ($fp, $header . $req);
// read the body data
$res = '';
$headerdone = false;
while (!feof($fp))
{
$line = fgets ($fp, 1024);
if (strcmp($line, "\r\n") == 0)
{
// read the header
$headerdone = true;
}
else if ($headerdone)
{
// header has been read. now read the contents
$res .= $line;
}
}

// parse the data
$lines = explode("\n", $res);
$keyarray = array();
if (strcmp ($lines[0], "SUCCESS") == 0)
{
for ($i=1; $i<count($lines);$i++)
{
list($key,$val) = explode("=", $lines[$i]);
$keyarray[urldecode($key)] = urldecode($val);
}
$firstname = $keyarray['first_name'];
$lastname = $keyarray['last_name'];
$itemname = $keyarray['item_name'];
$amount = $keyarray['payment_gross'];
$invoiceid = $keyarray['invoice'];
$profileid = $keyarray['subscr_id'];
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
// show receipt to client
}
}

希望对您有所帮助。请随时提出后续问题。

祝你好运!

关于php - 在 PHP 中使用 POST 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7447346/

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