機能要望 > フロント機能 > 決済完了後にdtb_order_detailの各商品にも変更を加える(リンク型決済) |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ritz |
投稿日時: 2010/5/17 18:58
対応状況: −−−
|
半人前 登録日: 2008/6/19 居住地: 投稿: 23 |
決済完了後にdtb_order_detailの各商品にも変更を加える(リンク型決済) 宜しくお願いします。
EC-CUBEバージョン 2.4.3 PHPバージョン PHP 5.2.8 DBバージョン MySQL 5.0.45 モジュールタイプの場合は、shopping/complete.phpで、dtb_order_detailに変更加えるのはできるのですが、Paypal(リンク型)の場合dtb_orderのステータス変更の処理しかなくdtb_order_detailにも変更を加えたいと考えております。 ちなみにPalpalは、決済前に注文が確定します(仕様) 要件は、商品に「商品コード」+「購入日の日付」を刻印するため「lot_number」としてdtb_order_detailに変更を加えたいと思います。 処理タイミングは決済が完了してステータスに変更がされる時に同時に。 DBのdtb_order_detailには予め「lot_number」のフィールドを追加済み。 quantityが複数だった場合はカンマ区切りで登録します。 3つの例:「codeA_YYYYMMDDhhmmss_1,codeA_YYYYMMDDhhmmss_2,codeA_YYYYMMDDhhmmss_3」 Paypalの場合 http://SITE_URL/html/user_data/paypal_recv.php にdtb_orderのステータスを変更するだけの戻り値が返ってきます。 ステータスの変更をDBに渡すのは $objQuery = new SC_Query(); $objQuery->update("dtb_order", $arrVal, "order_id = ?", array($arrRequest['invoice'])); 上記で処理しているようです。 恐らくorder_idだけ返ってきているんだと思いますが、この処理部分にdtb_order_detailの各商品(複数ある場合)のlot_numberに変更を加えるにはどのような組み込みをすれば良いのかご教授ください。 宜しくお願いします。 <関連トピック> http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&topic_id=6031&forum=10 |
seasoft |
投稿日時: 2010/5/17 21:44
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: 決済完了後にdtb_order_detailの各商品にも変更を加える(リンク型決済) $objQuery->update("dtb_order", $arrVal, "order_id = ?", array($arrRequest['invoice']));
を参考に、dtb_order_detail にも UPDATE を行なえばよいかと思います。 (追記) EC-CUBEコミュニティ(eccube-comu)では、update メソッドで、生の SQL 値を扱えますが、正式版で出来たか失念しました。(できた気も) 無理ならば、query メソッドあたりで。
|
ritz |
投稿日時: 2010/5/17 22:50
対応状況: −−−
|
半人前 登録日: 2008/6/19 居住地: 投稿: 23 |
Re: 決済完了後にdtb_order_detailの各商品にも変更を加える(リンク型決済) seasoft様>
ありがとうございます。 dtb_order_detailに「lot_number」(TEXT)で追加 $objQuery = new SC_Query(); $objQuery->update("dtb_order", $arrVal, "order_id = ?", array($arrRequest['invoice'])); 上記の下に、試しに(lot_numberが同じ値になってしまいますが) $arrVal2 = array(); $arrVal2['lot_number'] = "codeA201005117222350"; $objQuery->update("dtb_order_detail", $arrVal2, "order_id = ?"); 上記としたのですが、うまくいきませんでした。 class>SC_Quary.phpにfunc updateをみると /** * UPDATE文を実行する. * * @param string $table テーブル名 * @param array $sqlval array('カラム名' => '値',...)の連想配列 * @param string $where WHERE句 * @param array $arradd $addcol用のプレースホルダ配列 * @param string $addcol 追加カラム * @return */ function update($table, $sqlval, $where = "", $arradd = "", $addcol = "") となっています。 この場合の$arradd と $addcolの部分がわかりません。。。 また「codeA」の部分にdtb_order_detail のproduct_codeを呼び出す($objQuery->selectでしょうか?)も同様に、ご教授いただきたいです、宜しくお願いします。 |
seasoft |
投稿日時: 2010/5/17 23:25
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: 決済完了後にdtb_order_detailの各商品にも変更を加える(リンク型決済) 「$addcol」ありますね。それが、前述の「生の SQL 値」というヤツです。これを使うと、複数行文の商品コードの取得から日時付与まで一発実行できます。(ちょっと、SQL の知識が必要となりますが。基本、副問い合わせで対応できると思います。多分。)
しかし、update で更新されないのは、困りましたねぇ・・・ って、第4引数が欠落しているのでは? でも、何でエラーにもならないんだ?? う〜ん、謎です。
|
ritz |
投稿日時: 2010/5/18 12:22
対応状況: −−−
|
半人前 登録日: 2008/6/19 居住地: 投稿: 23 |
Re: 決済完了後にdtb_order_detailの各商品にも変更を加える(リンク型決済) seasoft様>
申し訳ありません、dtb_order_detailをupdateできました。 色々検証していた結果、DBのlot_number構造の「NULL」を未選択にしてたのを、「NULL」に選択。updateの引数にarray($arrRequest['invoice'])を追加することで問題なくorder_idにマッチするdetailのlot_numberを変更することができました。 $arrVal2['lot_number'] = "test_lot_data"; $objQuery->update("dtb_order_detail", $arrVal2, "order_id = ?", array($arrRequest['invoice'])); 結果上記の記述でlot_numberに「test_lot_data」が登録されました、初歩的なミスだったのかもしれません、引数のご指摘ズバリでございました。ありがとうございます。 もう一点、商品が複数種類(商品A、商品B)ある場合、上記だとorder_idでマッチされたlot_numberがすべて同「test_lot_data」になってしまいます。各商品ごとに変更したいので。 同じorder_idの 商品Aのlot_numberには「商品Aの商品コード+テキスト(日付など)」 商品Bのlot_numberには「商品Bの商品コード+テキスト(日付など)」 としたい場合の解決方法は、selectなどでさらに分けて処理するのでしょうか? 宜しくお願いします。 ※最終的には要件のquantityにも関連させて商品Aの数量が複数なら 商品Aの商品コード+日付_1,商品Aの商品コード+日付_2....とします。 |
ritz |
投稿日時: 2010/5/18 14:40
対応状況: −−−
|
半人前 登録日: 2008/6/19 居住地: 投稿: 23 |
Re: 決済完了後にdtb_order_detailの各商品にも変更を加える(リンク型決済) 自己レスです。解決しました。
本件の「各商品」ごとに「lot_number」を追加することができました。 selectでまずorder_idとマッチするレコードを抽出。 countでレコード数を抽出。 for文でレコード数回処理。 処理は、selectでマッチしたレコードの商品コード+テキストをデータとして定義($arrData) updateでorder_id AND 商品コードでマッチさせて、それぞれのlot_numberを変更。
一部抜粋してみました(参考までに) 後はテキストを日付にするなどで本件は解決できそうです、 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |