2017-07-12 34 views
0

私はすべてのことについて混乱しています。私はアンドロイドの開発者です。今は私のアプリで支払いを統合する必要があるので、私はpaypalゲートウェイを使用しました。サーバーなので、firebaseを使ってnode.jsを使う必要があることを伝えました私はそれを知らないが、ネット上で見つけたものをやろうとしたが、誰かが私が間違っている場所や簡単な方法があると私に説明できるのであれば、ここに私のコードがある!ありがとうございました!AndroidクライアントからサーバNode.jsからFirebase経由で支払い

私の機能フォルダ内の私のindex.jsで私のコードです
public class MainActivity extends AppCompatActivity { 

    private static final String CONFIG_ENVIRONMENT = PayPalConfiguration.ENVIRONMENT_SANDBOX; 
    private static final String CONFIG_CLIENT_ID = 
      "Here there is my actual client id"; 
    private static final int REQUEST_CODE_PAYMENT = 1; 
    private static final int REQUEST_CODE_FUTURE_PAYMENT = 2; 
    private static final int REQUEST_CODE_PROFILE_SHARING = 3; 
    private static final String TAG = MainActivity.class.getSimpleName(); 
    private static PayPalConfiguration config = new PayPalConfiguration() 
      .environment(CONFIG_ENVIRONMENT) 
      .clientId(CONFIG_CLIENT_ID) 
      .merchantName("Example Merchant") 
      .merchantPrivacyPolicyUri(Uri.parse("https://www.example.com/privacy")) 
      .merchantUserAgreementUri(Uri.parse("https://www.example.com/legal")); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     findViewById(R.id.buyItBtn).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       PayPalPayment thingToBuy = new PayPalPayment(new BigDecimal("0.01"), "USD", "sample item", 
         PayPalPayment.PAYMENT_INTENT_SALE); 
       Intent intent = new Intent(MainActivity.this, PaymentActivity.class); 
       intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config); 
       intent.putExtra(PaymentActivity.EXTRA_PAYMENT, thingToBuy); 
       startActivityForResult(intent, REQUEST_CODE_PAYMENT); 
      } 
     }); 
     findViewById(R.id.futurePaymentBtn).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MainActivity.this, PayPalFuturePaymentActivity.class); 
       intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config); 
       startActivityForResult(intent, REQUEST_CODE_FUTURE_PAYMENT); 
      } 
     }); 
     findViewById(R.id.profileSharingBtn).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MainActivity.this, PayPalProfileSharingActivity.class); 
       intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config); 
       intent.putExtra(PayPalProfileSharingActivity.EXTRA_REQUESTED_SCOPES, getOauthScopes()); 
       startActivityForResult(intent, REQUEST_CODE_PROFILE_SHARING); 
      } 
     }); 

     Intent intent = new Intent(this, PayPalService.class); 
     intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config); 
     startService(intent); 
    } 

    private PayPalOAuthScopes getOauthScopes() { 
     Set scopes = new HashSet(Arrays.asList(PayPalOAuthScopes.PAYPAL_SCOPE_EMAIL, PayPalOAuthScopes.PAYPAL_SCOPE_ADDRESS)); 
     return new PayPalOAuthScopes(scopes); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_CODE_PAYMENT && resultCode == Activity.RESULT_OK) { 
      PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION); 
      if (confirm != null) { 
       try { 
        Log.i(TAG, confirm.toJSONObject().toString(4)); 
        Log.i(TAG, confirm.getPayment().toJSONObject().toString(4)); 
        //TODO: envoyer 'confirm' et si possible confirm.getPayment() à votre server pour la vérification 
        Toast.makeText(getApplicationContext(), "PaymentConfirmation info received from PayPal", Toast.LENGTH_LONG).show(); 
       } catch (JSONException e) { 
        Log.e(TAG, "an extremely unlikely failure occurred: ", e); 
       } 
      } 
     } else if (requestCode == REQUEST_CODE_FUTURE_PAYMENT && resultCode == Activity.RESULT_OK) { 
      PayPalAuthorization auth = 
        data.getParcelableExtra(PayPalFuturePaymentActivity.EXTRA_RESULT_AUTHORIZATION); 
      if (auth != null) { 
       String authorization_code = auth.getAuthorizationCode(); 
       sendAuthorizationToServer(authorization_code); 
      } 
     } else if (requestCode == REQUEST_CODE_PROFILE_SHARING && resultCode == Activity.RESULT_OK) { 
      PayPalAuthorization auth = data.getParcelableExtra(PayPalProfileSharingActivity.EXTRA_RESULT_AUTHORIZATION); 
      if (auth != null) { 
       String authorization_code = auth.getAuthorizationCode(); 
       sendAuthorizationToServer(authorization_code); 
      } 
     } 
    } 

    private void sendAuthorizationToServer(String auth) { 

    } 
} 

var braintree = require("braintree"); 

var express = require('express'), 
    app = express(); 

var gateway = braintree.connect({ 
    environment: braintree.Environment.Sandbox, 
    merchantId: "actual merchand id", 
    publicKey: "actual publicKey", 
    privateKey: "actual privateKey" 
}); 

var gateway = braintree.connect({ 
    accessToken: "actual accesstoken" 
}); 

app.get("/client_token", function (req, res) { 
    gateway.clientToken.generate({}, function (err, response) { 
    res.send(response.clientToken); 
    }); 
}); 

app.get("/checkout", function (req, res) { 
    var nonce = req.body.payment_method_nonce; 
    // Use payment method nonce here 
}); 

いくつかのファイルやコードが不足している場合を教えてください、また、私は私のindex.jsファイル内の関数を呼ぶのですか私のアンドロイドコードから? ありがとう!それはuがノードJS あなたが知られているファイルを持つことになりますと、ローカルマシン上で実行されている場合は、サーバーにアクセスしてみてください、これらの線

var port = '3333'; app.set('port', port);

を追加してみてください上で実行するために

+0

何が起こっているはずですし、何が起こっているのでしょうか? –

答えて

0

あなたのindex.jsはポートが不足していますとしてpackage.jsonはuがブレインを持っていることを確認し、コマンドを使用npm install を実行し内部の依存関係を表現します彼らは、ある私は、ここで二つの機能1回の作業ではない他のものを持っているあなたは

http://localhost:3333/checkoutまたは/ client_token

+0

OKタンクは、できるだけ早く試してみます。唯一のことは、すでにfirebaseでhttpアドレスを持っていることです。 –

+0

いいえ、あなたのサーバーがコンセプトを実行している限り同じであるべきではありませんこのリンクを確認してくださいhttps://firebase.google.com/docs/hosting/quickstart –

+0

ありがとう、しかし、私はしようとしているときに動作しませんそれはアンドロイドを介してアクセス:java.net.ConnectException:10000ms後にlocalhost/127.0.0.1(ポート3333)への接続に失敗しました:isConnected失敗:ECONNREFUSED(Connection refused)!私がリンクをクリックしているときにプラスhttp:// localhost:3333/checkout私はどこにも終わりません、それは普通ですか? –

0

を使用してgetメソッドの両方にアクセスできるようにする必要があり、サーバー

を開始するなぜ、bigbenがapp.get: の関数がfirebase-functionsと同じではないのか説明できますか?

exports.bigben = functions.https.onRequest((req, res) => { 
    const hours = (new Date().getHours() % 12) + 1 // london is UTC + 1hr; 
    res.status(200).send(`<!doctype html> 
    <head> 
     <title>Time</title> 
    </head> 
    <body> 
     ${'BONG '.repeat(hours)} 
    </body> 
    </html>`); 
}); 

app.get("/client_token", function(req, res) { 
    gateway.clientToken.generate({}, function (err, response) { 
    res.send(response.clientToken); 
    }); 
}); 

は、だから私は、最初のように、第2の書き換えを試みたが、私はそれで終わった、とJSを知らなくても、私は何かがここで間違っている知っている:

exports.tokenclient = functions.https.onRequest((req, res) =>{ 
    res.send(response.clientToken); 
}); 
関連する問題