本文根据支付宝蚂蚁金服官方API和Demo编写,为博主实际项目开发中的经验总结,不包含公司和个人有关信息,相关密钥请同学们自己申请。
随着智能手机的迅速普及,手机APP的功能也更加智能化,贴近我们的现实生活。也有更多的互联网公司和企业选择移动支付的功能,方便消费者可以快速购买他们的产品。其中国内使用最多的是支付宝和微信支付,下面我们来了解一下在Android设备上怎么接入支付宝的服务。
- 创建应用
- 获得所需数据
- 集成开发环境
- 支付接入
创建应用
第一步我们需要到开放平台上去创建我们的应用。
获得所需数据
这里我们还需要获取一些支付功能所需要的ID和密钥。
请务必妥善保管你应用的私钥和公钥,以防丢失!!
集成开发环境
首先需要从开发平台上下载支付宝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应用下,检查上传的商户公钥和商户私钥是否匹配。