iOS集成支付宝
这个是需要审核的【3天左右 以邮件形式告知你】
使用支付宝进行一个完整的支付功能,大致有以下步骤:
1>先与支付宝签约,获得商户ID(partner)和账号ID(seller)
(这个主要是公司的负责)
2>下载相应的公钥私钥文件(加密签名用)
3>下载支付宝SDK(登录网站:http://club.alipay.com/)
里面提供了非常详细的文档、如何签约、如何获得公钥私钥、如何调用支付接口。
4>生成订单信息
5>调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
6>支付完毕后返回支付结果给商户客户端和服务器
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
详细步骤
目前移动支付的主要商家有支付宝、微信支付、银联支付等。当然我们优选的还是支付宝,因为支付宝有着中国最多的用户量,市场占有量高,用户黏性强,而且使用也极其简单,只需要几分钟我们就可以快速的集成到我们的项目当中。
1. #import "AppDelegate.h"
2. #import <AlipaySDK/AlipaySDK.h>
3.
4. @interface AppDelegate ()
5.
6. @end
7.
8. @implementation AppDelegate
9.
10.
11. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
12. // Override point for customization after application launch.
13. return YES;
14. }
15.
16. //回调方法
17. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
18. //如果极简 SDK 不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给 SDK if ([url.host isEqualToString:@"safepay"]) {
19. [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
20. NSLog(@"result = %@",resultDic);
21. }];
22. if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回 authCode
23. [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
24. NSLog(@"result = %@",resultDic);
25. }];
26. }
27. return YES;
28. }
29.
1. #import "ViewController.h"
2. #import "Order.h"
3. #import "DataSigner.h"
4. #import <AlipaySDK/AlipaySDK.h>
5.
6. @interface ViewController ()
7. - (IBAction)pay;
8.
9. @end
10.
11. @implementation ViewController
12.
13. - (void)viewDidLoad {
14. [super viewDidLoad];
15.
16. }
17.
18. //支付按钮点击的方法
19. - (IBAction)pay {
20. //下面3个参数 我这里不写了 因为这是我们公司的商户ID和私匙,你们可以用自己公司申请的填到上面。
21. NSString *partner = @"";
22. NSString *seller = @"";
23. NSString *privateKey = @"";
24. //如果partner和seller获取失败,提示用户
25. if ([partner length] == 0 ||
26. [seller length] == 0 ||
27. [privateKey length] == 0)
28. {
29. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
30. message:@"缺少partner或者seller或者私钥。"
31. delegate:self
32. cancelButtonTitle:@"确定"
33. otherButtonTitles:nil];
34. [alert show];
35. return;
36. }
37. //2.创建订单对象
38. Order *order=[[Order alloc]init];
39. order.partner=partner;
40. order.seller=seller;
41. //订单ID(由商家自行制定)
42. order.tradeNO=@"201591734927845485340";
43. //商品标题
44. order.productName=@"iphone 6s" ;
45. //商品描述
46. order.productDescription = @"超高配置 2个内存 配A9处理器 其性能是iphone6的1.8倍";
47. //商品价格
48. order.amount = @"0.01" ;
49. //回调URL
50. order.notifyURL = @"http://www.xxx.com";
51. order.service = @"mobile.securitypay.pay";
52. order.paymentType = @"1";
53. order.inputCharset = @"utf-8";
54. order.itBPay = @"30m";
55. order.showUrl = @"m.alipay.com";
56.
57. NSString *appScheme = @"thinklion";
58.
59. //将商品信息拼接成字符串 商品信息也是服务器返回的
60. NSString *orderSpec = [order description];
61. //此数据是服务器返回的证书类型
62. //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
63. id<DataSigner> signer = CreateRSADataSigner(privateKey);
64. //此签名信息是Util和openssl里面的文件生成的数据 其实应该是我们服务器端给我们返回的
65. NSString *signedString = [signer signString:orderSpec];
66.
67. NSLog(@"orderSpec = %@",orderSpec);
68.
69. NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
70. orderSpec, signedString, @"RSA"];
71.
72. //如果有签名字符串 才打开支付
73. if(signedString!=nil){
74. [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
75. NSLog(@"reslut = %@",resultDic);
76. }];
77.
78. }
79.
80. }
81.
82.
//将商品信息拼接成字符串 商品信息也是服务器返回的
NSString *orderSpec = [orderdescription];
//此数据是服务器返回的证书类型
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer =CreateRSADataSigner(privateKey);
//此签名信息是Util和openssl里面的文件生成的数据 其实应该是我们服务器端给我们返回的
NSString *signedString = [signersignString:orderSpec];
iOS集成支付宝的更多相关文章
- iOS集成支付宝支付
本文由本人原创发表于博客园,转载请注明出处 http://www.cnblogs.com/wangqw/p/5074907.html 一. 开发前准备 iOS 支付宝SDK下载地址:(内含iOS An ...
- iOS - (集成支付宝SDK大坑总结)
其实集成支付宝相对于集成微信支付来说,支付宝算是简单的了,后续有空再去研究微信支付,现目前先总结一下集成支付宝所遇到的坑,其实支付宝的坑也不算太多,细算下来大概5-6个左右,但是其报错方式有点恶心,不 ...
- iOS - (集成支付宝第三方SDK大坑总结)
其实集成支付宝相对于集成微信支付来说,支付宝算是简单的了,后续有空再去研究微信支付,现目前先总结一下集成支付宝所遇到的坑,其实支付宝的坑也不算太多,细算下来大概5-6个左右,但是其报错方式有点恶心,不 ...
- iOS 集成支付宝过程中 我遇到的一些坑,请大家注意啦(ALI69错误,ALI64错误)
支付宝很早一段时间就集成了,之前由于一直忙于开发就没有总结,今天整理桌面的时候看到,当时做支付时候的一些散落的笔记,就稍微整理一下,给大家分享一下. 第一:当时调用支付宝的时候,总是调不起来,进过断点 ...
- iOS 集成支付宝遇到的问题(续)
调起支付宝进行支付时提示private key is null ,碰到这个问题有两种解决方案 第一种. 将私钥转成PKCS8替换一下原私钥即可 1.生成私钥pem, 执行命令openssl genr ...
- iOS——集成支付宝 系统繁忙,请稍后再试ALI40247
问题描述:在调用支付宝时,老是显示,系统繁忙,请稍后再试ALI40247. 解决方案: 一.如何签约APP支付接口 第一步:进入管理中心:https://openhome.alipay.com/p ...
- iOS——集成支付宝 系统繁忙,请稍后再试ALI10
问题描述:调用支付宝时,显示系统繁忙,请稍后再试(ALI10).代码没有报错,其他也是按照文档来的,为何老是提示显示系统繁忙? 解决方案:还需要在targets的中info里面,添加 url typ ...
- iOS——集成支付宝 ’openssl/asn1.h' file not found
问题原因:文件路径找不到的问题 解决方法:在 Building Settings -> Search Paths -> Header Search Paths 里,添加一个文件路径:$(P ...
- IOS 集成支付宝和邮件发送
列表中自找 :http://blog.csdn.net/sing_sing?viewmode=contents
随机推荐
- App Store不能下载一直等待中的两种解决办法
1,重启手机,之后确认是否得到改善 2,重启不行,更改WiFi的dns为114.114.114.114或者223.5.5.5 或 223.6.6.6,再重启手机 ps:我是第二种方法
- LINQ 基本子句之三 let
let子句,可以作为临时变量储存表达式的结果,但是let子句一旦初始化后无法再次进行更改. 1. static void Main(string[] args) { string[] names = ...
- android中跨进程通讯的4种方式
转自:http://blog.csdn.net/lyf_007217/article/details/8542359 帖子写的很好.看来一遍,试了一遍,感觉太有意义.必须转过来! android中跨进 ...
- Springmvc和velocity使用的公用后台分页
Springmvc和velocity使用的公用后台分页 类别 [选择一个类别或键入一个新类别] Springmvc和velocity使用的公用后台分页 样式: 使 ...
- angular $location常用方法使用
$location提供了一些常用的操作和获取地址栏里的地址的方法. <script type="text/javascript"> angular.module('ap ...
- nodejs实现接收Snmp的Trap消息
var assert = require('assert'); var ASN1 = { EOC: 0, Boolean: 1, Integer: 2, BitString: 3, OctetStri ...
- 数据结构算法应用C++语言描述——(1)C++基础知识
一.二维数组 (1)二维数组的列是固定时,行未知时使用动态分配 当一个二维数组每一维的大小在编译时都是已知时,可以采用类似于创建一维数组的语法 来创建二维数组.例如,一个类型为char的7×5数组可用 ...
- JSP作为img的src时chrome的bug
废话不说,直接上代码. 新建一个jsp文件,名为img.jsp,代码如下: <%@page import="javax.imageio.ImageIO"%> <% ...
- php 代码重用
<?php /* 21.php * 代码重用 * include() required()载入文件 * include() 如果载入文件不存在,提示警告,还可以继续执行 * required() ...
- 1207: C.LU的困惑
题目描述 Master LU 非常喜欢数学,现在有个问题:在二维空间上一共有n个点,LU每连接两个点,就会确定一条直线,对应有一个斜率.现在LU把平面内所有点中任意两点连线,得到的斜率放入一个集合中( ...