最近有了点时间总结一下支付宝支付的问题,以免以后忘了。
我这里写的是把主要业务逻辑都放后台实现的方法,移动端直接调接口就行了,也是官方推荐的方法。
关于微信支付
官方文档
AliPaySDK和友盟阿里云推送UTDID的冲突问题
如果你的项目还集成了阿里云推送,这里推荐使用手动集成SDK,不然会有UTDID冲突的问题。
代码部分
#import "AppDelegate.h"
#import <AlipaySDK/AlipaySDK.h>
// NOTE: iOS9.0以前使用的API接口
- (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) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
// NOTE: iOS9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
//如果还集成了微信支付的SDK,就写在一起
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
//微信
BOOL result = [WXApi handleOpenURL:url delegate:self];
if (!result) {
//支付宝
if ([url.host isEqualToString:@"safepay"]) {
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
NSLog(@"支付宝客户端支付结果result = %@",resultDic);
[PHTitleAlertView showWithAlerTitle:resultDic[@"memo"]];
/*
9000 订单支付成功
8000 正在处理中
4000 订单支付失败
6001 用户中途取消
6002 网络连接出错
*/
if (resultDic && [resultDic objectForKey:@"resultStatus"] && ([[resultDic objectForKey:@"resultStatus"] intValue] == 9000)) {
// 发通知带出支付成功结果
[[NSNotificationCenter defaultCenter] postNotificationName:@"alpayResult" object:resultDic];
} else {
// 发通知带出支付失败结果
[[NSNotificationCenter defaultCenter] postNotificationName:@"alpayResult" object:resultDic];
}
}];
}
}
return YES;
}
在发起支付的代码处
1:给后台传支付清单获取订单编号orderNo。
2:用户点击支付宝支付按钮的后,给后台传orderNo获取orderStr。
3:唤起微信支付。
备注:AliPaySDK 付款有两种模式:如果外部存在支付宝钱包,则直接跳转到支付宝钱包付款;不存在的场景下,在 SDK 内部进行 H5 支付。测试人员需要关注这两类测试场景,所以比微信支付少了,判断是否安装微信步骤.
#pragma mark - 调起支付宝支付页面
/// 自己写的唤起支付的方法
/// @param payOrder 后台获取的orderStr
- (void)SendAliPay:(NSString *)payOrder
{
//:Url_Scheme 为 app 在 info.plist 注册的 scheme。我用的微信的:Url_Scheme 测试没毛病
[[AlipaySDK defaultService] payOrder:payOrder fromScheme:Url_Scheme callback:^(NSDictionary *resultDic) {
if ([resultDic[@"ResultStatus"] isEqualToString:@"9000"]) {
/*
9000 订单支付成功
8000 正在处理中
4000 订单支付失败
6001 用户中途取消
6002 网络连接出错
*/
[SVProgressHUD dismiss];
}else{
//最终支付结果以后台反馈为准
NSString *str = resultDic[@"ResultStatus"];
NSInteger num = str.integerValue;
switch (num) {
case 8000:
[PHTitleAlertView showWithAlerTitle:@"正在处理"];
break;
case 4000:
[PHTitleAlertView showWithAlerTitle:@"订单支付失败"];
break;
case 6001:
[PHTitleAlertView showWithAlerTitle:@"用户中途取消"];
break;
case 6002:
[PHTitleAlertView showWithAlerTitle:@"网络连接出错"];
break;
default:
break;
}
}
}];
}
至此结束。
网友评论