バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > F-REGI決済モジュールのエラー文言文字化け

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Klif
投稿日時: 2009/5/11 0:11
対応状況: −−−
半人前
登録日: 2009/4/23
居住地: 神奈川県
投稿: 22
Re: F-REGI決済モジュールのエラー文言文字化け
エラー文言の文字化けが解決し、
その後決済処理もスムースに行われていたのですが
数日前から突然正常処理の場合にも
以下のエラー表示が出てしまい
決済完了画面へ遷移せず処理がストップしてしまう現象が出ております。
----------------------------
エラーが発生しました。
OK 2202 00000000000004927198
----------------------------

【前回変更したコード】

/data/downloads/module/mdl_fregi/LC_Page_Mdl_Fregi_Payment.php

723行目

$this->tpl_error = "エラーが発生しました。<br/>". $this->message;

$this->tpl_error = "エラーが発生しました。<br/>". mb_convert_encoding($this->message[0],"UTF-8","EUC-JP");

-----------------------------

上記以外は変更しておりません。

前回アドバイスいただいたようにコードの途中でvar_dumpしながら
処理を追いかけてみたところ

437行目

if ($response[0] == "OK") {
 正常の場合の処理
 return true;
} elseif ($response[0] == "NG") {
 エラーの場合の処理
 return false;
} else {
 エラーの場合の処理
 return false;
}

という条件分岐の処理で
OKでもNGでも最後のelse(その他の結果の場合)に振り分けられてしまっているようです。

returnが必ずfalseなので以下の処理で
すべてがfalseになってしまっているようです。

711行目

// 正常
if ($result === true) {
// 正常に登録されたことを記録
  // 異常
} elseif ($result === false) {
$this->tpl_error = "エラーが発生しました。<br/>". $this->message;
}

一旦解決したはずの投稿ですが
再び別のエラーを引き起こしてしまい
再度投稿させて頂きました。

解決の糸口になるアドバイスをいただけると幸いです。
よろしくお願いします。

seasoft
投稿日時: 2009/5/11 0:16
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: F-REGI決済モジュールのエラー文言文字化け
とりあえず、$response[0] の内容がどうなっているのかが気になるところです。


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

Klif
投稿日時: 2009/5/11 0:36
対応状況: −−−
半人前
登録日: 2009/4/23
居住地: 神奈川県
投稿: 22
Re: F-REGI決済モジュールのエラー文言文字化け
早速のヘルプありがとうございます。

var_dump($response[0]);
の結果を2種類添付致します。

(1)コンビニ決済時わざとTELを一桁の数字に

string(48) "NG C1-1-73(����ӥ���ʸ�������TEL��û�����ޤ�) "
文字化けしたままですが、EUC-JPで表示すると以下のように読めるようになります。

string(48) "NG C1-1-73(コンビニ注文処理時のTELが短すぎます) "


(2)コンビニ決済時に正しい電話番号を入力

string(106) "OK 7101989406616 00000000000004934138 http://payment.sej.co.jp/od/hi.asp?50100101989406617c2363af7c1ac6a7 "

「OK」「7101989406616」「00000000000004934138」「http://payment.sej.co.jp/od/hi.asp?50100101989406617c2363af7c1ac6a7」は全て1行で半角スペースで区切られています。

引き続きよろしくお願いします。

seasoft
投稿日時: 2009/5/11 0:48
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: F-REGI決済モジュールのエラー文言文字化け
substr で先頭2文字を切り出して比較すれば応急的には回避できそうです。
http://jp2.php.net/manual/ja/function.substr.php

プロトコルの仕様変更でもあったのですかね。もしくは、EC-CUBE のモジュールが仕様の解釈を誤って実装されてしまったのですかね。


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

Klif
投稿日時: 2009/5/11 1:07
対応状況: −−−
半人前
登録日: 2009/4/23
居住地: 神奈川県
投稿: 22
Re: F-REGI決済モジュールのエラー文言文字化け
ありがとうございます。

substrで「OK」「NG」を切り出し、条件分岐には成功しましたが
払い込みに必要な支払番号や取引番号などが空の注文メールとなってしまいます。
DBのdtb_order_temp(注文一時テーブル)を確認したところ
memo01/memo02/memo03/memo07/memo08/memo09の6フィールドともに見事に「NULL」でインサートされておりました。


var_dumpすると
$response[1]
$response[2]
ともにNULLでした。


--------以下はソース抜粋になります--------
var_dump($response[0]);
var_dump($response[1]);
var_dump($response[2]);
$aa=substr($response[0],0,2);
var_dump($aa);
// 成功
if ($aa == "OK") {
// 受注一時テーブルに記録
$arrVal['memo01'] = $this->objConfig->module_name; // モジュールコード
$arrVal['memo02'] = $this->setConveniPayment($response, $arrInput); // 支払情報
$arrVal['memo03'] = FREGI_CONVENI; // 支払方法
$arrVal['memo07'] = $response[2]; // 取引番号
$arrVal['memo08'] = $response[1]; // 支払番号
$arrVal['memo09'] = FREGI_CONVENI_ORDER; // F-REGIステータス
$this->objHelperDB->sfRegistTempOrder($arrData['order_temp_id'], $arrVal);
-----------------------

引き続きコードに手を加え解決できるのか
それとも根本的な問題なのか
考えあぐねています。

こちらでの解決が難しければ有料でお願いしたいのですが。。

seasoft
投稿日時: 2009/5/11 1:15
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: F-REGI決済モジュールのエラー文言文字化け
どうやら、$response に格納する処理が意図しない動作をしていそうですね。
その処理を見直すか、$response[0] から explode で再セットするかで対応できそうな気はします。


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

Klif
投稿日時: 2009/5/11 1:20
対応状況: −−−
半人前
登録日: 2009/4/23
居住地: 神奈川県
投稿: 22
Re: F-REGI決済モジュールのエラー文言文字化け
ありがとうございます。
やってみます。
遅くまでおつき合いいただき感謝しています。
結果をまた報告します。
本当にありがとうございます。
ramrun
投稿日時: 2009/5/11 21:13
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: F-REGI決済モジュールのエラー文言文字化け
ちょろっと見てみたんですが、sendPost()から戻りが$responseに格納されるみたいですね。

/**
 * ポスト要求処理
 *
 * @return void
 */
function sendPost($url, $arrPost) {
    $req = new HTTP_Request($url);
    $req->setMethod(HTTP_REQUEST_METHOD_POST);

    // 電文の送付
    $req->addPostDataArray($arrPost);
    // 応答内容の取得
    $response = $req->sendRequest();

    $err_flg = false;
    if (!PEAR::isError($response)) {
        $response = $req->getResponseBody();
    } else {
        $mess = mb_convert_encoding($e->getMessage(), CHAR_CODE, "SJIS");
        $err_flg = true;
    }
    $req->clearPostData();

    if (!$err_flg) {
        $response = mb_convert_encoding($response, CHAR_CODE, "auto");
        $response = split("\n", $response);
        return $response;
    } else {
        return $mess;
    }
}

これによると改行で区切って配列化しているみたいです。
その前のmb_convert_encoding()も効いていないっぽい。

ただこの処理は各種支払いで共通なので、しばらくOKだった時期があったのでしたらF-REGI側で変更があったのかも。
Klif
投稿日時: 2009/5/11 23:49
対応状況: −−−
半人前
登録日: 2009/4/23
居住地: 神奈川県
投稿: 22
Re: F-REGI決済モジュールのエラー文言文字化け
seasoft様

報告が遅くなり申し訳ございません。

アドバイスに従い
explodeを試したのですが上手く分割できず、
ブラウザ上の区切り文字は半角スペースなのですが
ソースを見ると改行で配列は区切られておりました。
\nでexplodeしてもダメでした。
isleのinfinitoというWindowsサーバーなので改行コードが\rかとも思い、
\rでexplodeしてもダメでした。

mb_convert_kanaで半角スペースを全角スペースに変換してみましたが
半角のまま表示されていますので、おそらく半角スペースに見えるだけかもしれません。

そこで以下のように、substrで処理して見ると
DBのdtb_order_tempにはデータが格納されました。

さらにエラー文言をmb_convert_encodingして文字化けは解消できました。

コンビニ決済はこれで問題ないと思いますが
カード決済を試したところ

「カード情報を登録保存する」というF-REGIのオプション機能を申込んでおり
その機能が使えなくなってしまいました。
ここまでくるともう一息!と思いましたが、

本当にここまでの大幅な変更作業が必要なのかな!?
という疑問が出てまいりました。

F-REGIモジュールの修正+再配布という流れになると有り難いなと思います。
以前に、「チケット登録」というのをご好意でやって頂きましたが
あのような形でモジュールの再開発配布を依頼する事は出来るのでしょうか?

今回のケースの正しい対処法を含めご教授いただけると幸いです。

-------------------------

$xxx=substr($response[0],0,2);
$yyy=substr($response[0],4);
list($hachi,$nana)=explode("0000000000000",$yyy);
list($sebun,$irebun)=explode("http://payment.sej.co.jp/od/hi.asp?",$nana);

// 成功
if ($xxx == "OK") {
//変数格納しなおし
$arrVal['memo01'] = "mdl_fregi"; // モジュールコード
$arrVal['memo02'] = $this->setConveniPayment($response, $arrInput); // 支払情報
$arrVal['memo03'] = "2"; // 支払方法
$arrVal['memo07'] = "0000000000000".$sebun; // 取引番号
$arrVal['memo08'] = $hachi; // 支払番号
$arrVal['memo09'] = "0"; // F-REGIステータス
    return true;
// 失敗
} elseif ($xxx == "NG") {
$this->message = mb_convert_encoding($yyy,"UTF-8","EUC-JP");
GC_Utils::gfPrintLog("F-REGI(Conveni):". $this->message, FREGI_LOG_PATH);
return false;
// 接続エラー
} else {
$this->message = $response;
GC_Utils::gfPrintLog("F-REGI(Conveni):". $this->message, FREGI_LOG_PATH);
return false;
}
-------------------------

Klif
投稿日時: 2009/5/11 23:55
対応状況: −−−
半人前
登録日: 2009/4/23
居住地: 神奈川県
投稿: 22
Re: F-REGI決済モジュールのエラー文言文字化け
ramrun様

以前には解決のお手伝いをして頂きありがとうございました。
今回もアドバイスいただきありがとうございます。

------------------------
$response = split("\n", $response);
『改行で区切って配列化しているみたい』
------------------------

赤字でご指摘いただいた箇所でトライできることはやってみたいと思いますが
やはりF-REGI側に何か変更があったのでしょうか。

明日の営業時間内にに連絡し、確認してみたいと思います。
ありがとうございます。

« 1 (2) 3 4 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は73,403名です
総投稿数は102,492件です

投稿数ランキング

1
seasoft
7333
2
468
3112
3
AMUAMU
2712
4
nanasess
2187
5
umebius
2036
6
yuh
1615
7
red
1454
8
h_tanaka
1140
9
tsuji
936
10
fukap
907
11
shutta
835
12
tao_s
793
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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