Android下集成Paypal支付
近期項目需要研究paypal支付,官網上的指導寫的過于復雜,可能是老外的思維和中國人不一樣吧。難得是發現下面這篇文章:
http://www.androidhive.info/2015/02/android-integrating-paypal-using-php-mysql-part-1/
在這篇文章的基礎上,查看SDK簡化了代碼,給出下面這個例子,測試通過。
其實集成paypal還是非常簡單的,真正的輸入賬戶、付款都在SDK自帶的Activity和service上完成,我們要做的事情,是從自己的Activity跳轉過去,跳轉的同時帶一個Payment參數(即付款明細),Paypal SDK處理完后,會回到你的Activity(此時已經完成支付)。
在上面提到的那篇文章中,流程是這樣的:
?
這里服務端通過Android端傳回的paymentID(類似流水號),獲取支付明細判斷是否為正確單據。但要注意的是此時支付已經完成,在實際應用中(根據官網SDK)的說法,主要是卡流程的下一步,比如物流發貨。
?
在編寫代碼前要準備如下:
1、在https://developer.paypal.com中注冊一個開發賬號(通常是賣家),這個賬號提供一個客戶ID和密碼,需要寫在代碼里,買家實際上是支付到客戶ID和密碼生成的賬戶;
2、在上面這個頁面下,Paypal提供了沙盒功能,通過沙盒你可以虛擬一個買家賬號,供測試所用;
3、新建一個Android工程,在里面整合android paypal的SDK;
備注:根據我實際的操作,eclipse沒法導入該jar包,會一直提示沒有定義的類,可能是因為SDK是由Gradle構建的原因。在stackoverflow上說用android studio不會出現類似問題,我本地是用的IDEA,也一樣OK。
?
下面把主要代碼附帶如下,之前要注意在manifest中增加權限和SDK中涉及的Activity和Service。
public class MyActivity extends Activity {private static final String TAG = "MainActivity";private Button button;private static final int REQUEST_CODE_PAYMENT = 1;private static PayPalConfiguration paypalConfig = new PayPalConfiguration().environment(PayPalConfiguration.ENVIRONMENT_SANDBOX).clientId(Config.PAYPAL_CLIENT_ID);private List<PayPalItem> productsInCart = new ArrayList<PayPalItem>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);button = (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {addToCart(new Product("1", "sinny", "fredric_sinny", null, new BigDecimal(1), "1232131"));PayPalPayment thingsToBuy = prepareFinalCart();Intent intent = new Intent(MyActivity.this,PaymentActivity.class);intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, paypalConfig);intent.putExtra(PaymentActivity.EXTRA_PAYMENT, thingsToBuy);startActivityForResult(intent, REQUEST_CODE_PAYMENT);}});}private PayPalPayment prepareFinalCart() {PayPalItem[] items = new PayPalItem[productsInCart.size()];items = productsInCart.toArray(items);// Total amountBigDecimal subtotal = PayPalItem.getItemTotal(items);// If you have shipping cost, add it hereBigDecimal shipping = new BigDecimal("0.0");// If you have tax, add it hereBigDecimal tax = new BigDecimal("0.0");PayPalPaymentDetails paymentDetails = new PayPalPaymentDetails(shipping, subtotal, tax);BigDecimal amount = subtotal.add(shipping).add(tax);PayPalPayment payment = new PayPalPayment(amount,Config.DEFAULT_CURRENCY,"Description about transaction. This will be displayed to the user.",PayPalPayment.PAYMENT_INTENT_SALE);payment.items(items).paymentDetails(paymentDetails);payment.custom("This is text that will be associated with the payment that the app can use.");return payment;}public void addToCart(Product product) {PayPalItem item = new PayPalItem(product.getName(), 1,product.getPrice(), Config.DEFAULT_CURRENCY, product.getSku());productsInCart.add(item);Toast.makeText(getApplicationContext(),item.getName() + " added to cart!", Toast.LENGTH_SHORT).show();}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);String paymentId;try {paymentId = confirm.toJSONObject().getJSONObject("response").getString("id");String payment_client = confirm.getPayment().toJSONObject().toString();Log.e(TAG, "paymentId: " + paymentId + ", payment_json: "+ payment_client);} catch (JSONException e) {// TODO Auto-generated catch block e.printStackTrace();}} }其他:
1、后臺的接口都是標準的REST的接口,我例子里沒有實現,但要注意的是node的SDK包在windows7下是不可用的,好像是里面一個CRC的包不支持,在Linux下沒問題。
2、該程序運行后,會跳轉到Paypal界面,你可以用沙盒里注冊的虛擬買家賬號登陸消費,消費完后在paypal網站上可以查到相應記錄:
?
轉載于:https://www.cnblogs.com/Fredric-2013/p/4608473.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Android下集成Paypal支付的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 积木(DP)问题
- 下一篇: 摘自《解析极限编程-拥抱变化》