すぐに使える PayumBundle を使い始めました。いいえ、PaypalExpressPaymentDetails エンティティを User オブジェクトで拡張しました。
/**
* @ORM\OneToOne(targetEntity="Bidder", inversedBy="paymentPaypal")
* @ORM\JoinColumn(name="bidder_id", referencedColumnName="id")
*/
protected $bidder;
質問があります。Paypal とやり取りする前と、さらに重要だと思うのですが、支払いの詳細エンティティを変更するのに最適な場所はどこですか?
私はサンドボックス コードを見ていましたが、これはペイパル トランザクションの前にデータを設定するための適切な場所であるに違いないと思います。
$paymentDetails->setReturnurl($captureToken->getTargetUrl());
$paymentDetails->setCancelurl($captureToken->getTargetUrl());
$paymentDetails->setInvnum($paymentDetails->getId());
$paymentDetails->setBidder($bidder); //i think this should be fine at this position
$storage->updateModel($paymentDetails);
Paypal からの支払い後にリダイレクトされた後、Controller で行ったことを次に示します (サンドボックス コードも参照)。
$status = new BinaryMaskStatusRequest($token);
$payment->execute($status);
if($status->isSuccess()){
//mark bidder as paid <- right position?
$bidder = $status->getModel()->getBidder();
$bidder->setIsPaid(true);
$em = $this->getDoctrine()->getManager();
$em->persist($bidder);
$em->flush();
}
そのままでいいのかわからない。Paypal 応答のイベント リスナーはどうですか? 提案に感謝します。
ありがとう、マーク