iOS支付宝集成
- 1. 申请支付宝签约
- 2. 获得商户ID(partner)和账号ID(seller)
- 3. 下载公钥私钥文件(加密签名用)
- 4. 下载支付宝SDK
- 5. 集成代码
- 1> 把SDK中的alipay文件夹托人项目
- 2> 生成订单信息
- 3> 生成加密签名
- 4> 把订单信息,加密签名和加密类型合并,生成一个订单字符串
- 5> 打开支付宝
- 6.SDK常见的集成错误
1. 申请签约
签约需要公司的营业证件 和 移动产品需求文档(pdf),或整个应用程序,清楚表明应用的价值,支付的使用场景
2. 获得必要信息
获得partner和seller,公钥和密钥
partner:合作身份者id,以2088开头的16位纯数字
seller:收款支付宝账号
3,4 下载支付宝SDK
5. 集成代码
1> 将aliPay文件夹拖入项目
2> 生成订单信息
点击购买按钮,执行
/*
*点击获取prodcut实例并初始化订单信息
*/
AlixPayOrder *order = [[AlixPayOrder alloc] init];
order.partner = PartnerID;
order.seller = SellerID;
//订单ID(由商家自行制定)
order.tradeNO = [self generateTradeNO];
//商品标题
order.productName = product.subject;
//商品描述
order.productDescription = product.body;
//商品价格
order.amount = [NSString stringWithFormat:@"%.2f",product.price];
// 回调URL:一般是支付成功后由支付宝服务器发送订单信息给我们的服务器接收一些信息,所以由服务器端人员给出
order.notifyURL = @"http%3A%2F%2Fwwww.xxx.com";
3> 生成加密签名
// PartnerPrivKey:私钥
id<DataSigner> signer = CreateRSADataSigner(PartnerPrivKey);
NSString *signedString = [signer signString:[order description]];
4> 把订单信息,加密签名和加密类型合并,生成一个订单字符串
NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
[order description], signedString, @"RSA"];
5> 打开支付宝
// appScheme:用于支付宝支付成功后跳回原应用程序
// _result:用于跳回原应用之后的回调方法
[AlixLibService payOrder:orderString AndScheme:appScheme seletor:_result target:self];
6> 最后需要在UIAppDelegate中配置一些代码
从支付宝跳回原应用的过程中,支付结果信息都在回调的URL中
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
[self parse:url application:application];
return YES;
}
- (void)parse:(NSURL *)url application:(UIApplication *)application {
//结果处理
AlixPayResult* result = [self handleOpenURL:url];
if (result)
{
if (result.statusCode == 9000)
{
/*
*用公钥验证签名 严格验证请使用result.resultString与result.signString验签
*/
//交易成功
// NSString* key = @"签约帐户后获取到的支付宝公钥";
// id<DataVerifier> verifier;
// verifier = CreateRSADataVerifier(key);
//
// if ([verifier verifyString:result.resultString withSign:result.signString])
// {
// //验证签名成功,交易结果无篡改
// }
}
else
{
//交易失败
}
}
else
{
//失败
}
}
- (AlixPayResult *)resultFromURL:(NSURL *)url {
NSString * query = [[url query] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
#if ! __has_feature(objc_arc)
return [[[AlixPayResult alloc] initWithString:query] autorelease];
#else
return [[AlixPayResult alloc] initWithString:query];
#endif
}
- (AlixPayResult *)handleOpenURL:(NSURL *)url {
AlixPayResult * result = nil;
if (url != nil && [[url host] compare:@"safepay"] == 0) {
result = [self resultFromURL:url];
}
return result;
}
6. SDK常见的集成错误
支付宝集成发生如下路径错误:
解决办法:在自己工程文件夹里创建一个文件夹,随便起什么名字。把支付宝所需要的东西全都拖进去,然后拖到项目里。然后再TARGETS-Build Settings里找到如下位置:
把自己新建的文件夹拖动到这个框里面,再次运行就OK了,如果不行可以再多试几次