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的时候摸索了很久,网上也找了一些资料,但是都不这么详细,大家有问题可以邮箱给我哈![email protected]

2:账号问题,我再进行沙盒测试的时候,测试通过。但是一切换的正式(live)环境的就不行,原因是我们国内的paypal不能用,我的解决办法是,办一张信用卡,开通国际支付,然后注册一个国外的paypal账户,用信用卡绑定的paypal给国外的paypal转钱过去,然后用国外的paypal支付,这样就OK了。

上面集成的Paypal支付里面还包含了信用卡的支付,如果单纯的就集成Paypal支付,还有简单方法哦!

在这个里面 https://repo1.maven.org/maven2/com/paypal/sdk/paypal-android-sdk/ 下载一个最新的aar文件,然后放进项目的lib目录里面。然后我们就可以去掉gradle里面的依赖了。代码和上面的一样。

好啦!大家如果有什么问题,可以留言或者邮箱哈,我会尽量帮大家解决。

猜你喜欢

转载自blog.csdn.net/qq_35153556/article/details/54879920