【发布时间】:2017-02-13 08:12:42
【问题描述】:
我正在使用 PHP Paypal SDK:https://github.com/paypal/PayPal-PHP-SDK
推荐PayPal REST API through PHP SDK return "Incoming JSON request does not map to API request"
继续https://stackoverflow.com/questions/39827032/paypal-how-to-get-payment-id-on-basis-of-transaction-id
基于已有的Transaction Id,需要获取Payment Id
我试过下面的代码
require __DIR__ . '/bootstrap.php';
use PayPal\Api\Amount;
use PayPal\Api\Details;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\CreditCard;
use PayPal\Api\Payer;
use PayPal\Api\Payment;
use PayPal\Api\FundingInstrument;
use PayPal\Api\Transaction;
// Extra Code
use PayPal\Api\PaymentDetail;
$payer = new Payer();
$payer->setPaymentMethod('paypal');
$transaction = new PaymentDetail(
'{
"method" : "CASH",
"date" : "2014-07-06 03:30:00 PST",
"note" : "Cash received."
}'
);
$transaction->setTransactionId("3NT32794KF4824703");
$payment = new Payment();
$payment->setIntent("sale")
->setPayer($payer)
->setTransactions(array($transaction));
// For Sample Purposes Only.
$request = clone $payment;
try {
$payment->create($apiContext);
} catch (\PayPal\Exception\PayPalConnectionException $ex) {
echo $ex->getData();
}
echo "<pre>";
print_r($payment);
exit;
当我运行上面的代码时,它会给出以下错误
{"name":"MALFORMED_REQUEST","message":"Incoming JSON request does not map to API request","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#MALFORMED_REQUEST","debug_id":"aa8bfa2a41f1f"}
PayPal\Api\Payment Object
(
[_propMap:PayPal\Common\PayPalModel:private] => Array
(
[intent] => sale
[payer] => PayPal\Api\Payer Object
(
[_propMap:PayPal\Common\PayPalModel:private] => Array
(
[payment_method] => paypal
)
)
[transactions] => Array
(
[0] => PayPal\Api\PaymentDetail Object
(
[_propMap:PayPal\Common\PayPalModel:private] => Array
(
[method] => CASH
[date] => 2014-07-06 03:30:00 PST
[note] => Cash received.
[transaction_id] => 3NT32794KF4824703
)
)
)
)
)
如何解决上述错误?请指导
Paypal 技术支持的回应
在与开发团队讨论和测试后,他们确认 您不能使用 TransactionId 来检索 PaymentId。 PaymentId 是 在初始 REST API 调用时生成。这发生在 REST API 上 仅限。
交易id可以在REST API执行支付后生成, 经典 API [NVP/SOAP] DoEC API 或普通按钮支付完成。 反向搜索以找到付款 ID 永远不会起作用。
就目前而言,您唯一的解决方法是记录每个 REST API 请求无论是否失败都跟踪 PaymentId。
需要实现:一旦付款完成,它将保持暂停。 X 天后,它将被处理。处理后金额将从客户的帐户中扣除。
【问题讨论】:
-
那么传入的 JSON Request 的内容是什么?
标签: php paypal sdk payment-gateway payment-method