Paypal支付

立即支付

1.用户使用PayPal账户或信用卡支付,支付完成接收返回一个支付ID。

2.在你的服务器端,使用PayPal的API获取付款详情,进行支付验证。

准备

开始之前需要做以下准备:
1. 要有个PayPal账号,且注册为商户。
3. 登录https://developer.paypal.com,注册Sandbox测试账号(买家卖家)。
2. 集成到你的应用中,在https://developer.paypal.com创建一个APP,并选择刚创建好的Sandbox账号,
   APP会生成有ClientID和secret。
4. 提交在Sandbox测试好的应用,PayPal会对你的应用进行审核 。
5. 审核通过后你会获得一个生产环境的ClientID和secret,这一步你已经完成了PayPal付款。

创建Android 项目

1.创建一个Android项目并加入jar包:
2.在 AndroidManifest.xml 文件添加如下权限:
[html]  view plain  copy
  1. <!-- for card.io card scanning -->  
  2. <uses-permission android:name="android.permission.CAMERA" />  
  3. <uses-permission android:name="android.permission.VIBRATE" />  
  4. <uses-feature android:name="android.hardware.camera" android:required="false" />  
  5. <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />  
  6. <!-- for most things, including card.io & paypal -->  
  7. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
  8. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
  9. <uses-permission android:name="android.permission.INTERNET"/>  

3.在 AndroidManifest.xml 文件,标签: <application> 内添加 service和activities :

   
   
[html] view plain copy
  1. <service android:name="com.paypal.android.sdk.payments.PayPalService" android:exported="false" />  
  2. <activity android:name="com.paypal.android.sdk.payments.PaymentActivity" />  
  3. <activity android:name="com.paypal.android.sdk.payments.LoginActivity" />  
  4. <activity android:name="com.paypal.android.sdk.payments.PaymentMethodActivity" />  
  5. <activity android:name="com.paypal.android.sdk.payments.PaymentConfirmActivity" />  
  6. <activity android:name="io.card.payment.CardIOActivity" android:configChanges="keyboardHidden|orientation" />  
  7. <activity android:name="io.card.payment.DataEntryActivity" />  
4.new PayPalConfiguration 实例并初始化配置:
   
   
[java] view plain copy
  1. private static PayPalConfiguration config = new PayPalConfiguration()  
  2.         // 沙盒测试(ENVIRONMENT_SANDBOX),生产环境(ENVIRONMENT_PRODUCTION)  
  3.         .environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)  
  4.         //你创建的测试应用Client ID  
  5.         .clientId("<YOUR_CLIENT_ID>");  

5.在Activity onCreate和onDestroy方法,启动和停止PayPalService 服务:

  
  
[java] view plain copy
  1. @Override  
  2. protected void onCreate(Bundle savedInstanceState) {  
  3.     super.onCreate(savedInstanceState);  
  4.     setContentView(R.layout.activity_main);  
  5.     Intent intent = new Intent(this, PayPalService.class);  
  6.     intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);  
  7.     startService(intent);  
  8. }  
  9.   
  10. @Override  
  11. public void onDestroy() {  
  12.     stopService(new Intent(this, PayPalService.class));  
  13.     super.onDestroy();  
  14. }  

6.创建PayPalPayment intent,当点击按钮进入支付Activity:

  
  
[java] view plain copy
  1. public void onBuyPressed(View pressed) {  
  2.     /*  
  3.          * PAYMENT_INTENT_SALE will cause the payment to complete immediately. 
  4.          * Change PAYMENT_INTENT_SALE to PAYMENT_INTENT_AUTHORIZE to only authorize payment and  
  5.          * capture funds later. 
  6.          * Also, to include additional payment details and an item list, see getStuffToBuy() below. 
  7.          */  
  8.     PayPalPayment payment = new PayPalPayment(new BigDecimal("1.75"), "USD""hipster jeans",  
  9.             PayPalPayment.PAYMENT_INTENT_SALE);  
  10.     Intent intent = new Intent(this, PaymentActivity.class);  
  11.     intent.putExtra(PaymentActivity.EXTRA_PAYMENT, payment);  
  12.     startActivityForResult(intent, 0);  
  13. }  
7.实现onActivityResult():
  
  
[java] view plain copy
  1. @Override  
  2. protected void onActivityResult (int requestCode, int resultCode, Intent data) {  
  3.     if (resultCode == Activity.RESULT_OK) {  
  4.         PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);  
  5.         if (confirm != null) {  
  6.             try {  
  7.                 Log.i("paymentExample", confirm.toJSONObject().toString(4));  
  8.                 // TODO: 发送支付ID到你的服务器进行验证  
  9.                   
  10.   
  11.             } catch (JSONException e) {  
  12.                 Log.e("paymentExample""an extremely unlikely failure occurred: ", e);  
  13.             }  
  14.         }  
  15.     }  
  16.     else if (resultCode == Activity.RESULT_CANCELED) {  
  17.         Log.i("paymentExample""The user canceled.");  
  18.     }  
  19.     else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) {  
  20.         Log.i("paymentExample""An invalid Payment or PayPalConfiguration was submitted. Please see the docs.");  
  21.     }  
  22. }  

服务器端验证

在上面我们已完成Android 客户端的PayPal支付功能,不过在接下来最后一步,验证Paypal付款详情,确保你的帐户收到实际的付款金额。

1.在Android应用程序,发送支付ID到你的服务器(方法:onActivityResult())。

    当完成支付后,PayPal会返回付款详情:

    {

  "client": {
    "environment": "sandbox",
    "paypal_sdk_version": "2.0.0",
    "platform": "Android",
    "product_name": "PayPal Andorid SDK;"
  },
  "response": {
    "create_time": "2014-02-12T22:29:49Z",
    "id": "PAY-564191241M8701234KL57LXI",
    "intent": "sale",
    "state": "approved"
  },
  "response_type": "payment"
}
//在response中 "id": "PAY-564191241M8701234KL57LXI" 支付ID, 在onActivityResult方法发送支付ID到你的服务器端。

2.在服务器端调用PayPal API ,通过支付ID值来获取付款详情并验证。

如下代码:

[java]  view plain  copy
  1. public boolean verifyPayment(String paymentId){  
  2.   //从PayPal获取付款详情  
  3.   String str = getPaymentDetails(paymentId);  
  4.   JSONObject detail = JSONObject.fromObject(str);  
  5.   //校验订单是否完成  
  6.   if("approved".equals(detail.optString("state"))){  
  7.    JSONObject transactions = detail.optJSONArray("transactions").optJSONObject(0);  
  8.    JSONObject amount = transactions.optJSONObject("amount");  
  9.    JSONArray relatedResources = transactions.optJSONArray("related_resources");  
  10.    //从数据库查询总金额与Paypal校验支付总金额  
  11.    double total = 0;  
  12.    if( total != amount.optDouble("total") ){  
  13.     return false;  
  14.    }  
  15.    //校验交易货币类型  
  16.    String currency = "USD";  
  17.    if( !currency.equals(amount.optDouble("currency")) ){  
  18.     return false;  
  19.    }  
  20.    //校验每个子订单是否完成  
  21.    for (int i = 0,j = relatedResources.size(); i < j; i++) {  
  22.     JSONObject sale = relatedResources.optJSONObject(i).optJSONObject("sale");  
  23.     if( !"completed".equals(sale.optString("state")) ){  
  24.      System.out.println("子订单未完成,订单状态:"+sale.optString("state"));  
  25.     }  
  26.    }  
  27.    return true;  
  28.   }  
  29.   return false;  
  30.  }  

代码下载

该示例应用程序提供了完整的例子,下载:PayPal SDK Example
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值