Android支付宝支付功能接入总结

本文根据支付宝蚂蚁金服官方API和Demo编写,为博主实际项目开发中的经验总结,不包含公司和个人有关信息,相关密钥请同学们自己申请。

随着智能手机的迅速普及,手机APP的功能也更加智能化,贴近我们的现实生活。也有更多的互联网公司和企业选择移动支付的功能,方便消费者可以快速购买他们的产品。其中国内使用最多的是支付宝和微信支付,下面我们来了解一下在Android设备上怎么接入支付宝的服务。

  • 创建应用
  • 获得所需数据
  • 集成开发环境
  • 支付接入

创建应用

第一步我们需要到开放平台上去创建我们的应用。

应用页面

获得所需数据

这里我们还需要获取一些支付功能所需要的ID和密钥。

应用的AppID
服务商PID

请务必妥善保管你应用的私钥和公钥,以防丢失!!

由支付宝签名生成工具生成的密钥

集成开发环境

首先需要从开发平台上下载支付宝SDK所用到的相关Jar包,下载完成后解压可以得到一个我们需要的jar文件。

使用AndroidStudio新建一个Android项目,并在工程中引入我们的jar包。

compile files('libs/alipaySdk-20170309.jar')

另外我们还需要在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 *;}

接着我们需要在AndroidManifast文件中引入相关权限。

<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" />
```
最后添加两个Activity声明
```
<activity
            android:name="com.alipay.sdk.app.H5PayActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:exported="false"
            android:screenOrientation="behind" >
</activity>
<activity
            android:name="com.alipay.sdk.auth.AuthActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:exported="false"
            android:screenOrientation="behind" >
 </activity>
```
到这里我们的支付宝SDK就集成好啦,接下来我们看看在项目里是怎么去调用他的。

##支付接入
>以下代码均运行在沙盒环境下,实际部署请根据Demo中提示进行。


我们从官方提供的Demo中复制所有的Java文件到我们的项目里。因为官方为我们做了很完善的封装,所以并不需要额外实现。复制过来后记得Mark一下项目,检查有无包引用错误。
``` 
/** 应用APPID */
public static final String APPID = "";
    
/** 商户信息中的PID 点击右上角头像可以看商户信息*/
public static final String PID = "";
/** 支付宝登录功能所用的参数,这里可以不填 */
public static final String TARGET_ID = "";

/** 私钥,RSA2算法生成的私钥 推荐使用*/
public static final String RSA2_PRIVATE = "";
/** RSA算法生成的私钥 官方已不推荐*/
public static final String RSA_PRIVATE = "";
```

在`PayDemoActivity`文件中,我们需要注意上述的变量。这里我重新修改了一下他们的注释,方便各位理解。


![](http://upload-images.jianshu.io/upload_images/5201995-51f90828d8539ffb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后我们需要关注的是`OrderInfoUtil2_0`文件的buildOrderParamMap方法,该方法用于构建订单的详细信息,这里开发者可以根据[*官方文档*](https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.x7kkCI&treeId=204&articleId=105465&docType=1)进行相应的修改。最后是集成完成后弹出的支付界面。

![](http://upload-images.jianshu.io/upload_images/5201995-feb151b4c8e7c205.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


##FAQ
**1、博主可以提供完整的Demo下载么?**
不好意思哈,因为这里包含了项目相关内容,故无法提供详细Demo供下载,有不明白的地方欢迎在下方留言!

**2、RSA2的私钥改怎么申请?**
这个请根据官方给出的文档说明,下载签名软件进行生成,流程较长这里我就不一一说明了,不过官方给的说明还是很详细的哈!

**3、为什么我支付时显示40247错误?**
可能是APPID没有支付权限的问题,请检查APP是否拥有APP支付接口的权限。如果已经签约了APP支付接口,请检查商户公钥是否上传到对应的appid应用下,检查上传的商户公钥和商户私钥是否匹配。

推荐阅读更多精彩内容