发送 Paypal 支付调用返回 400 格式错误的请求错误

Posted

技术标签:

【中文标题】发送 Paypal 支付调用返回 400 格式错误的请求错误【英文标题】:sending Paypal payment call returning 400 malformed request error 【发布时间】:2013-10-13 10:21:09 【问题描述】:

我正在尝试使用 php 创建一个贝宝付款。我不断收到 400 格式错误的请求错误。我相信我的问题在于以下字符串:

$postData ='

    "intent": "sale"
    "redirect_urls": 
        "return_url": ' . $url_success .',
        "cancel_url": ' . $url_cancel .'
    ,
    "payer": 
        "payment_method": "paypal"
    ,
    "transactions": [
        
            "amount": 
                "total": "' . $saleTotal .'",
                "currency": "USD"
            ,
            "description": "Test payment."
        
    ]

';

然后我在下一行中使用 cURL 发送字符串

curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

这是我打印出来的字符串:

 "intent": "sale" "redirect_urls":  "return_url": 
"http://localhost/~user/test/controller/PayPalTestView.php", "cancel_url": 
"http://localhost/~user/test/controller/CancelTestView.php" , "payer":  
"payment_method": "paypal" , "transactions": [  "amount":  "total": "8.31782", 
"currency": "USD" , "description": "Test payment."  ]  

这是我得到的回复:

"name":"MALFORMED_REQUEST","message":"The request JSON is not well 
formed.","information_link":
"https://developer.paypal.com/webapps/developer/docs/api/#MALFORMED_REQUEST",
"debug_id":"7d56ae815e584"

我很确定问题出在 $postData 中,尽管我不知道出了什么问题。我尝试按照以下示例进行操作:Paypal REST API Bad Request,但它仍然无法正常工作。我的问题与该示例类似,因为我正在成功发送和接收身份验证令牌。我的问题只是在尝试发送支付 API 调用时。有谁看到我做错了什么?谢谢!

【问题讨论】:

您在"intent": "sale" 之后缺少,。此外,您不应该手动创建 json 数组。在php中构建数组,然后使用json_encode() 成功了。我现在在 php 中构建数组并使用 json_encode()。谢谢! 【参考方案1】:

我之前也遇到过同样的问题。我所做的是将数据放在数组中:

$data = array(  "intent"=>"sale", 
            "redirect_urls"=>array(
                "return_url"=>"<return site>", 
                "cancel_url"=>"<cancel site>"
            ),
            "payer"=>array(
                "payment_method"=>"paypal"
            ),
            "transactions"=>array(
                array(
                    "amount"=>array(
                        "total"=>"7.47",
                        "currency"=>"USD"
                    ),
                    "description"=>"This is the payment transaction description."
                )
            )
        );

和http头:

$header = array(
"Content-Type:application/json",
"Authorization:Bearer <token here>"

);

然后在 postfield 上,使用 json_encode 对数据进行编码:

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

我希望这会有所帮助。

【讨论】:

以上是关于发送 Paypal 支付调用返回 400 格式错误的请求错误的主要内容,如果未能解决你的问题,请参考以下文章

paypal rest api支付调用使用php返回401

支付宝错误 400

Paypal payKey 让我支付错误

Paypal sdk asp.net 返回 (400) 错误请求

Paypal 自适应支付返回 url 调用了两次

使用 PayPal PHP SDK 在 PayPal Sandbox 上执行支付时,得到 Http 响应代码 400