
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が設定されていないのが原因だと思われます。
回答1件
あなたの回答
tips
プレビュー