soundBoxにて実装を行なっております。
その中で購入時に
クレジットカード情報を入力しトークンを発行(3Dセキュアも含む)したのちに
APIで顧客情報を作成しクレジットカードを保存しその後決済をしようと考えています。
その上でまずは保存のみの実装を下記のように行いました。
$card = new Card();
$card->setCustomerId($customerId);
$createCardRequest = new CreateCardRequest(
uniqid('pk_', true) . bin2hex(random_bytes(4)),
$squareToken,
$card
);
$createCardRequest->setVerificationToken($square3DToken);
$api_response = $this->_client->getCardsApi()->createCard($createCardRequest);
if ($api_response->isSuccess()) {
$result = $api_response->getResult();
$cardId = $result->getCard()->getId();
} else {
$errors = $api_response->getErrors();
errorCommon::sendError('カードが紐づけられませんでした。' . $errors[0]->getDetail() , __FILE__);
}
ですが保存を試みると
The verification token provided is invalid.
とエラーが発生します。
なのでトークンの発行時に何か失敗しているのではないかと思い、
一旦保存は後回しにし決済実行のみ行おうと試みると問題なく決済は実行ができました。
保存時は発行するトークンがまた別なのでしょうか?
それとも実装方法に問題があるのでしょうか?
わかる方いらっしゃいましたらお願いいたします。
念の為決済時の実装も記載いたします。
JSでトークンを作る際に
@思考中_user さん
確認させていただきましたところ、3Dセキュアは日本では現時点では本番環境内では利用できないため、intent: STOREの方法で保存するのではなく、Cards APIとCustomers APIをご利用いただくことになるとのことです。詳細はCards APIからご確認ください。
もし解決できない場合は、お手数ですが英語で開発者サポートまでお問い合わせ下さい。
他のAPI利用者から回答が得られやすい、開発者用コミュニティもご活用ください:Square Developer Forum
本番環境で上記のように3Dセキュアを実装した場合はエラーになってしまうのでしょうか?
また、Sandboxではテストカードで利用できるが本番では利用できないといったことでしょうか?
また、2025年より3Dセキュアは義務化されるかと思いますが、今後API利用時に3Dセキュアは実装されないのでしょうか?
よろしくお願いいたします。
@思考中_user さん
はい、現時点では日本において本番環境ではご利用いただけません。また、今後3Dセキュアをご利用いただけるよう、対応中でございます。
よろしくお願いいたします。
Square Community