1、在实现支付宝功能的时候,首先要到下载支付宝的官方demo,在官方demo中选择客户端这个文件夹,里面有一些支付功能需要的东西,现在我把这些需要的整理出来,大家下载了支付宝demo以后找到这几个文件,就可以了:AlipaySDK.bundle,AlipaySDK.framework,openssl文件夹,Util文件夹,libcrypto.a,libssl.a,还有Order的.h和.明文件,只要有了这几个文件,就可以进行下一步工作了:
2、在需要支付的控制器里导入AlipaySDK.h的头文件,此时还需要partnerID sellerID和privateKey,有了这些,就可以进行下一步了;
3、在图片标示的地方写入url,接下来就是项目的主要代码了;
4、
//支付宝支付
/*
*点击获取prodcut实例并初始化订单信息
*/
/*
*商户的唯一的parnter和seller。
*签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。
*/
/*=======================需要填写商户app申请的===============*/
NSString *partner = dic[@"partner"];
NSString *seller = dic[@"seller_id"];
NSString *privateKey = kPrivate_key;//商户和支付宝之间的私钥
//partner和seller获取失败,提示
if ([partner length] == 0 ||
[seller length] == 0 ||
[privateKey length] == 0)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"缺少partner或者seller或者私钥。"
delegate:self
cancelButtonTitle:@"确定"
otherButtonTitles:nil];
[alert show];
return;
}
/*
*生成订单信息及签名
*/
//将商品信息赋予AlixPayOrder的成员变量
Order *order = [[Order alloc] init];
order.partner = partner;
order.sellerID = seller;
order.outTradeNO = dic[@"out_trade_no"]; //订单ID(由商家自行制定)
order.subject = dic[@"subject"]; //商品标题
order.body = dic[@"body"]; //商品描述
order.totalFee = [NSString stringWithFormat:@"%.2f",[dic[@"total_fee"] floatValue]]; //商品价格
order.notifyURL = dic[@"notify_url"]; //回调URL
order.service = dic[@"service"];
order.paymentType = dic[@"payment_type"];
order.inputCharset = dic[@"_input_charset"];
order.itBPay = dic[@"it_b_pay"];
order.showURL = @"m.alipay.com";
//上面这些需要的信息都不需要自己填写,属于公司的信息
下面这些照样子写就行了。
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
NSString *appScheme = @"alisdkdemo";//这里就是填的上面的url里面写的那个东西。
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec);
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
}
以上这是集成的时候所有的代码,但是我每次都会出现同一个问题: openssl/asn1.h file not found这个问题的解决办法:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 方法里面写入如下代码
返回的url中如果host是safety表示是支付宝支付 [url.host isEqualToString:@"safepay"]
{
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//[[NSNotificationCenter defaultCenter] postNotificationName:kIsPaySuccess object:nil];
NSInteger resultCode = [resultDic[@"resultStatus"] integerValue];
if(resultCode == 9000){
NSString *valueStr = resultDic[@"result"];
处理返回结果
NSArray *infoArr = [valueStr componentsSeparatedByString:@"&"];
NSMutableDictionary *bigDic = [[NSMutableDictionary alloc] init];
for(NSString *str in infoArr){
NSArray *keyValueArr = [str componentsSeparatedByString:@"="];
NSString *key = keyValueArr[0];
NSString *value = keyValueArr[1];
NSString *sub1 = [value substringFromIndex:1];
NSString *vaLue = [sub1 substringToIndex:sub1.length - 1];
NSDictionary *dic = @{
key : vaLue
};
[bigDic addEntriesFromDictionary:dic];
}
NSString *state = bigDic[@"success"];
if([state isEqualToString:@"true"]){
//支付成功
}
}else{
支付失败!
}
NSLog(@"result = %@",resultDic);
}];
}