2017-02-05 126 views
0

我只是试图用PayPal链接付款进行测试,这真的令人沮丧。我的这个测试的目标是发送主接收器$ 15,然后$ 1发送到辅助接收器。这里是我的代码:PayPal链接付款帮助[PHP]

$api = "https://svcs.sandbox.paypal.com/AdaptivePayments/Pay"; 

$input = array(
    "actionType" => "PAY", 
    "currencyCode" => "USD", 
    "feesPayer" => "EACHRECEIVER", 
    "cancelUrl" => "https://www.google.com", //test url 
    "returnUrl" => "https://www.google.com", //test url 
    "receiverList" => array( 
     "receiver" => array(//send primary receiver $15 
      "amount" => "15.00", 
      "email" => "[email protected]", 
      "primary" => true 
     ), 
     "receiver" => array(//send owner of site $1 commission 
      "amount" => "1.00", 
      "email" => "[email protected]", 
      "primary" => false 
     ) 
    ), 
    "requestEnvelope" => array(
     "errorLanguage" => "en_US" 
    ) 
); 

$headers = array(
    "X-PAYPAL-SECURITY-USERID: ".USER_ID, //predefined 
    "X-PAYPAL-SECURITY-PASSWORD: ".USER_PASS, //predefined 
    "X-PAYPAL-SECURITY-SIGNATURE: ".USER_SIG, //predefined 
    "X-PAYPAL-REQUEST-DATA-FORMAT: JSON", 
    "X-PAYPAL-RESPONSE-DATA-FORMAT: JSON", 
    "X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T" 
); 

$ch = curl_init($api); 

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($input)); 

$response = curl_exec($ch); 
var_dump($response); 

当我尝试这样做,它的工作原理,但在我的付款细节,只显示了$ 1二级接收器,不存在主接收器的跟踪:

{"paymentInfo":[{"receiver":{"amount":"1.00","email":"[email protected]","primary":"false","paymentType":"SERVICE","accountId":"6LBSVJQNVE9DA"},"pendingRefund":"false"}]}

我尝试了“操作类型”设置为“PAY_PRIMARY”,它给了我这个错误:

"message":"Invalid request parameter: action type PAY_PRIMARY can only be used in chained payments","parameter":["PAY_PRIMARY"]

它变得相当令人沮丧,因为我看着它在YouTube上,计算器,一些论坛网站等并没有找到很多有用的信息。

非常感谢任何会花时间阅读本文并帮助我的人!

+0

'这真是令人沮丧'欢迎来到贝宝的世界。 – Martin

回答

0

你的错误是在PHP数组的语法在这里:

"receiverList" => array( 
    "receiver" => array(/*primary receiver info*/), 
    "receiver" => array(/*secondary receiver info*/) 
), 

关联数组只能有一个值,为每个键(以图片为什么,想象从一个数组访问$receiverList['receiver']这种方式声明,它止跌”不知道你想要什么)。

对于PHP而言,这与编写$foo = 1; $foo = 2;相同,并期望1和2在某处仍“存在”。因此,所有被发送到贝宝是这样的:

"receiverList" => array( 
    "receiver" => array(/*secondary receiver info*/) 
), 

你可以看到自己这一点,如果你回声出json_encode($input)

我不知道数组应该是什么样子,但绝对不是这样。我没有看到的文档最好的猜测将是一个简单的列表没有指定键:

"receiverList" => array( 
    array(/*primary receiver info*/), 
    array(/*secondary receiver info*/) 
), 

或可能"recevier"关键需求在那里,两个项目都在里面说:

"receiverList" => array(
    "receiver" => array(
     array(/*primary receiver info*/), 
     array(/*secondary receiver info*/) 
    ) 
), 

或者也许你误解了文档并没有“receiverList”键,只有“接收器”:

"receiver" => array( 
    array(/*primary receiver info*/), 
    array(/*secondary receiver info*/) 
), 

无论变种是,有没有一点改变休息您的查询,直到你得到这一点的权利,因为现在你只发送一组接收器的详细信息贝宝

+0

@cola我用更多的解释和更多的可能性更新了我的答案;我不知道哪一个是正确的,但我100%肯定你在你的问题中提出的是错误的,并且会导致你描述的症状。 – IMSoP

+0

非常感谢!我对PHP和整个编程的东西都很陌生,你真的帮助过我。非常感谢您抽出时间,我非常感谢。 – cola

+0

@cola请参阅http://stackoverflow.com/questions/24845135/paypal-payments-to-multiple-receivers-adaptive-payments。示例代码在https://github.com/angelleye/paypal-php-library/blob/master/samples/Pay-Chained列出。php建议IMSoP的建议是他的“最佳猜测”是正确的解决方案。 –