支付宝的使用(支付宝SDK)
来源:互联网 发布:名师视频讲课软件 编辑:程序博客网 时间:2024/05/03 12:43
其实支付宝的官方demo配合文档看还是写的很清楚的,这里就是多写些大白话,仅供参考和共同学习。
官方给出的思路,如以下的代码,实例化订单对象Order,给Order赋值各项需要的属性,然后用方法把这些字符串拼接,加密 (就相当,剁碎了揉一起然后再生成新的,支付宝认可的字符串),最后把你APP的标识和得到的支付宝认可的字符串一起传过去,就可以等待回调的block给你的反馈了。
2016.03.18 添加
当你在最后一步要把orderString传给支付宝的时候,“签名加密”不管是在后台,还是由手机端进行的,都应该是由三部分组成的字符串。
第一,是我们的参数partner,productName,inputCharset 等一些参数未加密的状态:
如:
@"notify_url="http://www.xxxxx.com/interface/alipay/"&service="mobile.securitypay.pay"&partner="2088911123193167"&_input_charset="utf-8"&out_trade_no="Ali201603175222453"&subject="测试商品"&payment_type="1"&seller_id="123456@qq.com"&total_fee="0.01"&body="test""
第二,是我们第一步的这个字符串,进行(RSA或者MD5)加密后的加密字符串:
如:
@"sign="RCBRR0F04e3nPv8corkO1mwpCb9E59bbPOFVuS%2FPysdIb3pk%2BcKA9yQAFVwFMsrzpsD6iHO%2BTny1MA212HbjhNBb4378aCyVF%2F3lrfGo2A7%2CKyOgGqca8Q1eKK6ecjMCjKID%2FCH6D%2FBCau5xtUqf8CA7hq5ZS4BCIpRFz5lJqgQ%3D""
</pre><p></p><p class="p1"><span style="font-family:'Arial Black'; color:rgb(51,51,51); background-color:rgb(255,255,255)"><span style="font-size:14px">第三,是我们加密的方式(RSA或者MD5), 我这边是RSA的:</span></span></p><p class="p1"><span style="font-family:'Arial Black'; color:rgb(51,51,51); background-color:rgb(255,255,255)"><span style="font-size:14px">如:</span></span></p><pre code_snippet_id="1614915" snippet_file_name="blog_20160318_3_153241" name="code" class="objc">@"sign_type="RSA""
最后生成的字符串,应该是类似于这个形式(字符串中的引号请让后台大哥用“\”隔开):
如:
@"notify_url="http://www.xxxxx.com/interface/alipay/"&service="mobile.securitypay.pay"&partner="2088911123193167"&_input_charset="utf-8"&out_trade_no="Ali201603175222453"&subject="测试商品"&payment_type="1"&seller_id="123456@qq.com"&total_fee="0.01"&body="test"&sign="RCBRR0F04e3nPv8corkO1mwpCb9E59bbPOFVuS%2FPysdIb3pk%2BcKA9yQAFVwFMsrzpsD6iHO%2BTny1MA212HbjhNBb4378aCyVF%2F3lrfGo2A7%2CKyOgGqca8Q1eKK6ecjMCjKID%2FCH6D%2FBCau5xtUqf8CA7hq5ZS4BCIpRFz5lJqgQ%3D"&sign_type="RSA""
----------------------------------------------------分割线----------------------------------------------------
你需要声明的类:
#import <AlipaySDK/AlipaySDK.h>
/* *生成订单信息及签名 *///将商品信息赋予AlixPayOrder的成员变量 Order *order = [[Order alloc] init];order.partner = partner;order.seller = seller;order.tradeNO = @"Ali201603175222453"; //订单ID(由商家自行制定)order.productName = @"测试商品"; //商品标题order.productDescription = @"test"; //商品描述order.amount = @"0.01"; //商品价格order.notifyURL = @"http://www.xxxxx.com/interface/alipay/"; //回调给服务器的URL order.service = @"mobile.securitypay.pay"; order.paymentType = @"1"; order.inputCharset = @"utf-8";//应用注册scheme,在AlixPayDemo-Info.plist定义URL typesNSString *appScheme = @"alisdkdemo";//将商品信息拼接成字符串NSString *orderSpec = [order description];NSLog(@"orderSpec = %@",orderSpec);//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncodeid<DataSigner> signer = CreateRSADataSigner(privateKey);NSString *signedString = [signer signString:orderSpec];//将签名成功字符串格式化为订单字符串,请严格按照该格式NSString *orderString = nil;if (signedString != nil) { //这个字符串orderString就是最后上传给支付宝的字符串orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec, signedString, @"RSA"]; NSLog(@"%@",orderString); [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) { NSLog(@"reslut = %@",resultDic); }]; }
当然以上的代码中给Order赋值的参数,大多都是从我们自己的服务器中获得的参数。
有一点需要注意的是:虽然支付宝的demo是在前端进行的签名与加密,但是因为安全问题,支付宝包括微信都建议我们在后台服务器进行签名与加密。
所以一般签名加密的操作,都是在服务器中生成好直接把orderString这个字符串拼接好,传过到手机端使用,所以支付宝在我们的APP中最好是如下几行。
#pragma mark 支付宝支付- (void)aliPayWithOrderStr:(NSString*)orderString{ //orderString为服务器已经签名加密过的,支付宝认可字符串 //应用注册scheme,在AlixPayDemo-Info.plist定义URL types NSString *appScheme = @"com.xxxxx.Share"; [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic){ NSLog(@"reslut = %@",resultDic); NSDictionary *dic = resultDic; NSString *resultStr = dic[@"resultStatus"]; [self paymentResult:resultStr];//回调 }];}#pragma mark 支付宝回调-(void)paymentResult:(NSString *)resultd{ NSString *strMsg = @""; //结果处理 if ([resultd isEqualToString:@"9000"]) { strMsg = @"支付成功!"; [self goToPaySuccessView]; return; }else if ([resultd isEqualToString:@"6001"]){ //交易取消 strMsg = @"支付取消!"; }else{ //交易失败 strMsg = @"支付失败!"; } UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alert show];}
支付宝的简单使用其实就是这样了,如果你有更好的想法,或者博客中哪里有写错的地方,请不吝赐教在下方留言。
感谢观看,学以致用更感谢!
- 支付宝的使用(支付宝SDK)
- 支付宝SDK的使用
- 支付宝SDK使用
- 支付宝sdk支付
- ios-支付宝支付sdk使用注意事项
- iOS -- 支付宝SDK 的使用(支付功能)
- 使用支付宝快捷支付SDK的一些心得
- 支付宝 iOS SDK 的简单使用
- 支付宝 iOS SDK 的简单使用
- 支付宝sdk的使用及常见问题
- 支付宝sdk的使用及常见问题
- 支付宝 iOS SDK 的简单使用
- 支付宝 iOS SDK 的简单使用
- 支付宝 iOS SDK 的简单使用
- 支付宝 iOS SDK 的简单使用
- 支付宝支付 微信支付 SDK的集成教程
- 支付宝支付sdk解析
- 支付宝SDK的使用说明
- matlab:判断变量是否为空
- JNI接口实现Java和C的交互
- RecylerView与CardView的使用
- 浅谈C语言中如何取随机数
- Eclipse自动生成作者、日期注释等功能设置
- 支付宝的使用(支付宝SDK)
- hdu 3829 Cat VS Dog 二分匹配
- python 连接mysql
- centos下配置ftp
- 在使用virtualbox安装ubuntu时出现I/Ocache不足的问题
- JavaWeb开发环境搭建、项目建立与发布
- MyOS (一)
- C语言实验——单词统计
- 经典收藏 50个jQuery Mobile开发技巧集萃