.code { background: #fbedbb; border: #c0c0c0 1px solid; padding: 5px; margin: 0 40px 0 20px; font-family: Verdana,Helvetica, "微软雅黑" , Arial, "宋体" , sans-serif; }
1.拼单 AlixPayOrder *order = [[AlixPayOrder alloc]init]; order.partner = [params objectAtIndex:1]; order.seller = [params objectAtIndex:2]; order.tradeNO = resultDict[@"ordersn"]; order.productName = [params objectAtIndex:6]; order.productDescription = [params objectAtIndex:8]; order.amount = [NSString stringWithFormat:@"%.2f", [(NSString *)((NSDictionary *)resultDict[@"paychannel"])[@"amount"]floatValue] / 100]; order.notifyURL = [(NSString *)[params objectAtIndex:3] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; order.paymentType = [params objectAtIndex:7]; order.itBPay = [NSString stringWithFormat:@"%@m", [params objectAtIndex:9]]; NSString *orderInfo = [order description]; id<DataSigner> signer; signer = CreateRSADataSigner([params objectAtIndex:0]); NSString *signedStr = [signer signString:orderInfo];//gw 订单信息用私钥签名 // NSNewcoLog(@"%@", signedStr); NSString *orderString = [NSString stringWithFormat:@"%@&sign="%@"&sign_type="%@"", orderInfo, signedStr, [params objectAtIndex:5]]; NSString *appScheme = @"Lottery-Trade-3-3"; ApplicationDelegate.key = [(NSArray *)((NSDictionary *)resultDict[@"paychannel"])[@"payparams"]objectAtIndex:4];//签约帐户后获取到的支付宝公钥 2.调用支付宝反馈 [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) { NSLog(@"支付宝返回:%@",resultDic); if (resultDic) { //结果处理 NsZhifubaoModel *result = [NsZhifubaoModel zhifuWithDictionary:resultDic]; if ([result.resultStatus integerValue] == 9000) { if ([result.success isEqualToString:@"true"]) { NsAccountRecordController *accountCtrl = [[NsAccountRecordController alloc]initWithTitle:@"账户明细" type:AccountRecord_Normal]; accountCtrl.isWarn = result.out_trade_no; UINavigationController *nav = [ApplicationDelegate navigationController]; [nav pushViewController:accountCtrl animated:YES]; [accountCtrl release]; } /* //签名 NSString* key = [(NSArray *)((NSDictionary *)resultDict[@"paychannel"])[@"payparams"]objectAtIndex:4];//签约帐户后获取到的支付宝公钥 id<DataVerifier> verifier; verifier = CreateRSADataVerifier(key); if ([verifier verifyString:result.resultString withSign:result.sign]) { //验证签名成功,交易结果无篡改 NsAccountRecordController *accountCtrl = [[NsAccountRecordController alloc]initWithTitle:@"账户明细" type:AccountRecord_Normal]; accountCtrl.isWarn = result.out_trade_no; UINavigationController *nav = [ApplicationDelegate navigationController]; [nav pushViewController:accountCtrl animated:YES]; [accountCtrl release]; } */ } else { NSLog(@"交易失败"); } } else { NSLog(@"交易失败"); } }]; 3.调用支付宝钱包 - (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(@"支付宝返回:%@",resultDic); if (resultDic) { //结果处理 NsZhifubaoModel *result = [NsZhifubaoModel zhifuWithDictionary:resultDic]; if ([result.resultStatus integerValue] == 9000) { if ([result.success isEqualToString:@"true"]) { //验证签名成功,交易结果无篡改 id<DataVerifier> verifier; verifier = CreateRSADataVerifier(key); // 验证的步骤:首先把订单信息和签名值分别提取出来 // 订单信息就是sign_type的连字符&之前的所有字符串result.resultString // 签名值是sign后面双引号内的内容,注意签名的结尾也是= result.sign if ([verifier verifyString:result.resultString withSign:result.sign]) {//gw 在处理返回的支付结果时,需要使用公钥验证返回结果是否被篡改了 NsAccountRecordController *accountCtrl = [[NsAccountRecordController alloc]initWithTitle:@"账户明细" type:AccountRecord_Normal]; accountCtrl.isWarn = result.out_trade_no; UINavigationController *nav = [ApplicationDelegate navigationController]; [nav pushViewController:accountCtrl animated:YES]; [accountCtrl release]; } } } else { NSLog(@"交易失败"); } } else { NSLog(@"交易失败"); } }]; } if ([url.host isEqualToString:@"platformapi"]) { [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) { NSLog(@"支付宝返回:%@",resultDic); }]; } return YES; } 附加:支付宝反回字符串的解析(将字符串分割成子串,并且以字典的形式存储) // // NsZhifubaoModel.h // Lottery-Trade-3.3 // // Created by 袁冬冬 on 16/5/17. // // #import <Foundation/Foundation.h> @interface NsZhifubaoModel : NSObject @property (nonatomic, copy) NSString *memo; @property (nonatomic, copy) NSString *resultStatus; //状态码 @property (nonatomic, copy) NSString *resultString; //订单信息 @property (nonatomic, copy) NSString *partner; // @property (nonatomic, copy) NSString *seller_id; @property (nonatomic, copy) NSString *out_trade_no; //支付宝订单号 @property (nonatomic, copy) NSString *subject; @property (nonatomic, copy) NSString *body; @property (nonatomic, copy) NSString *total_fee; @property (nonatomic, copy) NSString *notify_url; @property (nonatomic, copy) NSString *show_url; @property (nonatomic, copy) NSString *service; @property (nonatomic, copy) NSString *_input_charset; @property (nonatomic, copy) NSString *payment_type; @property (nonatomic, copy) NSString *return_url; @property (nonatomic, copy) NSString *it_b_pay; @property (nonatomic, copy) NSString *success; @property (nonatomic, copy) NSString *sign_type; @property (nonatomic, copy) NSString *sign; - (instancetype)initWithDictionary:(NSDictionary *)dict; + (instancetype)zhifuWithDictionary:(NSDictionary *)dict; @end // // NsZhifubaoModel.m // Lottery-Trade-3.3 // // Created by 袁冬冬 on 16/5/17. // // #import "NsZhifubaoModel.h" @implementation NsZhifubaoModel - (instancetype)initWithDictionary:(NSDictionary *)dict { self = [super init]; if (self) { [self setValuesForKeysWithDictionary:dict]; } return self; } + (instancetype)zhifuWithDictionary:(NSDictionary *)dict { return [[NsZhifubaoModel alloc] initWithDictionary:dict]; } - (void)setValue:(id)value forUndefinedKey:(NSString *)key { if ([key isEqualToString:@"result"]) { if ([value rangeOfString:@"&sign_type="].location != NSNotFound) { NSArray *tempArray = [value componentsSeparatedByString:@"&sign_type="]; self.resultString = tempArray[0]; } [self parseStringToDic:value]; } } //将支付宝返回的result字符串转换成字典 - (NSDictionary *)parseStringToDic:(NSString *)str { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; //将字符串分割成数组,数组中存储键值对 NSArray *key_values = [str componentsSeparatedByString:@"&"]; for (int i = 0; i < key_values.count; i++) { NSString *tempStr = key_values[i]; if ([tempStr rangeOfString:@"partner="].location != NSNotFound) { self.partner = [[tempStr substringFromIndex:[@"partner" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"seller_id="].location != NSNotFound) { self.seller_id = [[tempStr substringFromIndex:[@"seller_id" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"out_trade_no="].location != NSNotFound) { self.out_trade_no = [[tempStr substringFromIndex:[@"out_trade_no" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"subject="].location != NSNotFound) { self.subject = [[tempStr substringFromIndex:[@"subject" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; }if ([tempStr rangeOfString:@"body="].location != NSNotFound) { self.body = [[tempStr substringFromIndex:[@"body" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; }if ([tempStr rangeOfString:@"total_fee="].location != NSNotFound) { self.total_fee = [[tempStr substringFromIndex:[@"total_fee" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"notify_url="].location != NSNotFound) { self.notify_url = [[tempStr substringFromIndex:[@"notify_url" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"show_url="].location != NSNotFound) { self.show_url = [[tempStr substringFromIndex:[@"show_url" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"service="].location != NSNotFound) { self.service = [[tempStr substringFromIndex:[@"service" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"_input_charset="].location != NSNotFound) { self._input_charset = [[tempStr substringFromIndex:[@"_input_charset" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"payment_type="].location != NSNotFound) { self.payment_type = [[tempStr substringFromIndex:[@"payment_type" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"return_url="].location != NSNotFound) { self.return_url = [[tempStr substringFromIndex:[@"return_url" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"it_b_pay="].location != NSNotFound) { self.it_b_pay = [[tempStr substringFromIndex:[@"it_b_pay" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"success="].location != NSNotFound) { self.success = [[tempStr substringFromIndex:[@"success" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"sign_type="].location != NSNotFound) { self.sign_type = [[tempStr substringFromIndex:[@"sign_type" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } if ([tempStr rangeOfString:@"sign="].location != NSNotFound) { self.sign = [[tempStr substringFromIndex:[@"sign" length]+1] stringByReplacingOccurrencesOfString:@""" withString:@""]; } // //将键值对字符串分割 // NSArray *temArray = [tempStr componentsSeparatedByString:@"="]; // //将键值对存到字典里 // NSString *secondStr = [temArray[1] stringByReplacingOccurrencesOfString:@""" withString:@""]; // NSLog(@"这里:%@",secondStr); // [dict setObject:secondStr forKey:temArray[0]]; } return dict; } @end