ホームページ >バックエンド開発 >PHPチュートリアル >注文漏れを防ぐために zen-cart の注文と支払いプロセスを変更する_PHP チュートリアル
zen-cartがサードパーティの決済サイトに入った後、正常に戻れない場合、顧客は支払いをしたのにバックグラウンドで注文データが存在しないという恥ずかしい状況が発生します。この記事では、同じ問題で悩んでいる同僚の役に立つことを願って、この問題の解決策を提供します。
zen-cart を使用したことのある人は誰でも、zen-cart での注文手順が次のとおりであることを知っています ([] 内の表現は必要ありません)。
1. ショッピングカート2.【配送方法】
3.お支払い方法
4.注文確認(確認)
5. [サードパーティウェブサイトでの支払い]
6. 注文処理 (チェックアウトプロセス) - ショッピングカート内の情報がここで注文に書き込まれるため、このステップはより重要です。
7. 注文が成功しました (チェックアウトが成功しました)
通常の状況ではこのプロセスに問題はありません。ただし、ステップ 5 からステップ 6 までのプロセスでは、ユーザーが支払いが成功したと考えて Web ページを直接閉じたり、ネットワーク上の理由によりユーザーが正常に checkout_process ページにジャンプできない可能性があります。注文を正常に作成できないため、これは非常に深刻です。
上記の分析に基づいて、私たちはプロセスを少し変更することを望んでいます。つまり、支払いの前に注文が作成されるようにして、たとえ支払いがサードパーティの支払いウェブサイトからジャンプバックできなかったとしても、ユーザーが支払いは正常に完了しましたが、バックグラウンドで注文が残っていません。変更されたブループリントは基本的に次のようになります:
1. checkour_confirmation ページで注文を確認した後、直接処理して checkour_success ページに入り、支払いページに入ることができます。下の写真に示すように:
2. 顧客がその時点で支払いを怠った場合は、独自のバックエンドにアクセスして過去の注文の支払いを行うこともできます。下の写真に示すように:
上記の機能を実装する方法を段階的に見てみましょう。
1. まず、既存の支払いモジュールを変換する必要があります。支払い用のページ URL を表すフィールド paynow_action_url を支払いメソッド クラスに追加する必要があります。さらに、支払いフォームのパラメータ隠しフィールド コードを取得するために関数 paynow_button($order_id) を追加する必要があります。
paynow_action_url フィールドを追加するには、クラス支払いのコンストラクターの最後に次のコードを追加してください。
if ( (zen_not_null($module)) && (in_array($module.'.php', $this->modules)) && (isset($GLOBALS[$module]->paynow_action_url)) ) {$ this->paynow_action_url = $GLOBALS[$module]->paynow_action_url
} paynow_button($order_id) 関数を追加するには、支払いクラスの最後の関数の後に次のコードを追加してください。
function paynow_button($order_id){
if (is_array($this->modules)) {
if (is_object($GLOBALS[$this->selected_module])) {
}
}
}
2. PayPal 支払い方法を例として、その実装方法を説明します。 paypal の元のコードを破壊しないように、paypal.php ファイルのコピーを作成し、paypalsimple.php という名前を付け、内部のコードに適切な変更を加えます。コードは以下のとおりです。ここでは、form_action_url の指定が削除され、paynow_action_url が指定されていることがわかります。これは、ユーザーが「注文の確認」をクリックした後に直接 checkout_process に入ってほしいためです。そのため、form_action_url が指定されていない場合は、注文を確認するためのフォームは checkout_process ページに直接送信され、paynow_action_url は前の form_action_url の値です。 paynow_button 関数の実装も非常に簡単です。ここでは、元の process_button() 関数の内容を切り取っているだけですが、グローバル $order 変数を使用せず、$order = new order($order_id) を使用して再実行します。過去の注文で今すぐ支払うボタンを表示する準備として構築されたオブジェクト。
合計 3 ページ:
前のページ
www.bkjia.com