配送モジュールで宅急便がすごい値段になっちゃいます

上記のジャンルにあてはまらない話題、雑談など
アバター
maniad
記事: 38
登録日時: 2010/7/20 02:20

配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by maniad » 2010/7/23 16:55

ヤマト運輸(宅急便) (1 x 3.2kg) の配送で、テストでショップ住所から配送先も同じショップ住所にしてみたところ、82595円などというとんでもない配送費用になってしまいました。
小・中パッケージの風袋 - 比率・重量の設定では「10% + 1lb 10:1」と設定し、大型パッケージの風袋 - 大きさ・重量の設定では「0% + 5lbs 0:5」と設定しました。ここは10:1 0:5とすべきなのかな。
どう設定しても、金額は変わりません。
この金額はあり得ない金額で、驚いています。
何が問題なのかお心当たりある方はいらっしゃいませんでしょうか。
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by kimono » 2010/7/23 19:28

こんにちわ。kimonoです :)

0:0にしてみると如何でしょうか?
また、includes/classes/_yamato.php
は何かしら変更していないでしょうか? もし、変更していた場合、一度元のファイルに戻してみると如何でしょうか?
アバター
maniad
記事: 38
登録日時: 2010/7/20 02:20

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by maniad » 2010/7/23 21:19

0:0にして、さらに_yamato.phpを念のためにオリジナルファイルで上書きしてみましたが、症状はかわりません。
わかったのは、64337円に若干お安くなりました・・・・ってオイ!

どうも、梱包計算ではない、もっと根本的な問題のような気がしてきました。
基準通貨をドルにしているからかな・・・・・と思ったら、その通りでした。
これ、ヤマト運輸は国内専用なので、こんなことになるのかもしれません。そうなると、国際運送のモジュールも入れているのですが、そっちでも問題が起こる可能性があるということですね。
うーん、困った。
これ、おそらくプログラマーの方なら、いじれるのかもしれませんが、送料計算に基準通貨と円との換算ルーチンが作られていないってことですね。
円を基準通貨にしたら、740円とリアリティのある金額になりました。

あと、
Yamato Express (1 x 2kg)
Groud TEXT_TIME_SPECIFY $8.53
のように、どうもPHPの変数(?)が表示されます。なんか、へんな動きです。特に配送関係のプログラムなどいじった覚えはないのですが。この表示部分は
includes/modules/shipping/yamato.phpの
if (!isset($tmpQuote['error'])) {
// 配送時刻指定
$timespec = $this->get_timespec();
$tmpQuote['option'] = TEXT_TIME_SPECIFY
. zen_draw_pull_down_menu('yamato_timespec', $a_yamato_time, $timespec);
のところのTEXT_TIME_SPECIFYがそのまま文字列になって表示されているようです。
アバター
ゲスト

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by ゲスト » 2010/7/23 22:00

英語用のテキストがないだけとか。
アバター
maniad
記事: 38
登録日時: 2010/7/20 02:20

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by maniad » 2010/7/24 00:31

テキストがないからって、変数名が表示されるなんてないと思いますが。あるの?
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by kimono » 2010/7/24 09:43

まず、海外にヤマトはそのままでは配送できないので、配送地域を日本国内だけに設定すればいいと思います。海外用にはなっていませんので、海外にそのまま対応できませんし、ヤマト側も配送できません。
また、次にローカライズの通貨設定を日本を1とした場合、例えば、ドルは0.01148800などとしっかりとした設定をしておくことにより、海外用の配送モジュールは適切な金額で表示されます。
弊社の着物サイトは、上記の設定で、日本国内限定で、佐川を設定し、海外の住所の場合は、佐川は表示されず、海外の配送会社だけになっています。
アバター
maniad
記事: 38
登録日時: 2010/7/20 02:20

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by maniad » 2010/7/24 11:39

kimono様

いつもコメントありがとうございます。
やはり、基本通貨設定を日本円にしないと、おっしゃっているような状況にはならないようです。
配送料がヤマトの料金テーブルに740とあると、それをわざわざ740ドルであると解釈して、なおかつ日本円に換算し直しているので、結果が8万円を超える金額になったりすることがわかりました。
これは、基本通貨単位を円にしないと解決しません。
ところが、商品の価格はなじみのない円よりもドルにしてほうが世界中の方が対応しやすいと思ってドルにしています。
ここがソフトの設定というよりも、ビジネスとしての悩みどころです。あはは。
なので、ちょっと考えてどうするか決めようと思います。

私のサイトは海外向けの販売専門にしようと思っておりましたところ、ZENCARTの言語切り替え機能を見て欲を出したのがいけなかったかと思います。なかなか日本語版といっても完成しつくされたソフトではないですから、仕方のないことです。

コメントありがとうございました。
アバター
maniad
記事: 38
登録日時: 2010/7/20 02:20

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by maniad » 2010/7/24 12:05

Delivery time(配達時間)と表示される部分に変数名のTEXT_TIME_SPECIFYが表示されてしまう問題は、ゲストさんのおっしゃっていたことが正解のようでした。
includes/languages/english.phpにこの変数の定義である
define('TEXT_TIME_SPECIFY','Delivery time);
の一文がありませんでしたので、追加してみたところ、きちんと表示されました。

昔、ベーシックと機械語でしかプログラムの経験のない私には、最近のプログラムの機能を知らないのですが、たしかに定義されていない変数をそのまま変数名を表示してくれるなら、デバッグもやりやすいということでこういう仕様になっているのでしょうか。勉強になりました。
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by kimono » 2010/7/24 12:39

ん?海外向けの販売サイトであれば、尚更、ヤマトはいらないんじゃないでしょうか?
単純にヤマトは日本国内向けですので、先ほどお伝えしたとおり、ヤマトを日本国内だけに限定すれば、海外の住所の時は表示されませんので、それで解決ではないのでしょうか? :?
アバター
maniad
記事: 38
登録日時: 2010/7/20 02:20

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by maniad » 2010/7/24 15:26

kimono様、もちろんヤマトは日本国内向けでしか表示されない設定にしております。
ローカライズの通貨設定をドルをデフォルトにすることで、このような不具合がでますので、ここを円にすれば解決します。

ここから先は、クレジット決済の問題になります。
基本通貨を円にしても、英語表示を選択したらローカライズの通貨設定の為替レート設定に従ってドル表示もしてくれます。

ところが、クレジットカードの決済会社はドルでも円でも決済してくれるといいのですが・・・・・てことです。しかも、ここで設定される為替レートはあくまでも参考レートで、カード会社の設定している為替レートと同じではありません。やはり、カード決済が円とドル両方で決済してくれることが必要になってきます。

そういえば、kimonoさんの着物のサイトは両方対応しているようですね。決済代行会社が両方に対応してくれているということですね?

カード会社が両建ての決済に応じてくれて、決済モジュールがZENCARTのこのローカライズの設定の為替レートで計算されたドル金額の決済に対応してくれるところが必要になります。

いろいろZENCARTと格闘してきましたが、どうやら、ここが最後の難関のようです。ここまでくると、zencartだけの問題ではなくなってくるので、ここで書いていいものか悩みました。でも、さらにトピックを立てる問題でもないので、書いてしまいました。

個人的にkimonoさんにご連絡してお聞きしようかと思ったのですが、私と同じことに悩んでいる人もいるかもしれませんので、ここに書かせていただきました。
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by kimono » 2010/7/24 16:30

あ。ちょっと分かったかもしれません。
ドルをデフォルトっていうことは、日本人もドル表記で見るようになっているということでしょうかね?
それであれば、言語と通貨を連動させておけば、日本語の国旗にして日本人は見るでしょうから、日本語の時は円表記に自動的になりますね。これも管理画面からできます。
また、もし、ドルをデフォルトにしていたとしても、カートから先は、住所を入れて、ユーザー登録しないと、先に進めませんので、その住所を元に、利用できる配送業者を表示させておりますので、その住所が海外であれば、ヤマトは表示されません。
ということをお伝えしたかっただけになります。

カード決済の話は、全く配送とは別の件になりますが、どちらでも対応できる会社もあれば、できない会社もありますので、販売するものとあわせてカード決済会社をしっかりと決めないといけないと思いますね。
アバター
maniad
記事: 38
登録日時: 2010/7/20 02:20

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by maniad » 2010/7/24 18:02

kimono様
ありがとうございます。

問題は、yamatoの配送料のテーブルが当然円通貨の単位で書かれております。
それは当然のことなのでいいのです。
問題は、ローカライズ設定の通貨設定でドルをデフォルトにした場合、ですね。

日本語表示にして、お客様の住所も日本国内のケースでは、当然ヤマト運輸の料金表示がされます。お客様の住所が海外の場合には表示されない設定になっております。

ここで問題が発生します。
配送料のテーブルが日本円を基準に書かれていますが、zencartではローカライズの通貨単位のデフォルトがドルに設定されているので、このテーブルをそのまま円単位表示せず、内部でドルとして扱い、それを日本語表記なので日本円に換算してくれています。
だから、ヤマト運輸の料金テーブルに720円書かれていた場合、これを720ドルと考えた上で日本円に換算し直してしまいます。
すると・・・・・送料が8万円を超える金額に変わってしまうのです。

ローカライズの基準通貨単位を円に設定すればいいだけのことなのですが・・・商品の価格が中途半端になっておさまりが悪いと言うだけの問題かもしれません。

あとは、クレジット決済の会社が気のきいたモジュールを提供してくれればOKなのです。

まだ試行錯誤しております。
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by kimono » 2010/7/24 18:19

うーん、やっぱりちょっと分からないですね。
単純にヤマトの配送を使う人がドル表記でお支払をするものでしょうか?
ヤマトであれば、日本への配送ですので、日本円でないと対応できないでしょうから、日本のときは、日本円を表示するようにすればいいのではないでしょうか?
弊社のサイトでは日本語の時は、日本円、英語のサイトの時はドル表記となっています。
アバター
maniad
記事: 38
登録日時: 2010/7/20 02:20

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by maniad » 2010/7/24 19:01

もちろん、ヤマトを使う人はドル表示は必要とされません。

たとえば、zencartの設定で日本語で設定した場合と、英語で設定した場合にそれぞれデフォルト貨幣単位が別々に設定できるのであれば、解決する問題です。これはこれで他に問題が生じてしまうでしょうが。
ですが、実際には日本語で設定しても英語で設定してもこれは言語に規定されないでどちらにも同じ設定が用いられます。

なので、円をデフォルトにすればヤマトで日本語表示、日本の配送先にしても問題ありません。
ところがドルをデフォルトにすると、宅急便の価格がとんでもない金額になってしまうのです。それは当然で、ZENCARTはヤマトの金額テーブルをデフォルト設定されているドルだとして処理するからです。720円が720ドルとして処理されてしまうのです。それを日本語表示ページに円換算して表示しますので、こんなことになるのです。お分かりいただけますか?

もちろん、ヤマトのモジュールによって、日本国内にのみ適応と設定しています。なので海外住所にはヤマトが表示されません。英語表記ではヤマトが選択できないとか表示できないとかはできませんが、それは表示設定ができないだけで、どうでもいいのです。

なんでドルをデフォルトにしたいのかと言われれば、海外をメインに考えたビジネスなので、毎日商品価格が変わっているというのは落ち着きが悪いと言うだけなのです。

おそらくヤマト運輸のモジュールに含まれる価格テーブルにこれは日本円の数値だよという情報を持たせ、モジュールがそれをZENCART本体で設定されたデフォルト通貨との為替換算をしてZENCART本体に引き渡していればいいのです。
そうすればこの問題は起こらないと思います。

問題点はわかっているので、プログラムが組めれば修正してしまうのですが・・・・・・。
アバター
BANKS
記事: 12
登録日時: 2008/11/28 11:11

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by BANKS » 2010/7/25 10:13

解決では無い横レスで、すみません。
この問題は、多国金額処理に多く見られますね

逆に日本円がデフォルトで、ドル決済を修正する時にも
ドルが円金額表示になってしまい
同様の誤金額計算になって苦慮しています

私どもでは、為替変動を自動化させていないので
ドル建て金額をある程度固定して処理しています。
(その方が帳簿処理が行いやすいという理由からですが...)

日々の為替変動に対応させなくても良い場合では
プログラムを修正するリスクをおかすよりも
日本円デフォルトで、ドル金額を固定する方法は
如何がでしょうか?
すれば、ヤマト送料の問題は、回避できる筈です
(根本的な解決でなくて、すみません)

ただし、上記の様にオーダー修正の時には、
直接データベースを修正する処理が発生してしまうのが難点です
BANKS Amplifiers
http://BANKS-amp.com
アバター
maniad
記事: 38
登録日時: 2010/7/20 02:20

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by maniad » 2010/7/25 15:52

BANKS 様

コメントありがとうございます。
なるほど、そういう手もありますね。

ちょっと問題がありますが。というのも、私、データベーステーブルまでいじれません。残念ながら。

もともと海外向けを中心にかんがえており、国内販売はついでのようなものでしたので、これに関しては断念するか、もしくは商品価格が変化することを許容するかで考えることにしました。

プログラムのルーチン的には大した変更ではなく対応できそうだと思うのですが、さすがに今からPHPを独習してプログラムをハックするのは気が長い話になってしまいますので・・・・。
アバター
BANKS
記事: 12
登録日時: 2008/11/28 11:11

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by BANKS » 2010/7/26 08:00

少し説明不足でした
データベーステーブルをイジる必要が有るのは、
注文の修正の時だけ
すなわち、ドル建て金額の変更が有る場合ですね

phpMyAdmin などで、該当の金額を変更する事が出来ます

元々のご質問の問題ですが
ドルをデフォルトで入力すると
商品の金額としてデータベースに保存されるのはドルのみ
円建てとして表示されているのは、為替レートで計算された金額
よって、ヤマト送料やエディットなどのデータベース金額を拾って来るモジュールは
多種通貨には適用できないから
という事だと思います。

対応させるには、結構手間が掛かりそうに感じます
各通貨別に入力できるようにする(拾ってくる時も別枠が必要)

為替レートで計算された金額をモジュール側で表示出来る様にする
(こちらは国別とかの自動判別も必要?)

実は、私も解決して欲しい問題だったりします
BANKS Amplifiers
http://BANKS-amp.com
アバター
きたきつね
記事: 147
登録日時: 2007/11/02 08:58

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by きたきつね » 2010/7/26 18:49

なんだか難しく考えているようなのでアドバイス
(外していたらごめんなさい&まじめに検証していないので適応は自己責任で)

まず、前提としてZencartで利用してるデフォルトの通貨単位はUSDと判断して良いですね?
※商品の値段などもそれで登録してある。

その前提で話をするとしてヤマトモジュール限定で変更するには

パターン1
/includes/classes/_yamato.php

コード: 全て選択

      $a_pricerank = array(
      'N01'=>array( 740, 950,1160,1370,1580,1790), // 通常便(01) 近距離
      'N02'=>array( 840,1050,1260,1470,1680,1890), // 通常便(02)
      'N03'=>array( 950,1160,1370,1580,1790,2000), // 通常便(03)
      'N04'=>array(1050,1260,1470,1680,1890,2100), // 通常便(04)
      'N05'=>array(1160,1370,1580,1790,2000,2210), // 通常便(05)
      'N06'=>array(1260,1470,1680,1890,2100,2310), // 通常便(06)
      'N07'=>array(1370,1580,1790,2000,2210,2420), // 通常便(07)
      'N08'=>array(1470,1680,1890,2100,2310,2520), // 通常便(08)
      'N09'=>array(1580,1790,2000,2210,2420,2630), // 通常便(09)
      'N10'=>array(1680,1890,2100,2310,2520,2730), // 通常便(10)
      'N11'=>array(1790,2000,2210,2420,2630,2840),  // 通常便(11) 遠距離
      'X05'=>array(1160,1680,2210,2730,3260,3780),//
      'X06'=>array(1260,1790,2310,2840,3360,3890),//
      'X07'=>array(1370,1890,2420,2940,3470,3990),//
      'X08'=>array(1470,2000,2520,3050,3570,4100),//
      'X09'=>array(1580,2100,2630,3150,3680,4200),//
      'X12'=>array(1890,2420,2940,3470,3990,4520) //
      );

をドルに換算して書きなおす。

パターン2
/includes/modules/shipping/yamato.php

コード: 全て選択

$this->quotes['methods'][] = $tmpQuote;

の真上に

コード: 全て選択

   if ($tmpQuote['cost'] != '' && DEFAULT_CURRENCY != 'JPY') {
     $jpy = $db->Execute("select value from " . TABLE_CURRENCIES . " where code = 'JPY'");
     if ($jpy->RecordCount() > 0) $tmpQuote['cost'] = $tmpQuote['cost'] / $jpy->fields['value'];
   }

を書き足す

の二通りですね。
パターン1ではドル表示の時には送料はレートの影響は受けませんが、円表示の時にはレートの影響を受けます。
パターン2ではパターン1と逆になります(ドル表示でレートの影響を受ける)
国内配送という事を考えるとパターン2が日本円表記でぶれなくて良いかもしれません。



両ファイルともphpファイル内にマルチバイト文字が記述されているので文字コードに注意してファイルを扱ってください。
あなたも私も一般人
( ^ω^) 照れるので様は止めてね
http://zencart-pro.com/
http://bigmouse.jp/
アバター
maniad
記事: 38
登録日時: 2010/7/20 02:20

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by maniad » 2010/7/29 11:03

きたきつねさん

そうです! こういうコードがあれば解決できる問題なんですよね。
以前、プログラムが組めるなら数行で解決するというようなことも書きましたが、まさに、こういう改造をすればということでした。

もうね、最近はPHPのプログラムの勉強始めようかと思ってましたよ。もう、高齢なのに・・・・・・。

ありがとうございます。
今、違う問題でプログラムが暴走してますので、それが落ち着いたらやってみます。
アバター
BANKS
記事: 12
登録日時: 2008/11/28 11:11

Re: 配送モジュールで宅急便がすごい値段になっちゃいます

投稿記事by BANKS » 2010/7/29 17:12

きたきつねさん、参考になります

送料なので、為替扱いは同じですよね
私が苦戦している、外貨でのオーダー修正と同じ扱いで悩んでました

edit orderモジュールで、多通貨仕様は有りましたっけ?
(別の件名となりますので、今後は別トビと致します)
BANKS Amplifiers
http://BANKS-amp.com

“Zen Cart 雑談処「禅亭」” へ戻る