支付宝IOS2.2.1支付
将Demo中
AlipaySDK.bundle
AlipaySDK.framework
libel.a lib
crypto.a
openssl
Util
加入到工程,在需要调用的地方加#import <AlipaySDK/AlipaySDK.h>
头文件。
这个地方报错误的还真是多了,呜呜,纠结了好久,说几个常见的,以后见到报错我会更新-路径问题:请在Build Settings的Search Paths下Header Search Paths中添加”$(SRCROOT)/工程名/Classes/Vendor/Alipay”,这个要按你自己的路径
-Util 文件中config.h
文件跟你本地已有的重复
-报错too many arguments,方法跟你的原有文件重复了,我的报的是MD5,跟据网上提供的方法改个什么属性为NO,发现不行,你把这个MD5名字改成不一样的就好,注意名字被调用了,你就继续改吧。
-当为wap时候
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) [[AlipaySDK defaultService] auth_V2WithInfo:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic)两个在一起不会掉用的,去掉一个就好
在plist中加入
URL types
(应用注册scheme支付完返回本应用的表示),key=RSA private key(商户方的私钥),RSA public key(签名),Partner(合作身份者ID),Seller(支付宝收款账号),这个写哪里都都可以了,用的时候你找得到就好。-URL types下边有三个字段,对应
URL types
一项,当然,也可以在tatgets-info-URL Types下边直接设置修改内容
NSString *partner = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Partner"];
NSString *seller = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Seller"];
NSString *privateKey = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"RSA private key"];
此时,如果partner,seller,privateKey其中一个为nil时,报错:缺少partner或者seller或者私钥,privateKey错误的时候提示privateKey为Null,服务器繁忙,应该是order的属性有没有设置的,价格过低活着订单号重复或不识别。
应用回调
resultStatus状态代码
resultStatus:9000——请求处理成功 4000——系统异常 6001——用户中途取消 6002--网络连接出错
result_code状态代码
result_Code:200——业务处理成功,会返回authCode 1005——系账户已冻结 713——userid不能转换为opened,请联系支付宝技术支持 202--系统异常,请联系支付宝技术支持其中写代码的时候还真是麻烦啊,有时候方法不会被调用,wap和客户端调用方法还不一样,不再一一试了,这支付宝文档说明真心不敢恭维,直接上代码吧,
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
// NSLog(@"!!!!reslut = %@",resultDic);
// NSLog(@"@@@memo = %@,resultStatus =%@",[resultDic valueForKey:@"memo"],[resultDic valueForKey:@"resultStatus"]);
if ([[[resultDic valueForKey:@"resultStatus"] toString]isEqualToString:@"9000"]) {
[[NSNotificationCenter defaultCenter]postNotificationName:ZHIDURESULT object:self userInfo:@{@"info":@"1"}];
}else{
[[NSNotificationCenter defaultCenter]postNotificationName:ZHIDURESULT object:self userInfo:@{@"info":@"0"}];
}
}];
// [[AlipaySDK defaultService] auth_V2WithInfo:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
// NSLog(@"reslut = %@",resultDic);
// NSLog(@"memo = %@,resultStatus =%@",[resultDic valueForKey:@"memo"],[resultDic valueForKey:@"resultStatus"]);
// }];
}
上面这段代码,
payOrder
没有客户端的情况是从这里进的,支付流程中响应事件也是这个方法,但当客户端的时候,auth_V2WithInfo
会进入,响应事件的方法是下面processAuth_V2Result
方法,但是,当payOrder
,auth_V2WithInfo
在一起的时候,会很纠结,结果是wap或者客户端总有一个回调方法不响应,可能是自己搞不清文档的意思,可是你妹的写清楚点行不。然后,wap的时候进入的方法不变,客户端的时候响应方法加上processOrderWithPaymentResult
,你会发现,响应的方法和wap的方法是同一个,好像是把支付流程重新传入了payOrder
里边,忘高人指点啊。
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
if ([url.host isEqualToString:@"safepay"]) {
//
// [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
// NSLog(@"result = %@",resultDic);
// NSString *resultStr = resultDic[@"result"];
// NSLog(@"memo = %@,resultStatus =%@",[resultDic valueForKey:@"memo"],[resultDic valueForKey:@"resultStatus"]);
//
// if ([[[resultDic valueForKey:@"resultStatus"] toString]isEqualToString:@"9000"]) {
//
// }else{
//
// }];
[[AlipaySDK defaultService]processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
// if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode
// [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
// NSLog(@"result = %@",resultDic);
// }];
// }
return YES;
}
notifyURL 是客户端传给支付宝的,当客户端支付完成后,支付宝会根据这个url异步调用服务端的接口,同步支付结果的数据,这个要服务器给的,确保你的私钥,合作者id是准确的。
建设银行支付
每个公司定义的支付流程都可能不一样,我们是直接加在一个H5页面,H5自动跳转到建设银行,然后支付成功,点击返回商户,用js和客户端交互,完成整个流程。