質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

2988閲覧

welcartでのクレジット決済エラー

u-sukesan

総合スコア156

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2020/08/11 01:43

welcartにてソニーペイメントでのクレジットカード決済を導入したのですが、決済時にエラーが発生しており
原因は突き止めたのですが、その対処法が分からず困っております。

——————————————–
WordPress のバージョン:(5.4.2)
Welcart のバージョン:(1.9.31)
PHP のバージョン:(7.2)
テーマ:(WelcartBasic の自作子テーマ)
症状を確認したブラウザ:chrome
サーバー:kagoya
SSLの利用:(常時SSL)
デバイス:imac
——————————————–

現象
サイト内にて、会員登録、クレジット登録は問題なく行われており、他は異常なし
カートに商品を入れ、決済画面に進み、クレジットカードで決済を進めようとすると
「カード情報を正しくご入力ください。」というエラーが出る。
ソニーペイメントに確認すると「同じトークンが利用されているためのエラー」として回答があり
決済画面のソースでフォームを調べてみると

html

1<input type="hidden" name="token" id="token" value="">

とtoken部分が空になっているのを確認。
そこでこのtokenの生成箇所を調べたところ
下記ファイルに生成したtokenをセットする記述

cart_escott.js

javascript

1 2function setToken( token, card ) { 3 if( token ) { 4 document.getElementById( "token" ).value = token; 5 document.getElementById( "delivery-form" ).submit(); 6 } else { 7 document.getElementById( "escott-token-response" ).value = ""; 8 } 9}

それと上記を発動させる記述が

paymentWelcart.class.php

public function enqueue_scripts() { global $usces; //発送・支払方法ページ、クレジットカード情報更新ページ if( !is_admin() && $this->is_validity_acting( 'card' ) && ( 'delivery' == $usces->page || 'member_register_settlement' == $usces->page || 'member_update_settlement' == $usces->page ) ): $acting_opts = $this->get_acting_settings(); if( isset( $acting_opts['card_activate'] ) && 'token' == $acting_opts['card_activate'] ): ?> <script type="text/javascript" src="<?php esc_html_e( $acting_opts['api_token'] ); ?>?k_TokenNinsyoCode=<?php esc_html_e( $acting_opts['token_code'] ); ?>" callBackFunc="setToken" class="spsvToken"></script> <?php endif; endif; }

外部ファイルにアクセスした結果 callBackFuncで呼び出している模様

サイトのソースを見るとheader内に

<script type="text/javascript" src="https://www.test.e-scott.jp/euser/stn/CdGetJavaScript.do?k_TokenNinsyoCode= トークン決済認証コード" callbackfunc="setToken" class="spsvToken"></script>

という記述を発見しましたので、paymentWelcart.class.php内のenqueue_scripts()は機能しているかと思われます。
試しに下記のようにsetToken内にconsoleを書いてみましたが反応はありません。

cart_escott.js

javascript

1 2function setToken( token, card ) { 3console.log('test'); 4 if( token ) { 5 document.getElementById( "token" ).value = token; 6 document.getElementById( "delivery-form" ).submit(); 7 } else { 8 document.getElementById( "escott-token-response" ).value = ""; 9 } 10}

ちなみに、chromeの開発ツールのエレメントで

html

1<input type="hidden" name="token" id="token" value="適当な数字">

に直接適当な値を入れて実行したら決済画面は次に進みましたので、tokenが設定されていないのが原因だと思われます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

カート部分のボタンのclass名をカスタマイズしたことで、エラーが出ていたようです。
デフォルトのclass名に変更して解決いたしました。

投稿2020/08/12 03:11

u-sukesan

総合スコア156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問