1. TOPTOP
  2. Webサービス
  3. PayPal

BraintreeSDKを利用してPayPal ExpressCheckoutを実装する その11(エラーの確認とコードの修正)

|

braintree_payments_1_1

その10(新しいタブで開く)までの記事でBraintreeSDKを利用してPayPal ExpressCeckoutを実装するためのアカウントの取得やコードの記述を行いました。現時点でアプリケーションがどこまで動くか確認をして、エラーなどが発生したら修正を行っていきましょう。

コードの修正

$ pwd
/Users/myusername/Braintreetest
$ node app

とりあえずアプリケーションを動かしてみましょう。”node app.js”で動かすことができますが、”js”は省略できます。

オブジェクト変数”module-name”の修正

$ node app
/Users/myusername/Braintreetest/app.js:3
var module-name = require('path');
          ^
SyntaxError: Unexpected token -
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:374:25)
    at Object.Module._extensions..js (module.js:417:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Function.Module.runMain (module.js:442:10)
    at startup (node.js:136:18)
    at node.js:966:3

アプリケーションを実行するとまずapp.jsの3行目で文法エラーがあることを指摘されています。

// var module-name = require('path');
var path = require('path');

“module-name”というオブジェクト変数の名前を”path”に変更しましょう。13行目で使われている”app.set”メソッドの第二引数と合わせる必要があります。

オブジェクト変数”morgan”の修正

$ node app
/Users/myusername/Braintreetest/app.js:24
app.use(logger('dev'));
        ^
ReferenceError: logger is not defined
    at Object. (/Users/HiroshiFukui/Braintreetest/app.js:24:9)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Function.Module.runMain (module.js:442:10)
    at startup (node.js:136:18)

オブジェクト変数を”path”に修正した上で、もう一度アプリケーションを実行してみましょう。またしてもエラーが発生しました。「24行目の”logger”メソッドが定義されていない」と指摘されています。

// var morgan = require('morgan');
var logger = require('morgan');

“logger”はログを記録するメソッドです。ログを記録するモジュールは”morgan”に基づいて行いますので、4行目を確認しましょう。”morgan”という文字列がオブジェクト変数として使われていますので、メソッド名と合わせてオブジェクト変数の名前も”logger”に修正します。

“Hello World!”の削除

$ node app
server starting...

2つのオブジェクト変数を修正し、アプリケーションを実行するととりあえずサーバーは動きます。

paypal_braintree_payments_3_5

// resオブジェクトを使って、"Hello World!"を表示する
// app.get('/', function (req, res) {
//   res.send('Hello World from Braintree!');
// });

ですがブラウザで”localhost:3000″にアクセスすると、”Hello World from Braintree!”が表示されます。Expressが動いているかどうか、お試しで書いたお約束のコードですが不要なので削除します。詳細はその3(新しいタブで開く)の記事を参照してください。

Braintreeサーバーの認証情報を記入

$ node app
server starting...
/Users/HiroshiFukui/Braintreetest/routes/index.js:23
    res.render('index', { clientToken: response.clientToken });
                                               ^

TypeError: Cannot read property 'clientToken' of undefined
    at /Users/HiroshiFukui/Braintreetest/routes/index.js:23:48
    at null._onTimeout (/Users/HiroshiFukui/Braintreetest/node_modules/braintree/node_modules/@braintree/wrap-promise/lib/deferred.js:9:10)
    at Timer.listOnTimeout (timers.js:92:15)

再度、アプリケーションを実行してみましょう。とりあえずはサーバーは動いているように見えますが、しばらくすると”clientTokenが定義されていない”と叱られます。

access_Tokenの記述

paypal_braintree_payments_11_2

ブラウザから”localhost:3000″にアクセスすると、再び画面が表示されます。このエラーは”clientToken”を作成するための”access_Token”が入力されていないために発生するエラーです。したがってPayPal developerで取得したaccess_Tokenを入力しましょう。詳細はその6(新しいタブで開く)の記事を参考にしてください

なおaccess_Tokenは秘密の文字列なのでGitHub上ではダミーの文字列を使用しています。

BraintreeのAPI認証情報の入力

var BT_ENV = braintree.Environment.Sandbox,
    BT_ID = "DUMMYID",
    BT_PUB = "DUMMYPUBLIC",
    BT_PRI = "DUMMYPRIVATE";

access_Tokenの入力が完了したら、合わせてBraintreeのAPI認証情報(BT_ID,BT_PUB,BT_PRI)も入力しましょう。

views以下のディレクトリがないというエラーについて

paypal_braintree_payments_11

ここまでの作業を経てブラウザから”localhost:3000″にアクセスすると、今度は”viewsディレクトリとその下に必要なファイルがない(Error: Failed to lookup view “error” in views directory )”と叱られます。ですが説明しだすと長くなりますので、続きは次回ということで。今回の変更内容についてGitHubにUPしています。その12(新しいタブで開く)に続きます。