您的位置:首页 > 移动开发 > IOS开发

iOS-支付宝浅究

2016-03-11 20:44 525 查看
* 研究了几天的支付宝,将个人的理解分享给大家,不够完善,里面肯定有Bug,请及时提出来,共同学习,共同成长。*

1、个人不能申请成为支付宝账户;

2、在找支付宝帮忙支付之前需要自己对订单信息进行封装,一般订单信息包括PID(Parter_ID)商户ID、UID(user_ID)用户ID、商品ID、商品单价,商品数量、收货人信息(收货人姓名、地址、联系方式等)、私钥等;

3、前端创建完订单信息后 需要传给后台,然后后台对订单进行两次加密,然后将加密信息再返回给前端;

4、前端再调用支付宝SDK,将加密后的订单信息传递给支付宝服务器(如果手机安装支付宝客户端,会调用支付宝客户端,否则会调用网页版支付宝进行支付),待用户操作后返回支付结果到前端;与此同时,支付宝安全服务器会通过订单中的通知地址将结果传递给前端服务器;

5、前端收到支付结果,如果支付成功,完成支付;支付失败,重新支付或者取消支付;

6、商家根据支付结果进行后续操作,安排发货等。





关于支付订单参数及加密、回调代码如下:

//商户ID字符串
NSString *partner = @"12345456573657468";
//卖家ID
NSString *seller = @"xxxxxxx@163.com";
//私钥
NSString *privateKey = @"xxxxxxxxxxxxxxxxx";

//partner和seller获取失败,提示
if ([partner length] == 0 ||
[seller length] == 0 ||
[privateKey length] == 0)
{
return;
}

/*
*生成订单信息及签名
*/
//将商品信息赋予AlixPayOrder的成员变量
//初始化订单实例变量
Order *order = [[Order alloc] init];
//指定订单中的商户ID
order.partner = partner;
//指定订单中的卖家ID
order.seller = seller;
//订单ID(由商家自行制定)
order.tradeNO = orderid;
//商品标题
order.productName = title;
//商品描述
order.productDescription = des;
//商品价格
order.amount = [NSString stringWithFormat:@"%.2f",[price floatValue]];
//回调URL
order.notifyURL =  @"http://www.xxxxx.com/pay/notify";
//支付安全服务类型
order.service = @"mobile.securitypay.pay";
//指定支付类型
order.paymentType = @"1";
//输入字符串编码类型
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
//网页版支付宝
order.showUrl = @"m.alipay.com";
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
NSString *appScheme = @"alisdkdemo";
//将商品信息拼接成字符串
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 *sk=[AlipaySDK defaultService];
[sk payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: