【问题标题】:PayPal Chained Payment Help [PHP]PayPal 链式支付帮助 [PHP]
【发布时间】:2017-06-22 15:56:59
【问题描述】:

我只是在尝试使用 paypal 链式付款进行测试,这真的很令人沮丧。我这次测试的目标是先向主要接收者发送 15 美元,然后再向次要接收者发送 1 美元。这是我的代码:

$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" => "rbxseller1@gmail.com",
            "primary" => true
        ),
        "receiver" => array( //send owner of site $1 commission
            "amount" => "1.00",
            "email" => "rbxowner@gmail.com",
            "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":"rbxowner@gmail.com","primary":"false","paymentType":"SERVICE" ,"accountId":"6LBSVJQNVE9DA"},"pendingRefund":"false"}]}

我尝试将“actionType”设置为“PAY_PRIMARY”,但它给了我这个错误:

"message":"请求参数无效:动作类型 PAY_PRIMARY 只能用于链式支付","parameter":["PAY_PRIMARY"]

我在 youtube、stackoverflow、一些论坛网站等上查找它并没有找到太多有用的信息,这让我感到非常沮丧。

非常感谢愿意花时间阅读本文并帮助我的人!

【问题讨论】:

  • it's really frustrating 欢迎来到 Paypal 的世界。

标签: php paypal payment


【解决方案1】:

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

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

关联数组的每个键只能有一个值(要说明原因,想象一下从以这种方式声明的数组访问$receiverList['receiver'];它不知道您想要哪个)。

对于 PHP,这与编写 $foo = 1; $foo = 2; 并期望 1 和 2 仍然在某个地方“存在”相同。所以发送到 Paypal 的所有内容都是这样的:

"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”:

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

无论是哪种变体,在您正确理解之前,都没有必要更改查询的其余部分,因为现在您只向 Paypal 发送一组接收方详细信息

【讨论】:

  • @cola 我已经用更多解释和更多可能性更新了我的答案;我不知道哪个是正确的,但我 100% 确定您在问题中提出的内容是错误的,并且会导致您所描述的症状。
  • 非常感谢!我对 PHP 和整个编程都是一个新手,你真的帮助了我。非常感谢您抽出宝贵的时间,我真的很感激。
  • @cola 另见stackoverflow.com/questions/24845135/…github.com/angelleye/paypal-php-library/blob/master/samples/… 中列出的示例代码表明 IMSoP 的“最佳猜测”建议是正确的解决方案。
猜你喜欢
  • 2015-03-29
  • 2014-01-23
  • 2013-03-20
  • 2013-02-15
  • 2012-10-23
  • 2014-08-20
  • 2021-08-04
  • 1970-01-01
  • 2015-04-18
相关资源
最近更新 更多