2011-09-08 85 views
2

我正在使用使用paypals Website Payments Pro Hosted Solution,所以我们可以通过paypal接受付款,而我们的用户感觉他们正在离开网站,并且我们不必遵守PCI标准。Paypal的工作示例Website Payments Pro托管解决方案Iframe?

我们希望这个以这种格式的工作:

  • 用户点击购买页面中的项目,并选择数量和命中现在购买按钮
  • AJAX请求被发送到服务器,以验证数量/计算总等
  • AJAX请求的iframe
  • iframe是填充了页面返回的URL,然后一旦完成加载的iframe显示
  • 用户填写信用卡信息和paypal完成交易
  • paypal重定向iframe的成功页面,以在父页面中调用一些JavaScript重定向到另一个url。

所以, 我有数量选择页面,
我知道如何将数据发送到服务器,并验证量/计算总

什么我不知道该怎么做的是从这个点发送请求到贝宝获取iframe的网址。

我试图做(作为一个非常基本的独立的例子)是:

<?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> 

起初似乎做工精细,直到你进入你的测试购房者的信用卡信息并获得击中

请返回付款页面并更正地址。

我在做什么错误/我需要做什么工作?

+0

如果你不确定,经常检查官方文档 - https://cms.paypal.com/us/cgi-bin/?cmd=_render- content&content_ID = developer/library_documentation – ajreal

+2

@ajreal:我做到了!事实上,在经历了八个小时的考验之后,他们称这是我想出的文档!因此我寻求帮助! – Hailwood

+0

LMGTFY - 可能重复[Paypal集成:请返回付款页面并更正地址](http://stackoverflow.com/questions/6648804/paypal-integration-please-return-to-the-payment-page-和正确的地址) – ajreal

回答

0

事实上,试试下面的API调用,让我知道,如果这对你的作品:

METHOD = BMCreateButton &
按钮类型=付款&
BUTTONCODE = TOKEN &
L_BUTTONVAR0 =小计= 11 &
L_BUTTONVAR1 =税= 2 &
L_BUTTONVAR2 = shipping = 3 &
L_BUTTONVAR3 = =处理4 &
L_BUTTONVAR4 =模板= templateC

相关问题