对Android中集成支付宝支付流程的总结

一、前期准备

关于在支付宝注册应用的过程已经略过,有需要的小伙伴可以去支付宝开放平台上注册一遍即可。:)

  • 下载jar包,网址:https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1#s2
  • 将jar包导入到项目中。

    • eclipse项目:

      • 将alipaySDK-20150602.jar包放入项目的libs目录下。
      • 选中jar包,右击选择“Configure Build Path”打开Java Build Path对话框,如下图。
        这里写图片描述

      • 将libs目录下的alipaySDK-20150602.jar导入,如下图。

        这里写图片描述

      • 选中Order and Export,勾选alipaySDK-20150602.jar,如下图。

        这里写图片描述

    • AndroidStudio项目

      • 将alipaySDK-20150602.jar包放入项目的libs目录下。
      • 鼠标选中项目名称,按“F4”进入“Project Structure”窗口,添加jar包。如图:

        这里写图片描述

二、项目集成【将签名操作放在服务器端进行】

  • 在清单文件中注册H5PayActivity,并添加权限。

    • H5PayActivity这个Activity是jar包中已经存在的,当用户手机中未安装支付宝客户端时,支付会调起这个界面进行支付。

      <activity
          android:name="com.alipay.sdk.app.H5PayActivity"
          android:configChanges="orientation|keyboardHidden|navigation"
          android:exported="false"
          android:screenOrientation="behind" >
      </activity>
    • 添加权限

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
      <uses-permission android:name="android.permission.READ_PHONE_STATE" />
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • 添加混淆规则,在项目的proguard-project.txt里添加以下规则:

    -libraryjars libs/alipaySDK-20150602.jar
    
    -keep class com.alipay.android.app.IAlixPay{*;}
    -keep class com.alipay.android.app.IAlixPay$Stub{*;}
    -keep class com.alipay.android.app.IRemoteServiceCallback{*;}
    -keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
    -keep class com.alipay.sdk.app.PayTask{ public *;}
    -keep class com.alipay.sdk.app.AuthTask{ public *;}
  • 将生成的订单信息发送给后台服务器,待后台服务器将订单信息签完名后返回给我们。

  • 接收到后台服务器返回的支付信息,我们需要开启支付任务【子线程中进行】,发起支付。这个支付任务支付宝已经集成在jar包中了,我们直接使用即可。如下代码:

    PayTask alipay = new PayTask(MainActivity.this);
  • 调用任务中的pay方法即可获取支付结果。pay方法需要两个参数,一个是服务器返回给我们的支付信息,另外一个是boolean值,表示是否在开启支付是显示loading对话框。如下代码:

    String result = alipay.pay(payInfo, true);
  • 得到支付结果后,我们需要通过一个handler来处理支付结果。支付结果中的结果码可以告诉我们支付状态。

    这里写图片描述

  • 在支付完成后,支付宝不仅给APP端返回支付结果,还会异步发送给我们的后台服务器一个支付结果。同步通知结果仅用于结果展示,入库数据需以异步通知为准。

  • 值得注意的一点是,在支付宝给出的demo中将签名放在了APP端,其签名时使用的Base64文件是单独写的,而非安卓V4包中的Base64文件。其实支付宝是建议将签名操作放到服务器端进行的,这样可以更好的保护我们的私钥。
  • 关于支付功能测试要注意:用户手机安装支付宝客户端和未安装客户端的情况都要测。

猜你喜欢

转载自blog.csdn.net/baisemaque/article/details/50952943