Ank*_*hah 5 php sdk paypal payment-gateway payment-method
我正在使用PHP Paypal SDK:https : //github.com/paypal/PayPal-PHP-SDK
通过PHP SDK引用的PayPal REST API返回“传入的JSON请求未映射到API请求”
根据已经可用的交易ID,需要获取付款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;
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,它给出以下错误
{"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
)
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
如何解决以上错误?请指导
贝宝技术支持的回复
与开发团队进行讨论和测试后,他们确认您无法使用TransactionId来检索PaymentId。PaymentId是在初始REST API调用时生成的。这仅发生在REST API中。
可以在REST API执行付款,Classic API [NVP / SOAP] DoEC API或正常按钮付款完成后生成交易ID。反向搜索以查找付款ID永远不会起作用。
就目前而言,唯一的解决方法是记录每个REST API请求,无论它是否失败或未跟踪PaymentId。
需要实现:付款完成后,将被暂停。X天后,将对其进行处理。处理后,金额将从客户帐户中扣除。
小智 0
首先,您使用以下命令进行付款创建请求
$payment = new Payment();
$payment->setIntent("sale")
->setPayer($payer)
->setRedirectUrls($redirectUrls)
->setTransactions(array($transaction));
$payment->create($apiContext);
Run Code Online (Sandbox Code Playgroud)
在创建响应中,您将获得“批准网址”,此批准网址用于用户在那里付款。
然后您将通过“$redirectUrls”中发送的网址收到来自 paypal 的通知。
在这里,您将使用执行付款获得“付款 ID”和“付款人 ID”。
$execution = new PaymentExecution();
$execution->setPayerId($da['PayerID']);
$apiContext=$this->apicontext();
$res = $payment->execute($execution, $apiContext);
Run Code Online (Sandbox Code Playgroud)