1. 程式人生 > >Android 如何整合Paypal支付

Android 如何整合Paypal支付

最近做一個專案用到Paypal支付,官網上有整合文件,但是感覺有點複雜,我再這裡把步驟優化一下,方便大家整合!

1:支付流程:

Paypal 的支付流程很簡單,我們把錢支付到商家paypal成功以後,paypal會返回給我們一個支付ID,我們拿著支付ID傳給伺服器,伺服器進行驗證(確定客戶是否支付完成),驗證成功後,這個支付就成功了。

2:如何整合Paypal?

  首先註冊Paypal商家賬號,註冊完成後登入 https://developer.paypal.com/

  我們會看到下面的選單欄有這一項,

  點選My Apps 我們可以在這裡面建立APP,APP建立成功以後,我們就可以獲得一個Client ID

Secret,這個很重要哦!在程式碼裡面要用到的,並且這個ID又兩個,一個是測試(sandbox)用的,一個是開發(live)環境用的。

  在裡面我們還需要申請測試賬號,在裡面可以分配虛擬貨幣,給我們測試用,步驟就不介紹啦,有問題可以留言諮詢哈!

 下面我們看一下如何整合到程式碼裡面

 我們可以參考github上的Demo https://github.com/paypal/PayPal-Android-SDK

    1:在專案的gradle裡面配置

    
          compile 'com.paypal.sdk:paypal-android-sdk:2.15.2'

    2:初始化配置
private
static PayPalConfiguration config = new PayPalConfiguration() // 測試環境(ENVIRONMENT_SANDBOX) // 正式(ENVIRONMENT_PRODUCTION) .environment(PayPalConfiguration.ENVIRONMENT_NO_NETWORK)//這裡用的是虛擬環境,在沒有clientId的時候用這個。 .clientId("<YOUR_CLIENT_ID>");//這裡要填我們建立APP的時候給的clientId //注意:這裡的ID有兩套,一個是測試用的,對應的上面environment就是 ENVIRONMENT_SANDBOX
。兩個不能用亂了。

    3:啟動Paypal服務,並且在onDestroy時停止服務。

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

    Intent intent = new Intent(this, PayPalService.class);

    intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);

    startService(intent);
}

@Override
public void onDestroy() {
    stopService(new Intent(this, PayPalService.class));
    super.onDestroy();
}


  4:建立支付,進入支付頁面

public void onBuyPressed(View pressed) {

    // PAYMENT_INTENT_SALE 將導致支付立即完成。.
    // Change PAYMENT_INTENT_SALE to 
    //   - PAYMENT_INTENT_AUTHORIZE to only authorize payment and capture funds later.
    //   - PAYMENT_INTENT_ORDER to create a payment for authorization and capture
    //     later via calls from your server.
  PayPalPayment payment = new PayPalPayment(new BigDecimal("1.75"), "USD""sample item"PayPalPayment.PAYMENT_INTENT_SALE);
 Intent intent = new Intent(this, PaymentActivity.class);    // send the same configuration for restart resiliency    
intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);    
intent.putExtra(PaymentActivity.EXTRA_PAYMENT, payment);    
startActivityForResult(intent, 0);}

5:實現支付回撥
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK) {
        PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);
        if (confirm != null) {
            try {
                Log.i("paymentExample", confirm.toJSONObject().toString(4));

                // TODO:這裡我們可以拿到confirm,裡面有個id我們需要把這個id傳給我們自己的伺服器,然後伺服器進行驗證。
             

            } catch (JSONException e) {
                Log.e("paymentExample", "an extremely unlikely failure occurred: ", e);
            }
        }
    }
    else if (resultCode == Activity.RESULT_CANCELED) {
        Log.i("paymentExample", "The user canceled.");
    }
    else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) {
        Log.i("paymentExample", "An invalid Payment or PayPalConfiguration was submitted. Please see the docs.");
    }
}



6:服務端驗證

   我們拿到支付ID後,傳給伺服器,伺服器會驗證客戶是否支付成功。當然,服務端也是需要整合Paypal的程式碼,進行驗證的。

7:最後mainfests

 <activity android:name="com.paypal.android.sdk.payments.PaymentActivity" />
        <activity android:name="com.paypal.android.sdk.payments.PaymentMethodActivity" />
        <activity android:name="com.paypal.android.sdk.payments.PaymentConfirmActivity" />
        <activity android:name="com.paypal.android.sdk.payments.LoginActivity" />
        <activity android:name="com.paypal.android.sdk.payments.PayPalFuturePaymentActivity" />
        <activity android:name="com.paypal.android.sdk.payments.FuturePaymentConsentActivity" />
        <activity android:name="com.paypal.android.sdk.payments.FuturePaymentInfoActivity" />
        <activity android:name="com.paypal.android.sdk.payments.PayPalProfileSharingActivity" />
        <activity android:name="com.paypal.android.sdk.payments.ProfileSharingConsentActivity" />

        <service
            android:name="com.paypal.android.sdk.payments.PayPalService"
            android:exported="false" />

到這一步以及算是完成了支付了,下面說說我再整合的時候遇到的問題吧!

1:我再建立APP的時候摸索了很久,網上也找了一些資料,但是都不這麼詳細,大家有問題可以郵箱給我哈!

2:賬號問題,我再進行沙盒測試的時候,測試通過。但是一切換的正式(live)環境的就不行,原因是我們國內的paypal不能用,我的解決辦法是,辦一張信用卡,開通國際支付,然後註冊一個國外的paypal賬戶,用信用卡繫結的paypal給國外的paypal轉錢過去,然後用國外的paypal支付,這樣就OK了。

上面整合的Paypal支付裡面還包含了信用卡的支付,如果單純的就整合Paypal支付,還有簡單方法哦!

在這個裡面 https://repo1.maven.org/maven2/com/paypal/sdk/paypal-android-sdk/ 下載一個最新的aar檔案,然後放進專案的lib目錄裡面。然後我們就可以去掉gradle裡面的依賴了。程式碼和上面的一樣。

好啦!大家如果有什麼問題,可以留言或者郵箱哈,我會盡量幫大家解決。