バージョン選択

フォーラム

メニュー

オンライン状況

61 人のユーザが現在オンラインです。 (55 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 61
もっと...

サイト内検索

機能要望 > フロント機能 > 決済完了後に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 メソッドあたりで。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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引数が欠落しているのでは? でも、何でエラーにもならないんだ?? う〜ん、謎です。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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を変更。


// 各商品detailの商品コードを入手
$arrRet = $objQuery->select("product_code", "dtb_order_detail", "order_id = ?", array($arrRequest['invoice']));
// 何商品あったか商品数を調べる=order_idでマッチしたdetailの数
$arrRetcnt = $objQuery->count("dtb_order_detail", "order_id = ?", array($arrRequest['invoice']));

$arrData = array();
for($i = 0; $i < $arrRetcnt; $i++) {
	//登録するテキストデータを定義
	$arrData[$i]['lot_number'] = $arrRet[$i]['product_code']."_テキスト";
	//データベースを変更(登録)$arrRetで入手した商品コードとorder_idでマッチさせる
	$objQuery->update("dtb_order_detail", $arrData[$i], "product_code = '".$arrRet[$i]['product_code']. "' AND order_id = ?", array($arrRequest['invoice']));
};


一部抜粋してみました(参考までに)
後はテキストを日付にするなどで本件は解決できそうです、
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,035名です
総投稿数は110,020件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.