【发布时间】:2011-11-12 17:06:09
【问题描述】:
我希望使用贝宝Website Payments Pro Hosted Solution,这样我们就可以通过贝宝接受付款,而我们的用户不会觉得他们正在离开网站,也不需要我们遵守 PCI。
我们希望它以这种格式工作:
- 用户点击商品的购买页面并选择数量并点击立即购买按钮
- AJAX 请求被发送到服务器以验证数量/计算总数等
- AJAX 请求返回 iframe 的 url
- iframe 已填充页面,然后在完成加载后显示 iframe
- 用户填写信用卡信息,paypal完成交易
- paypal重定向iframe的成功页面调用父页面中的一些javascript重定向到另一个url。
所以,
我有数量选择页面,
我知道如何将数据发送到服务器并验证数量/计算总数
我不知道该怎么做是从这一点发送请求到贝宝以获取 iframe 的 url。
我尝试做的(作为一个非常基本的独立示例)是:
<?php
class paypal {
private $APIuser;
private $APIpass;
private $APIsign;
private $APIvers = '74.0';
private $APIaddr = 'https://api-3t.sandbox.paypal.com/nvp';
private $post_params = array();
function __construct($APIuser, $APIpass, $APIsign){
$this->APIuser = $APIuser;
$this->APIpass = $APIpass;
$this->APIsign = $APIsign;
}
function param($name, $value = null){
$this->post_params[$name] = $value;
return $this;
}
function getUrl(){
$post = $this->post_params;
$post['pwd'] = $this->APIpass;
$post['user'] = $this->APIuser;
$post['method'] = 'BMCreateButton';
$post['version'] = $this->APIvers;
$post['signature'] = $this->APIsign;
$post['buttoncode'] = 'CLEARTEXT';
$post['buttontype'] = 'PAYMENT';
$post_string = '?';
foreach($post as $k => $v)
$post_string .= $k.'='.urlencode($v).'&';
$post_string = substr($post_string, 0, -1);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->APIaddr.$post_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$out = curl_exec($ch);
curl_close($ch);
$out = explode('&', $out);
$final = array();
foreach($out as $k => &$v){
$v = explode('=', $v);
$final[$v[0]] = urldecode($v[1]);
}
return $final;
}
}
//mock variables
$price = 10.00;
$APIu = 'xxxxxxxxxx';
$APIp = 'xxxxxxxxxx';
$APIs = 'xxxxxxxxxx';
$paypal = new paypal($APIu, $APIp, $APIs);
$paypal->param('L_BUTTONVAR0=subtotal', $price*$_GET['quantity']);
$paypal->param('L_BUTTONVAR1=template', 'templateD');
$resp = $paypal->getUrl();
?>
<iframe width="100%" height=100%" src="<?php echo $resp['EMAILLINK']; ?>"></iframe>
起初似乎工作正常,直到您输入测试买家的信用卡详细信息并受到打击
请返回支付页面并更正地址。
我做错了什么/我需要做什么才能完成这项工作?
【问题讨论】:
-
如果不确定,请务必查看官方文档 -- cms.paypal.com/us/cgi-bin/…
-
@ajreal:我做到了!事实上,在看了八个小时之后,他们称之为文档的可怕混乱,这就是我想出的!因此,我为什么要寻求帮助!
-
这是..奇怪的。您能否通过paypal.com/mts 向 PayPal 商家技术服务部门登记票证?他们将能够从他们身边挖掘他们的日志,因为如果没有关键信息,这将很难调试。
标签: php iframe paypal website-payment-pro