Android 如何整合Paypal支付
最近做一個專案用到Paypal支付,官網上有整合文件,但是感覺有點複雜,我再這裡把步驟優化一下,方便大家整合!
1:支付流程:
Paypal 的支付流程很簡單,我們把錢支付到商家paypal成功以後,paypal會返回給我們一個支付ID,我們拿著支付ID傳給伺服器,伺服器進行驗證(確定客戶是否支付完成),驗證成功後,這個支付就成功了。
2:如何整合Paypal?
首先註冊Paypal商家賬號,註冊完成後登入 https://developer.paypal.com/
我們會看到下面的選單欄有這一項,
點選My Apps 我們可以在這裡面建立APP,APP建立成功以後,我們就可以獲得一個Client ID
在裡面我們還需要申請測試賬號,在裡面可以分配虛擬貨幣,給我們測試用,步驟就不介紹啦,有問題可以留言諮詢哈!
下面我們看一下如何整合到程式碼裡面
我們可以參考github上的Demo https://github.com/paypal/PayPal-Android-SDK
1:在專案的gradle裡面配置
compile 'com.paypal.sdk:paypal-android-sdk:2.15.2'
2:初始化配置privatestatic 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裡面的依賴了。程式碼和上面的一樣。
好啦!大家如果有什麼問題,可以留言或者郵箱哈,我會盡量幫大家解決。