Wallet api

3,612 views
3,381 views

Published on

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,612
On SlideShare
0
From Embeds
0
Number of Embeds
2,718
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Wallet api

  1. 1. Google Wallet Instant BuyAndroid API13年5月29日水曜日
  2. 2. 本APIは現時点でI/O参加者にしか開放されていません!一般公開を楽しみにお待ちくださいm(_ _)m13年5月29日水曜日
  3. 3. このAPIは何か?13年5月29日水曜日
  4. 4. このAPIは何か?• 物理商品を販売するAndroidアプリにGoogle Wallet決済を簡単に提供• 顧客はGoogle Walletに安全に決済情報や配送先を保存• 業者にクレジットカードを直接渡さないため安全• 実際には決済毎にワンタイムの仮想デビットカードで決済が行われる13年5月29日水曜日
  5. 5. 重要用語• Masked Wallet Request / Response• カードや住所が一部隠された情報• Full Wallet Request / Response• 決済を完了するための正当な情報(詳しくは後述)13年5月29日水曜日
  6. 6. 決済の流れ13年5月29日水曜日
  7. 7. 決済の流れ1. アプリからMasked Walletを要求2. GoogleがMasked Walletを返すので、アプリでは確認表示などに用いる3. アプリからFull Walletを要求4. Full Walletの情報が、ワンタイムの仮想カード情報と共に返される5. 決済が完了したらTransaction StatusをGoogleに送信13年5月29日水曜日
  8. 8. 具体的なAPIの流れ13年5月29日水曜日
  9. 9. • Buy with Google Wallet button を設置• onConnected()• ボタンをクリック• onMaskedWalletLoaded()• 過去に情報を入力していればそれを使い、無ければ新規入力を促す ( startResolutionForResult() )• 注文を確定 (loadFullWallet)• onFullWalletLoaded()• Full Walletと一緒に返されるワンタイムカードの情報を使って決済• Transactionの成否をWallet Clientを通じてGoogleに返す13年5月29日水曜日
  10. 10. WalletClient mWalletClient = new WalletClient(      context, environment, accountName      connectionCallbackListener,connectionFailedListener);mWalletClient.connect();Wallet Client 初期化13年5月29日水曜日
  11. 11. 初期化のCallbackpublic void onConnected(connectionHint) {  mWalletClient.checkForPreAuthorization(this);13年5月29日水曜日
  12. 12. Masked Wallet RequestMaskedWalletRequest mwRequest =  MaskedWalletRequest.newBuilder()  .setMerchantName(Constants.MERCHANT_NAME)  .setPhoneNumberRequired(true)  .setShippingAddressRequired(true)  .setCurrencyCode("USD")  .setEstimatedTotalPrice("150.00")  .build();mWalletClient.loadMaskedWallet(mwRequest,maskedWalletLoadedListener);13年5月29日水曜日
  13. 13. callback@Overridepublic void onMaskedWalletLoaded(ConnectionResult result,      MaskedWallet wallet) {  if (result.isSuccess()) {    // handling for case where user has preauthorized     . . .  } else {    if (result.hasResolution()) {      try {        result.startResolutionForResult(activity, requestCode);      } catch (SendIntentException e) {        mWalletClient.connect();      }    }  }}13年5月29日水曜日
  14. 14. 事前登録してある場合@Overridepublic void onMaskedWalletLoaded(ConnectionResultresult,    MaskedWallet wallet) {  if (result.isSuccess()) {    mMaskedWallet = wallet;    launchConfirmationPage();  }}13年5月29日水曜日
  15. 15. startResolutionForResult() の場合public void onActivityResult(int requestCode, int resultCode, Intent data) {  if (requestCode == requestCode used in startResolutionForResult) {    switch (resultCode) {      case Activity.RESULT_OK:        mMaskedWallet =          data.getParcelableExtra(WalletConstants.EXTRA_MASKED_WALLET);        break;      case Activity.RESULT_CANCELED:        // fetch a new ConnectionResult as below or you may        //go back to previous app flow        mWalletClient.loadMaskedWallet(        mwRequest,        maskedWalletLoadedListener);        break;      default:        int errorCode = data.getIntExtra(WalletConstants.EXTRA_ERROR_CODE,          -1);        handleError(errorCode);    }  }}13年5月29日水曜日
  16. 16. Full Wallet RequestFullWalletRequest fullWalletRequest = FullWalletRequest.newBuilder()  .setGoogleTransactionId(googleTransactionId)  .setCart(Cart.newBuilder()          .setCurrencyCode(Constants.CURRENCY_CODE_USD)          .setTotalPrice(toDollars(context, itemInfo.getTotalPrice()))          .addLineItem(LineItem.newBuilder()                  .setCurrencyCode(Constants.CURRENCY_CODE_USD)                  .setDescription(itemInfo.name)                  .setQuantity("1")                  .setUnitPrice(toDollars(context, itemInfo.priceMicros))                  .setTotalPrice(toDollars(context, itemInfo.priceMicros))                  .build())          .addLineItem(LineItem.newBuilder()                  .setCurrencyCode(Constants.CURRENCY_CODE_USD)                  .setDescription(Constants.DESCRIPTION_LINE_ITEM_SHIPPING)                  .setRole(LineItem.Role.SHIPPING)                  .setTotalPrice(toDollars(context, itemInfo.shippingPriceMicros))                  .build())          .addLineItem(LineItem.newBuilder()                  .setCurrencyCode(Constants.CURRENCY_CODE_USD)                  .setDescription(Constants.DESCRIPTION_LINE_ITEM_TAX)                  .setRole(LineItem.Role.TAX)                  .setTotalPrice(toDollars(context, itemInfo.taxMicros))                  .build())          .build())  .build();mWalletClient.loadFullWallet(fullWalletRequest, fullWalletLoadedListener);13年5月29日水曜日
  17. 17. callback@Overridepublic void onFullWalletLoaded(ConnectionResult result, FullWalletfullWallet) {  if (result.isSuccess()) {    // The full wallet is received here     . . .  } else if (result.hasResolution()) {    try {      result.startResolutionForResult(getActivity(),            Constants.REQUEST_CODE_RESOLVE_LOAD_FULL_WALLET);    } catch (SendIntentException e) {      // retry loading the full wallet       . . .    }  }}13年5月29日水曜日
  18. 18. 仮想カード情報String accountNumber  =  mFullWallet.getProxyCard().getPan();String securityCvv  =mFullWallet.getProxyCard().getCvn();int expirationYear =mFullWallet.getExpirationYear();int expirationMonth =mFullWallet.getExpirationMonth();Address billingAddress =mFullWallet.getBillingAddress();Address shippingAddress =mFullWallet.getShippingAddress();13年5月29日水曜日
  19. 19. Notify the Transaction ResultNotifyTransactionStatusRequest notifyTxRequest =NotifyTransactionStatusRequest.newBuilder()  .setGoogleTransactionId(googleTransactionId)  .setStatus(NotifyTransactionStatusRequest.Status.SUCCESS)  .build();mWalletClient.notifyTransactionStatus(notifyTxRequest)13年5月29日水曜日
  20. 20. clean up@Overridepublic void onStop() {  super.onStop();  mWalletClient.disconnect();}13年5月29日水曜日
  21. 21. デモ13年5月29日水曜日
  22. 22. Card Type Card Number CSC Expiration DateAmerican Express 3782 8224 6310 005 any four digits any future dateDiscover 6011 0999 0037 2372 any three digits any future dateMasterCard 5555 5555 5555 4444 any three digits any future dateVisa 4111 1111 1111 1111 any three digits any future date13年5月29日水曜日
  23. 23. 一般公開をお楽しみに!@fushiroyama13年5月29日水曜日

×