0

すぐに使える 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 応答のイベント リスナーはどうですか? 提案に感謝します。

ありがとう、マーク

4

1 に答える 1

2

私が見る限り、あなたはこれを正しく理解しています。

一般に、3 つのステップを実行する必要があります (詳細については、payum のget it started を参照してください)。

  1. 準備 - 支払いの詳細を作成し、それに値を設定します。
  2. キャプチャ - Payum がこのステップを処理します。
  3. done - 支払いを受け取り、そのステータスを確認する場所。ここでは、何をしても自由です。あなたが電子書籍を販売しているとしましょう。ここで、成功すると、pdf を生成し、購入者の電子メールに送信します。失敗\キャンセルなどで、ユーザーにそれについて表示します。

私が見る限り、あなたはこれを正しく理解しています。イベントについて: これが支払いに関連するすべてのコードである場合は、シンプルにしてください。物事がより複雑になった場合は、イベントを導入して、これをリスナーに移動できます。

$bidder = $status->getModel()->getBidder();
$bidder->setIsPaid(true);
$em = $this->getDoctrine()->getManager();
$em->persist($bidder);
$em->flush();
于 2013-10-28T08:17:57.807 に答える