SDK integration process
Import development resource
For JAR SDK v15.5.5:
1. Import AlipaySDK-(Date).jar into libs folder in the merchant project, as shown in the figure below.
2. Go to the project's Java Build Path and import alipaySDK-(Date).jar under libs.
3. Select Order and Export, and check alipaySDK-(Date).jar.
- Migrate from JAR SDK to AAR SDK (from v15.5.5 to v15.6.8):
If you have already imported the .jar package, complete following steps:
1、Remove the dependency on the Alipay SDK JAR package in the build.gradle file of the App Module (not the entire project).
dependencies {
//annotationProcessor 'com.android.databinding:compiler:3.2.0'
// 支付宝SDK AAR 包所需的配置
implementation(name: 'alipaySdk-15.7.4-20200228192259', ext: 'aar')
//implementation(name: 'alipaySdk-15.6.8-20191021122514', ext: 'aar')
implementation'com.android.support:support-v4:25.3.1'
implementation'com.android.support:appcompat-v7:25.3.1'
}
2、Delete the old alipaySdk-xxx.jar file from the libs directory.
3、Remove the registration for the following activities from AndroidManifest.xml (no need to manually register if using AAR):
<!-- Remove the following content -->
<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>
<!-- Remove the above content -->
For AAR SDK v15.6.8: You can view Demo for reference.
1、Place the alipaySdk-15.6.8-20191021122514.aar package in the libs directory of your application project.
2、In the build.gradle of your main project, add the following content to make the libs directory a dependent repository:
allprojects {
repositories {
// 支付宝 SDK AAR 包所需的配置
flatDir { dirs 'libs' } jcenter()
maven { url "https://maven.google.com"}
}
}
3、In the build.gradle of your App Module, add the following to the Alipay SDK as a project dependency:
dependencies {
//annotationProcessor 'com.android.databinding:compiler:3.2.0'
// 支付宝SDK AAR 包所需的配置
implementation(name: 'alipaySdk-15.7.4-20200228192259', ext: 'aar')
//implementation(name: 'alipaySdk-15.6.8-20191021122514', ext: 'aar')
implementation'com.android.support:support-v4:25.3.1'
implementation'com.android.support:appcompat-v7:25.3.1'
}
Now, the SDK import is completed.
Modify manifest
Add the following declaration into file AndroidManifest.xml in the project:
<activity
android:name="com.alipay.sdk.pay.demo.PayDemoActivity"
android:icon="@drawable/msp_icon"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.alipay.sdk.pay.demo.H5PayDemoActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
And privilege declaration:
<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" />
Add confusing rules
Add relevant rules below into proguard-project.txt of seller's project:
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends java.lang.Throwable {*;}
-keep public class * extends java.lang.Exception {*;}
-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 *;}
-keep class com.alipay.sdk.app.H5PayCallback {
<fields>;
<methods>;
}
This step completes importing of SDK development resource.
Construct order data
Order information is required when calling SDK to pay. All parameters is displayed in the format of key="value", connected with &.
Call payment API
Payment API needs to be called in new thread. (Reference alipay_demo)
It is required to call the payment API in a new thread. (Reference alipay_demo)
Get PayTask payment object to pay (pay or authorize activity needs to be executed in non-ui thread), code demo:
final String orderInfo = OrderUtils1_0_Global.getSignedOrderInfo("test_subject", "test_body", "0.01");//order information
final Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(PayDemoActivity.this);
Map<String, String> result = alipay.payV2(orderInfo, true);
Log.i("msp", result.toString());
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// must call asynchronously
Thread payThread = new Thread(payRunnable);
payThread.start();
}
Payment result handling
After payment, there are 2 ways to get the result:
Synchronize responses
Merchant app client calls the payment Activity's handler object and get the payment result using the callback function.(Reference alipay_demo)
Demo code:
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
@SuppressWarnings("unchecked")
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
String resultInfo = payResult.getResult();
String resultStatus = payResult.getResultStatus();
if (TextUtils.equals(resultStatus, "9000")) {
showAlert(PayDemoActivity.this, getString(R.string.pay_success) + payResult);
} else {
showAlert(PayDemoActivity.this, getString(R.string.pay_failed) + payResult);
}
break;
}
case SDK_AUTH_FLAG: {
@SuppressWarnings("unchecked")
AuthResult authResult = new AuthResult((Map<String, String>) msg.obj, true);
String resultStatus = authResult.getResultStatus();
if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
showAlert(PayDemoActivity.this, getString(R.string.auth_success) + authResult);
} else {
showAlert(PayDemoActivity.this, getString(R.string.auth_failed) + authResult);
}
break;
}
default:
break;
}
};
};
Async notification
Merchant needs to provide an http protocol interface, put in parameter notify_url and pass to the payment request. After payment is completed, Alipay server will call notify_url using POST method, the data is transferred in xml format.
Get the SDK version
Call object PayTask's getVersion() method. Demo code:
PayTask payTask = new PayTask(activity);String version = payTask.getVersion();