## Ping++ Android SDK 使用文档
### 一、快速体验
Ping++ SDK 为开发者提供了 demo 程序,可以快速体验 Client-SDK 接入流程。下载 Client-SDK 之后将整个目录导入到您的 Android Studio(建议) 或者 Eclipse 之中。
使用 Android Studio 时,请选择 `Import project (Eclipse ADT, Gradle, etc.)` → `Import project from external model` → `Gradle`
### 二、快速集成
#### 导入 Ping++ SDK
#### 在线导入方式
##### Gradle导入方式
1、在module中的build.gradle中设置
```
dependencies {
compile 'com.pingxx:pingpp-core:2.1.7' //必须添加
compile 'com.pingxx:pingpp-alipay:2.1.7' //使用支付宝时添加
compile 'com.pingxx:pingpp-upacp:2.1.7' //使用银联支付时添加
compile 'com.pingxx:pingpp-wxpay:2.1.7' //使用微信支付时添加
compile 'com.pingxx:pingpp-bfb-sdk:2.1.7' // 使用百付宝时添加
compile 'com.pingxx:pingpp-qpay:2.1.7' //使用QQ钱包时添加
}
```
2、在项目中的build.gradle中添加
```
buildscript {
repositories {
jcenter()
}
}
allprojects {
repositories {
jcenter()
}
}
```
##### Maven导入方式
```
com.pingxx
pingpp-core
2.1.7
pom
```
#### 下载SDK导入方式
##### Android Studio
1. 在你的项目里选择 `Import Module...`,Source directory 定位到 `pingpp-android` 目录,也就是 SDK 的根目录。
2. 取消勾选 `:example`,将 `:lib:pingpp` 和 `:lib:bdwallet_pay_sdk` 导入。
3. 将 `:lib:pingpp` 添加到你的项目的 Dependencies。或者直接在 build.gradle 的 dependencies 区块添加如下代码。
compile project(':lib:pingpp')
##### Eclipse ADT
1. 将 `lib` 目录作为 Library Porject 导入。
2. 导入后,把 pingpp 项目作为你的项目的依赖库。
##### 权限声明
``` xml
```
##### 注册 activity
``` xml
```
### 三、获得 Charge/Order
Charge/Order 对象是一个包含支付信息的 JSON 对象,是 Ping++ SDK 发起支付的必要参数。该参数需要请求用户服务器获得,服务端生成 charge 的方式参考 [Ping++ 开发指南](https://www.pingxx.com/docs/overview)。SDK 中的 demo 里面提供了如何获取 charge 的实例方法,供用户参考。
### 四、发起支付
``` java
//data:表示charge或者order的字符串
Pingpp.createPayment(YourActivity.this, data);
//QQ钱包调起支付方式 “qwalletXXXXXXX”需与AndroidManifest.xml中的data值一致
//建议填写规则:qwallet + APP_ID
Pingpp.createPayment(YourActivity.this, data, "qwalletXXXXXXX");
```
#### 五、获取支付状态
从 Activity 的 onActivityResult 方法中获得支付结果。支付成功后,用户服务器也会收到ping++ 服务器发送的异步通知。 最终支付成功请根据服务端异步通知为准。
``` java
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//支付页面返回处理
if (requestCode == Pingpp.REQUEST_CODE_PAYMENT) {
if (resultCode == Activity.RESULT_OK) {
String result = data.getExtras().getString("pay_result");
/* 处理返回值
* "success" - 支付成功
* "fail" - 支付失败
* "cancel" - 取消支付
* "invalid" - 支付插件未安装(一般是微信客户端未安装的情况)
*/
String errorMsg = data.getExtras().getString("error_msg"); // 错误信息
String extraMsg = data.getExtras().getString("extra_msg"); // 错误信息
showMsg(result, errorMsg, extraMsg);
}
}
}
```
### 注意事项
Android 不允许再 UI 线程中进行网络请求,所以请求 charge 对象的时候请使用 thread+handler 或者使用 AsyncTask 。example 里面的示例程序使用的就是 AsyncTask 方式请求 charge 对象。
### 关于定制
用户可以根据需求自行定制一个或者多个支付渠道。但是定制 SDK 的时候需要注意以下几点
- libpingpp-xxxx.jar 和 libpingpp.so 这些包是必须的。
- PaymentActivity 必须在 AndroidManifest.xml 文件里面声明。
- 权限
1. 微信支付渠道是通过向“微信”客户端发起请求进行支付的,要求手机必须安装微信。如果没有安装微信,Ping++ SDK 会在支付结果中给予通知。
2. 支付宝、银联等渠道,需要的权限为
3. 百度支付渠道,需要额外添加权限
- 依赖
1. 微信支付依赖包:`libammsdk.jar`
2. 百度支付依赖:`bdwallet_pay_sdk` 工程
3. 银联支付依赖:`UPPayAssisEx.jar`、`UPPayPluginExPro.jar`、`android-support-v4.jar`、`pingpp/libs` 目录下的 `.so` 文件和 `pingpp/assets` 目录下的 `data.bin` 文件
4. 支付宝支付依赖包:`alipayxxxxxxxx.jar`
5. QQ钱包依赖包:`mqqopenpay.jar`
6. 招行一网通:`cmbkeyboard.jar`[招行具体配置](招行使用说明.md)
- 用户如果选择不使用某种渠道,可以把该渠道相关的 Activity 从 AndroidManifest.xml 删除。
### 混淆设置
用户进行 apk 混淆打包的时候,为了不影响 Ping++ SDK 以及渠道 SDK 的使用,请在 proguard-rules 中添加一下混淆规则。
```
-dontwarn com.alipay.**
-keep class com.alipay.** {*;}
-dontwarn com.ta.utdid2.**
-keep class com.ta.utdid2.** {*;}
-dontwarn com.ut.device.**
-keep class com.ut.device.** {*;}
-dontwarn com.tencent.**
-keep class com.tencent.** {*;}
-dontwarn com.unionpay.**
-keep class com.unionpay.** {*;}
-dontwarn com.pingplusplus.**
-keep class com.pingplusplus.** {*;}
-dontwarn com.baidu.**
-keep class com.baidu.** {*;}
-keepclassmembers class * {
@android.webkit.JavascriptInterface ;
}
```
### 日志开关
SDK 提供了日志功能,默认日志为关闭状态。
开发者可以通过下面设置打开日志开关。通过 `PING++` 来对日志进行筛选。
``` java
Pingpp.enableDebugLog(true);
```