前提・実現したいこと
クレジットカードの登録をGMOペイメントのサービスで利用していて、これまでリンク型というもので実施していたものをAPI型に変更したいため修正をしているところです。
クレジットカードの新規登録を行う部分の実装なのですが、GMO側で用意しているPaymentClientというインターフェイスを利用するとのことで以下のコードを書きテストを実施しましたが、エラーとなってしまいます。
Controllerが呼び出せていない状態です。まずい箇所がわかる方はいらっしゃいますでしょうか?
発生している問題・エラーメッセージ
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'creditApiController': Unsatisfied dependency expressed through field 'paymentClient'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.gmo_pg.g_pay.client.PaymentClient' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
該当のソースコード
Java
1package com.test.controller; 2 3// ※各種必要なものはimportされている。 4 5@Scope("prototype") 6@Controller 7public class CreditApiController extends BaseApiController { 8 9 @Autowired 10 private CreditService creditService; 11 12 @Autowired 13 PaymentClient paymentClient; 14 15 /** サイトID */ 16 @Value("${gmo.site.id:}") 17 private String P_SITE_ID; 18 19 /** サイトパスワード */ 20 @Value("${gmo.site.pass:}") 21 private String P_SITE_PASS; 22 23 /** ショップID */ 24 @Value("${gmo.shop.id:}") 25 private String P_SHOP_ID; 26 27 /** ショップパスワード */ 28 @Value("${gmo.shop.pass:}") 29 private String P_SHOP_PASS; 30 31 @RequestMapping(value = "/credit", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, method = RequestMethod.POST) 32 public ResponseEntity<CreditAddResponse> addAccounts ( 33 @RequestHeader(value = "X-Acl-Token") String aclToken, 34 @Validated @ApiParam(value = "登録するクレジットカード情報", required = true) @RequestBody CreditAddForm input, 35 Errors errors) throws PaymentException { 36 37 // aclトークンをセット. 38 creditService.setAclToken(aclToken); 39 40 String userId = creditService.getUserId(); 41 42 // クレカの属性を取得する 43 SearchCardDetailInput searchCardDetailInput = new SearchCardDetailInput(); 44 searchCardDetailInput.setShopID(P_SHOP_ID); 45 searchCardDetailInput.setShopPass(P_SHOP_PASS); 46 searchCardDetailInput.setToken(input.getToken()); 47 SearchCardDetailOutput output = paymentClient.doSearchCardDetail(searchCardDetailInput); //ここでエラーになっている。 48 List<CardInfo> cardList = output.getCardList(); 49 for (CardInfo cardInfo : cardList) { 50 String debitFlag = cardInfo.getDebitPrepaidFlag(); 51 // debidFlag =0 は正常なクレジットカード 52 if ("0".equals(debitFlag)) { 53 // GMO会員登録を行う 54 SaveMemberInput saveMemberInput = new SaveMemberInput(); 55 saveMemberInput.setSiteId(P_SITE_ID); 56 saveMemberInput.setSitePass(P_SITE_PASS); 57 saveMemberInput.setMemberId(userId); 58 SaveMemberOutput saveMemberOutput = paymentClient.doSaveMember(saveMemberInput); 59 String gmoMemberId = saveMemberOutput.getMemberId(); 60 61 // GMOカード登録を行う 62 SaveCardInput saveCardInput = new SaveCardInput(); 63 saveCardInput.setSiteId(P_SITE_ID); 64 saveCardInput.setSitePass(P_SITE_PASS); 65 saveCardInput.setMemberId(gmoMemberId); 66 saveCardInput.setToken(input.getToken()); 67 paymentClient.doSaveCard(saveCardInput); 68 // debidFlag != 0 はデビッドまたはプリペイドなのでエラーにする 69 } else { 70 throw new Exception("CRE_E001"); 71 } 72 } 73 74 // GMOに登録したカードの情報を取得する。 75 SearchCardInput searchCardInput = new SearchCardInput(); 76 searchCardInput.setSiteId(P_SITE_ID); 77 searchCardInput.setSitePass(P_SITE_PASS); 78 searchCardInput.setMemberId(userId); 79 searchCardInput.setSeqMode("0"); 80 SearchCardOutput searchCardOutput = paymentClient.doSearchCard(searchCardInput); 81 List<CardInfo> cardInfoList = searchCardOutput.getCardList(); 82 CreditAddResult result = new CreditAddResult(); 83 for (CardInfo cardInfo : cardInfoList) { 84 result.setCreditNo(cardInfo.getCardNo()); 85 } 86 CreditAddResponse model = new CreditAddResponse(); 87 model.setResult(result); 88 return new ResponseEntity<>(model, HttpStatus.OK); 89 } 90} 91
補足情報(FW/ツールのバージョンなど)
Java8
SpringBoot2.0.2
あなたの回答
tips
プレビュー