Android接入
适用于native调起 app支付、微信支付分授权服务(app)、微信代扣纯签约(app)、支付宝sdk独立签约。
导入聚合支付SDK
1.将aar包放在您的应用工程的libs目录下(图片中文件名仅做示例,请以实际SDK文件名为准,SDK将在联调时提供) 2.在主项目的 build.gradle 中,添加下面的内容,将 libs 目录作为依赖仓库:
| allprojects {
repositories {
// 添加下面的内容
flatDir {
dirs 'libs'
}
// ... jcenter() 等其他仓库
}
}
|
3.在您 App Module 的 build.gradle 中,添加下面的内容,将聚合支付 SDK 作为项目依赖:
| dependencies {
... ...
//添加下面的内容
implementation (name: 'sdppaySdk-20200507', ext: 'aar')
// ...其他依赖项
... ...
}
|
运行权限
| android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
|
您需要在 AndroidManifest 里配置以上 3 个权限,聚合 SDK 在运行时需要进行网络连接,并在必要的时候判断网络连接的状态(4G/Wi-Fi)等来进行支付体验的优化。 第三方sdk版本说明
1、支付宝 SDK 从 15.5.7 开始,打包方式更换为 AAR,替代之前的 JAR 打包。更换为 AAR 后相关的H5支付页面无需再手动注册,项目中若存在请移除。
建议使用aar方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | <!-- 删除以下内容 -->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
<activity
android:name="com.alipay.sdk.app.H5AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
<!-- 删除以上内容 -->
|
2、微信
| dependencies {
api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
|
清单文件注册相关类
- 微信支付需要将以下“替换成自己 APK 的包名”换成在微信平台上注册填写的包名
- WxPayEntryActivity 这个类在 SDK 内部实现,开发者不需要额外实现该类
| <activity-alias
android:name="替换成自己 APK 的包名.wxapi.WXPayEntryActivity"
android:exported="true"
android:targetActivity="com.shengpay.aggregate.app.PaymentActivity" />
|
- 若接入微信支付分及微信纯签约需要额外添加以下声明
- 若商户方同时接入微信分享等相关微信业务,则不需要添加以下声明,且需要在商户工程WXEntryActivity中做下述特殊处理,参考 聚合V1.1.4版本中接口调用文档处
| <activity-alias
android:name="替换成自己 APK 的包名.wxapi.WXEntryActivity"
android:exported="true"
android:targetActivity="com.shengpay.aggregate.app.PaymentActivity" />
|
支付接口调用
SDPPayManager 对象为商户提供订单支付功能。获取SDPPayManager支付对象调用支付,代码示例如下:
| String orderInfo = info; // 订单信息
|
聚合SDK V1.0.0 (老连尚钱包aar)
| SDPPayManager manager = new SDPPayManager(DemoActivity.this);
manager.initWalletParams(WalletParams);//连尚支付需要初始化
manager.initWxAppid("wxappId");//微信支付需要初始化
manager.pay(SDPPayManager.PLATFORM_SP, orderInfo, new PayResultCallback() {
@Override
public void onPayBack(int code, String msg, Object o) {
// 支付结果处理
showAlert(DemoActivity.this, "code:" + "code:" + code + " message:" + msg);
} });
功能说明:
具有连尚钱包支付、支付宝支付、微信支付功能
|
聚合SDK V1.0.1 (老连尚钱包aar)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | SPTrackOptions options = new SPTrackOptions();
options.setOutTradeNo("outTradeNo");
options.setUhid("uhid");
options.setSdpappId("sdpappid");
options.setImei("imei");
options.setDebug(true); //默认是关闭的,调试时可打开log调试,上线前请务必关闭。
SDPPayManager manager = new SDPPayManager(DemoActivity.this);
manager.initWalletParams(WalletParams);//连尚支付需要初始化
manager.initWxAppid("wxappId");//微信支付需要初始化
manager.pay(SDPPayManager.PLATFORM_SP, orderInfo, new PayResultCallback() {
@Override
public void onPayBack(int code, String msg, Object o) {
// 支付结果处理
showAlert(DemoActivity.this, "code:" + "code:" + code + " message:" + msg);
} },options);
功能说明:
1.具有连尚钱包支付、支付宝支付、微信支付功能
2.具有微信支付分、支付宝独立签约等功能
|
聚合SDK最新版本 V1.1.4(适配连尚钱包sdk5.0登录改造,请参照以下实现)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 | SPTrackOptions options = new SPTrackOptions();
options.setOutTradeNo("outTradeNo");
options.setUhid("uhid");
options.setSdpappId("sdpappid");
options.setImei("imei");
options.setDebug(true); //默认是关闭的,调试时可打开log调试,上线前请务必关闭。
SDPPayManager manager = new SDPPayManager(DemoActivity.this);
manager.initWxAppid("wxappId");//微信支付需要初始化
manager.pay(SDPPayManager.PLATFORM_SP, orderInfo, new PayResultCallback() {
@Override
public void onPayBack(int code, String msg, Object o) {
// 支付结果处理
showAlert(DemoActivity.this, "code:" + "code:" + code + " message:" + msg);
} },options);
特别说明:
若商户app有接入微信分享等相关业务需求,需在WXEntryActivity中做如下处理,微信分及微信签约方可收到回调
@Override
public void onResp(BaseResp arg0) {
int type = arg0.getType();
if (type == ConstantsAPI.COMMAND_OPEN_BUSINESS_VIEW || type == ConstantsAPI.COMMAND_OPEN_BUSINESS_WEBVIEW){
Intent intent = getIntent();
intent.setClassName(this, "com.shengpay.aggregate.app.PaymentActivity");
BLUtils.safeStartActivity(this, intent);
finish();
return;
}
//.......
}
@Override
public void onReq(BaseReq arg0) {
int type = arg0.getType();
if (type == ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX ){
Intent intent = getIntent();
intent.setClassName(this, "com.shengpay.aggregate.app.PaymentActivity");
BLUtils.safeStartActivity(this, intent);
finish();
return;
}
finish();
//.......
}
功能说明:
1.具有连尚钱包支付、支付宝支付、微信支付功能
2.具有微信支付分、支付宝独立签约等功能
3.具有微信纯签约功能
|
聚合SDK版本 V1.1.1~V1.1.3版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | 聚合SDKV1.1.4之前版本请参考以下实现
SPTrackOptions options = new SPTrackOptions();
options.setOutTradeNo("outTradeNo");
options.setUhid("uhid");
options.setSdpappId("sdpappid");
options.setImei("imei");
options.setDebug(true); //默认是关闭的,调试时可打开log调试,上线前请务必关闭。
SDPPayManager manager = new SDPPayManager(DemoActivity.this);
manager.initWalletParams(uhid,userToken,extras);//需初始化连尚钱包sdk登录信息
manager.initWxAppid("wxappId");//微信支付需要初始化
manager.pay(SDPPayManager.PLATFORM_SP, orderInfo, new PayResultCallback() {
@Override
public void onPayBack(int code, String msg, Object o) {
// 支付结果处理
showAlert(DemoActivity.this, "code:" + "code:" + code + " message:" + msg);
} },options);
|
参数名称 | 参数说明 |
String platform | 用户所选择支付平台:PLATFORM_ALI,PLATFORM_WX,PLATFORM_SP |
String orderInfo | app支付请求参数字符串,主要包含商户的订单信息,key=value形式,以&连接。 |
PayResultCallback callback | 支付结果回调 |
SPTrackOptions options | 埋点配置信息 |
支付结果获取和处理
商户应用客户端通过当前调用支付的SDPPayManager的回调函数获取支付结果。
| @Override
public void onPayBack(int code, String msg, Object o) {
// 支付结果处理 showAlert(DemoActivity.this, "code:" + "code:" + code + " message:" + msg);
}
|
回调中errCode值列表:
| int ERR_OK = 0; // 通知商户支付成功,不可作为最终的支付凭证,需商户异步查询支付结果
int ERR_WAIT = -1; // 支付中 需商户异步去查询最终的支付结果
int ERR_FAIL = -2; // 支付失败 可能错误:sign签名错误、uhId不匹配、连尚校验失败、其他异常
int ERR_CANCEL = -3; // 用户取消 无需处理,用户不支付
|
微信支付分接入示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | //聚合SDK V1.0.1 及以上版本
//业务方服务端返回query信息
String queryInfo = query;
//调用对象实例化
SDPPayManager manager = new SDPPayManager(MainActivity.this);
//微信api初始化
manager.initWxAppid(APP_ID);
//调起微信分服务方法
manager.payWXScore(queryInfo, new PayResultCallback() {
@Override
public void onPayBack(int code, String msg, Object obj) {
showAlert(MainActivity.this, "code:" + code + " message:" + msg+ " ex:" + msg);
// obj 中有扩展字段(微信服务返回) extMsg+businessType
}
});
|
返回码 -99 微信版本不支持 微信纯签约服务接入示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | //聚合SDK V1.0.2 或者 聚合SDK V1.1.1 及以上版本
//业务方服务端返回query信息
String queryInfo = query;
//调用对象实例化
SDPPayManager manager = new SDPPayManager(MainActivity.this);
//微信api初始化
manager.initWxAppid(APP_ID);
//调起微信分服务方法
manager.wxAuthContract(queryInfo, new PayResultCallback() {
@Override
public void onPayBack(int code, String msg, Object obj) {
showAlert(MainActivity.this, "code:" + code + " message:" + msg+ " ex:" + msg);
// obj 中有扩展字段(微信服务返回) extMsg+businessType
}
});
|
返回码 -99 微信版本不支持 支付宝sdk独立签约接入示例
1
2
3
4
5
6
7
8
9
10
11
12 | //调用对象实例化
SDPPayManager manager = new SDPPayManager(MainActivity.this);
// 传递给支付宝应用的业务参数(业务方服务端返回)
Map<String, String> bizParams = new HashMap<>();
bizParams.put("sign_params", "biz_content=%7B%22access_params%22%3A%7B%22channel%22%3A%22ALIPAYAPP%22%7D%2C%22external_agreement_no%22%3A%22shiyun20191231_15%22%2C%22external_logon_id%22%3A%22%E5%A4%96%E9%83%A8%E7%99%BB%E9%99%86%E5%A5%BD%22%2C%22personal_product_code%22%3A%22GENERAL_WITHHOLDING_P%22%2C%22sign_scene%22%3A%22INDUSTRY%7CMULTI_MEDIA%22%7D&sign=HrpbNe2rIXkA1ZOjG65J1M2jVNPrBr7ka7APCB9bo2KABMdu9OqR4vx%2FaTvvJl9RSpuOLYoVYN%2BBQjczXiPJw4s7vpQS6TvaIFnbOQsH4K8YAEu3r9gxGm0OyuXYKanzZUSRujsGQYrhAwUT3k%2Bkd2eM6ta5hUymyuQJYA093PFwIIv5BMDz334z%2B%2BMz2OrnW5b78d556wYxYlrELw15RhLtvR1oHeSMo4WKK3suPEVVWF2YB%2Be6WQE8cGOQ7NiWtTytiqePeBkZNXuJJQjqoQ6WltTXDaeICDJESst0FKM6j0AtOctzIKb9o8uLwpF70dkYzyFe6ATqsdkb%2Foajzg%3D%3D×tamp=2020-01-13+10%3A33%3A07&sign_type=RSA2&charset=UTF-8&app_id=2017090501336035&method=alipay.user.agreement.page.sign&version=1.0");
//独立签约方法,useBrowserLanding 是否在用户未安装支付宝的情况下,展示一个 H5 页面引导用户安装支付宝
manager.authContract(bizParams, false, new PayResultCallback() {
@Override
public void onPayBack(int code, String msg, Object obj) {
showAlert(MainActivity.this, String.format("业务成功,结果码: %s\n结果信息: %s\n结果数据: %s", code, msg, obj));
}
});
|
| //返回码
OpenAuthTask.OK = 9000 //调用成功
OpenAuthTask.Duplex = 5000 //3秒内快速发起了多次调用而失败。
OpenAuthTask.NOT_INSTALLED = 4001 //用户未安装支付宝 App。
OpenAuthTask.SYS_ERR = 4000 //其它错误,如参数传递错误。
|