2

Paypal Android SDKがv2.5.0以降、PaypalPaymentに追加customまたは追加するオプションを追加したことに気付きました。次のようなカスタム値とともにアイテムを PaypalPayment に追加できるようになりました。invoice

PayPalPayment payment = new PayPalPayment(new BigDecimal("1.75"), "USD", "sample item",
            PayPalPayment.PAYMENT_INTENT_SALE);
payment.custom("my custom value");

ただし、ドキュメントでこのカスタム値を回復する方法については言及されていませんonActivityResult。これが私のコードです:

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == REQUEST_CODE_PAYMENT) {
                if (resultCode == Activity.RESULT_OK) {
                    PaymentConfirmation confirm = data
                            .getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);
                    if (confirm != null) {
                        try {
//How do I get `custom` from `confirm` object here???

                            Log.e(TAG, confirm.toJSONObject().toString(4));
                            Log.e(TAG, confirm.getPayment().toJSONObject()
                                    .toString(4));

                            String paymentId = confirm.toJSONObject()
                                    .getJSONObject("response").getString("id");

                            String payment_client = confirm.getPayment()
                                    .toJSONObject().toString();

                            Log.e(TAG, "paymentId: " + paymentId
                                    + ", payment_json: " + payment_client);

                            //Payment verification logic

                        } catch (JSONException e) {
                            Log.e(TAG, "Meow! Coders ye be warned: ",e);
                        }
                    }
                } else if (resultCode == Activity.RESULT_CANCELED) {
                    Log.e(TAG, "The user canceled.");
                } else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) {
                    Log.e(TAG,"Invalid Payment");
                }
            }
        }

カスタムの代わりに請求書番号を使用しても、 PaymentConfirmationオブジェクトから取得できるメソッドも、そのメソッドPaypalPaymentもないようです。

4

1 に答える 1

1

次のようにリフレクションを介してフィールドを取得できますが、本番環境でこれを行うのはおそらくひどい考えです(1つには、フィールド名「l」が安定しているかどうかわかりませんが、支払い処理時の Android Studio デバッガー):

Field custom = confirm.getPayment().getClass().getDeclaredField("l");
custom.setAccessible(true);
String customID = (String) custom.get(confirm.getPayment());
Log.i(TAG, customID);

多くの例外をトラップする必要があることに注意してください - How do I read a private field in Java? を参照してください。詳細については。本当に PayPal は、更新された SDK をリリースし、getter を介してこのフィールドへのアクセスを提供する必要があります。繰り返しますが、これを本番環境で実際に使用することは想像できませんが、少なくとも Android 4.2 では動作します。

于 2015-11-15T00:21:38.760 に答える