AlipaySDK.bundle
AlipaySDK.framework
#import <AlipaySDK/AlipaySDK.h>
#import <AlipaySDK/AlipaySDK.h>
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
//如果极简开发包不可用,会跳转支付宝客户端进行支付,需要将支付宝客户端的支付结果回传给开发包
if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳转支付宝客户端支付的过程中,商户App在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
NSLog(@"result = %@",resultDic);
}];
}
if ([url.host isEqualToString:@"platformapi"]){//支付宝客户端快登授权返回authCode
[[AlipaySDK defaultService] processAuthResult:App在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
[[AlipaySDK defaultService] payInterceptorWithUrl:url fromScheme:scheme callback:^(NSDictionary *result) {
// 处理支付结果
NSLog(@"%@", result);
}];
参数名称 | 类型 | 说明 |
---|---|---|
urlStr | NSString * | 手机网站支付的请求 URL。 |
schemeStr | NSString * | 接入方 App 注册的 URL scheme,供支付完成后跳回接入方 App。 |
completionBlock | objc(^CompletionBlock)(NSDictionary *resultDic) | 支付结束之后的回调其中 CompletionBlock 定义如下:objctypedef void(^CompletionBlock)(NSDictionary \*resultDic); |
返回值类型 | 描述 |
---|---|
BOOL | 如果 urlStr 是有效的支付宝 H5 支付 URL,则说明拦截转化成功,返回 YES,商户容器无需再加载该 URL。 如果是无效的,则返回 NO,商户容器需要继续加载该 URL。 |
参数名称 | 类型 | 说明 |
---|---|---|
resultCode | NSString * | 返回码,标识支付状态,含义如下:9000——订单支付成功8000——正在处理中4000——订单支付失败5000——重复请求6001——用户中途取消6002——网络连接出错 |
returnUrl | NSString * | 支付结束后应当跳转的 URL 地址。 |
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
__weak APWebViewController* wself = self;
BOOL isIntercepted = [[AlipaySDK defaultService] payInterceptorWithUrl:[request.URL absoluteString] fromScheme:@"alisdkdemo" callback:^(NSDictionary *result) {
// 处理支付结果
NSLog(@"%@", result);
// isProcessUrlPay 代表 支付宝已经处理该URL
if ([result[@"isProcessUrlPay"] boolValue]) {
// returnUrl 代表 第三方App需要跳转的成功页URL
NSString* urlStr = result[@"returnUrl"];
[wself loadWithUrlStr:urlStr];
}
}];
if (isIntercepted) {
return NO;
}
return YES;
}
dependencies {
......
compile files('libs/alipaySdk-20170725.jar')
......
}
<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>
<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" />
-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>;
}
-keep class com.alipay.android.phone.mrpc.core.** { *; }
-keep class com.alipay.apmobilesecuritysdk.** { *; }
-keep class com.alipay.mobile.framework.service.annotation.** { *; }
-keep class com.alipay.mobilesecuritysdk.face.** { *; }
-keep class com.alipay.tscenter.biz.rpc.** { *; }
-keep class org.json.alipay.** { *; }
-keep class com.alipay.tscenter.** { *; }
-keep class com.ta.utdid2.** { *;}
-keep class com.ut.device.** { *;}
参数名称 | 类型 | 说明 |
---|---|---|
h5PayUrl | String | 手机网站支付的请求 URL。 |
isShowPayLoading | boolean | 是否出现 loading。 |
callback | H5PayCallback | 异步回调接口。 |
返回值类型 | 描述 |
---|---|
boolean | 如果 h5PayUrl 是有效的支付宝 H5 支付 URL,则说明拦截转化成功,返回 ture,商户容器无需再加载该 URL。 如果是无效的,则返回 false,商户容器需要继续加载该 URL。 |
参数名称 | 类型 | 说明 |
---|---|---|
resultCode | String | 返回码,标识支付状态,含义如下:9000——订单支付成功8000——正在处理中4000——订单支付失败5000——重复请求6001——用户中途取消6002——网络连接出错 |
returnUrl | String | 支付结束后应当跳转的 URL 地址。 |
@Override
public boolean shouldOverrideUrlLoading(final WebView view, String url) {
if (!(url.startsWith("http") || url.startsWith("https"))) {
return true;
}
/**
* 推荐采用的新的二合一接口(payInterceptorWithUrl),只需调用一次
*/
final PayTask task = new PayTask(H5PayDemoActivity.this);
boolean isIntercepted = task.payInterceptorWithUrl(url, true, new H5PayCallback() {
@Override
public void onPayResult(final H5PayResultModel result) {
// 支付结果返回
final String url = result.getReturnUrl();
if (!TextUtils.isEmpty(url)) {
H5PayDemoActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
view.loadUrl(url);
}
});
}
}
});
/**
* 判断是否成功拦截
* 若成功拦截,则无需继续加载该URL;否则继续加载
*/
if (!isIntercepted) {
view.loadUrl(url);
}
return true;
}
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);