支付宝支付:

下载官方demo,把需要的framwork下载下来,在自己的工程中,新建文件夹,然后全部塞进去,到build phases中把需要的全部导入,其中xcode7以上需要多导入两个.a文件,详情参考官方文档


需要注意的是:

  • 如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;
  • 如果是Xcode 7.0之前的版本,需要添加libc++.dylib、libz.dylib(如下图)


//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
NSString *appScheme = @"alisdkdemo";
当支付完成后,支付结果需要返回自身APP,需要在plist文件中添加如下设置:


两个回调block都统一定义为typedef void(^CompletionBlock)(NSDictionary *resultDic);
返回了一个字典,但是SDK里完全没有提示有哪些key。。
你可以在文档里找到,或者自己实际试一下,返回的信息如下:

  • resultStatus,状态码,SDK里没对应信息,第一个文档里有提到:

    • 9000 订单支付成功
    • 8000 正在处理中
    • 4000 订单支付失败
    • 6001 用户中途取消
    • 6002 网络连接出错
  • memo, 提示信息,比如状态码为6001时,memo就是“用户中途取消”。但千万别完全依赖这个信息,如果未安装支付宝app,采用网页支付时,取消时状态码是6001,但这个memo是空的。。(当我发现这个问题的时候,我就决定,对于这么不靠谱的SDK,还是尽量靠自己吧。。)
  • result,订单信息,以及签名验证信息。如果你不想做签名验证,那这个字段可以忽略了。。

如果你对支付的安全性不那么在意或重视的话,到这里就可以完成支付宝的集成了。
如果想更加安全,还是需要增加下面的签名验证的。


下面是详细的调用代码,需要导入头文件:
#import <AlipaySDK/AlipaySDK.h>
#import order.h
等等。。剩下的就是UI界面的配置了~~~~ -(void)zhiFuBaoPay
{ Product *product=[[Product alloc]init];
float a =allMoney;
float finalPoints=0;
if (_currentDJQBtn.selected == YES)
{
float KDDJQ = [self.model.max_points_fare floatValue];
float KYDJQ = [self.model.points floatValue];
if (KDDJQ>=KYDJQ)
{
a = a-KYDJQ;
finalPoints = KYDJQ;
}
else{
a =a - KDDJQ;
finalPoints = KDDJQ;
}
} product.price= a;
product.subject=@"我连网商品支付"; /*============================================================================*/
/*=======================需要填写商户app申请的===================================*/
/*============================================================================*/
NSString *partner = @"2088501449587500";
NSString *seller = @"1028646629@qq.com";
NSString *privateKey = @"MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAOVv3ZBiCbjBIlUHwFSF0sEm11TXoJRmn1846g5TaWlsSokJK7MO5pPECe4U5jUdw3BvYnarJTtbLAFEaD8POf1xji0BVqQOfEh77aTK/LhEFFfh345Z+Rhqttx2aWya2HU2qADE5MCbRZfk0fMBUj5NBI9sbBU46BZQJ+GWvNtPAgMBAAECgYEA5FLduCiIKi8w/lN3Z+XBJWyEz67B48z4fueBrP3/IeWdix/wOAH1Hknx49cyfNuAuexunU+V/qqtcRllcJOzjQyr2tX1DlIYaaZTgNg0q9zTTjNjUCZVtm1Mx7TK4/Fu30L30dCWPuHjS/dD3TIL59ht0wljjdZGqN6dZEJWMGECQQD4IBmn0+RqW3AdzQoQh1FeZZkaDyaZpiBy7Gi2oy1dZADZ9nFq1tJQpzKGFqQ26loL1p2oIcA3aD09uUdOTME/AkEA7LfuS9DmIqTF/KC4Mz5zySU9fAQIJEjiuHfVcCsTW8s1F4HOb8PA+F1c/MoyxMvYIdV1u3zXUwpSZWQRXSpR8QJAPJCxUnrxTVjGdC/BXil5nh4UkfzSwjx/vS2hnbsU7q/jWVDDfH21VoSJW5uZN+JaWntnfkvGvH+QO0nHcwBfRwJBALTIh9opEQkWNAqKqAKiyISuxzUmUx16+IOPKVd/3kn1eHeacBFVO9OyYejBd2Jql4bHYiGs5zmJIYJDmStAvdECQQCYrmHRSWueQahM9VuBF53tDTp0gqjC0mGGE5SbXtfsdaq9d0Iu2gScY623YSaH6SIg3UM7c6oa6xYUqQH2UDyA";
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/ //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.seller = seller;
order.tradeNO = _dingDanHaoLabel.text; //订单ID(由商家自行制定)
order.productName = product.subject; //商品标题
order.productDescription = product.body; //商品描述
order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品价格
order.notifyURL = @"http://www.xxx.com"; //回调URL 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 defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
if ([resultDic[@"resultStatus"] isEqualToString:@"6001"])
{
ZFcgViewController *controller=[[ZFcgViewController alloc]init];
[controller setPayWith:2];
[self.navigationController pushViewController:controller animated:YES];
}
else if ([resultDic[@"resultStatus"] isEqualToString:@"9000"]) { //支付成功
if (finalPoints==0)
{
[self ZFCGJIEKOUWithPWay:@"1" andPoint:@""];
}
else
{
[self ZFCGJIEKOUWithPWay:@"1" andPoint:[NSString stringWithFormat:@"%f",finalPoints]];
} }
}]; } }

  

ios 支付宝支付集成的更多相关文章

  1. iOS支付宝支付集成

    概述 iOS支付宝支付集成 详细 代码下载:http://www.demodashi.com/demo/10729.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧( ...

  2. iOS 支付宝支付集成获取私钥

    http://doc.open.alipay.com/doc2/apiList?docType=4 登录到支付宝开放平台,下载相关支付宝支付的demo.解压出来有3个文件夹.(服务端demo,客户端 ...

  3. 李洪强iOS开发支付集成之支付宝支付

    iOS开发支付集成之支付宝支付 下载支付宝SDK 首先是开发包下载,还是比较难发现的,网上以前文章中的链接都打不开,我找了好久才找到的.最新的地址在这里(注意的是下载出来的SDK包里面并没有传说中的开 ...

  4. 李洪强iOS开发支付集成之银联支付

    iOS开发支付集成之银联支付 银联官网在这里,这里能下载SDK或者是看文档.最新的版本写的简单了很多,看文档一直做下去基本上就没问题了. 首先,SDK在这里下载,里面包含需要的库文件和详细的文档. 银 ...

  5. 李洪强iOS开发支付集成之微信支付

    iOS开发支付集成之微信支付 微信支付也是需要签名的,也跟支付宝一样,可以在客户端签名,也可以在后台签名(当然,为了安全还是推荐在服务器上做签名,逻辑也比较好理解). 1 - 集成前首先要看看文档 开 ...

  6. iOS开发支付集成之微信支付

    这一篇是<iOS开发之支付>这一部分的继支付宝支付集成,银联支付集成第三篇,微信支付.在集成的时候建议都要去下载最新版的SDK,因为我知道的前不久支付宝,银联都更新了一次,微信的不太清楚更 ...

  7. iOS微信支付集成

    概述 iOS微信支付集成 详细 代码下载:http://www.demodashi.com/demo/10735.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧(纯 ...

  8. iOS开发支付集成之支付宝支付

    项目中要用到支付功能,需要支付宝,微信,银联三大支付,所以打算总结一下,写两篇文章,方便以后的查阅, 大家在做的时候也能稍微参考下,用到的地方避免再次被坑.这是第二篇支付宝集成,第一篇银联支付在这里. ...

  9. Android最新版支付宝支付集成

    上次集成支付宝支付已经很久了,今天写东西用到了支付宝支付,就大致写一下流程: 去蚂蚁金服下载最新版的Android&IOS端SDK 全部文档 -- 资源下载 -- App支付客户端 下载后解压 ...

随机推荐

  1. rust ownership 系统

    ### 对象销毁规则 未被使用的函数返回值 被let绑定的值, 在函数末尾销毁,除非被moved ``` let v = obj::new("a"); other_fun(v); ...

  2. CI中site_url和base_url的区别

    你若使用site_url("test/php/1");则实际url为 http://domain.com/index.php/test/php/1 若使用base_url(&quo ...

  3. SPOJ Query on a tree II (树剖||倍增LCA)(占位)

    You are given a tree (an undirected acyclic connected graph) with N nodes, and edges numbered 1, 2, ...

  4. properties使用

    properties可以load store 注释可以采用 "#" 或者"!" 分隔采用"="或者":" 分行采用&qu ...

  5. openfire服务器开发环境搭建

    2017-07-26 更新:直接获取最新版源码,就不会报错了,而且可支持的插件多,老版本的openfire几乎没有可用的官方插件. 系统及软件环境: MAC OSX EI Capitan 10.11. ...

  6. 反编译工具Reflector下载(集成FileGenerator和FileDisassembler)

    Reflector是一款比较强大的反编译工具,相信很多朋友都用过它,但reflector本身有很多局限性, 比如只能一个一个的查看方法等,但幸好reflector支持插件功能目前网上有很多reflec ...

  7. cs2008中头文件交叉编译的问题

    使用全局变量 使用基类指针定义在头文件中,在实际使用中强制转型为需要的指针,当然应该也可以存为空指针.

  8. 继承自DynamicObject的对象的Xml序列化

    默认情况下,对继承自DynamicObject的对象进行序列化操作是不会报错的,但是并没有实际序列化出任何东西来 为了让它进行序列化,我们改造一下实现类,实现IXmlSerializable接口 代码 ...

  9. ng2-升级脚手架到最新版本

    //先卸载,后安装 npm uninstall -g @angular/cli npm cache clean npm install -g @angular/cli@latest

  10. WPF Canvas

    Canvas为容器控件,用于定位. 1.基本应用 <Border HorizontalAlignment="Left" VerticalAlignment="Top ...