每日更新关注:http://weibo.com/hanjunqiang 
新浪微博!

iOS开发者交流QQ群:
446310206

一、在app中成功完成支付宝支付的过程

1、申请支付宝钱包。参考网址:


     这是使用支付宝支付的第一步,合作申请通过之后,会集成一个开发文件。即使不申请也可以下载,只是demo中会缺少几个必须的参数: 在demo中的 PartnerConfig.h 文件中可以看到

//合作身份者id,以2088开头的16位纯数字

#define PartnerID @""

//收款支付宝账号

#define SellerID  @""

//安全校验码(MD5)密钥,以数字和字母组成的32位字符

#define MD5_KEY @""

//商户私钥,自助生成

#define PartnerPrivKey

//支付宝公钥(老板给你的)

#define AlipayPubKey   @"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRAFljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih3/PrQEB/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB"

只有这几个参数备齐之后,demo才可以完成支付,所以接下来第二步

2、生成RSA
    这个需要在windows系统下生成,开发文档中也有生成的步骤。我是直接问后台要了这几个参数,所以这一步只能简单写到这。
 3、导入框架
      根据集成文件的开发文档,导入框架。可以参考demo。当四个参数都备齐之后可以先在demo上试一下能不能成功支付。然后再往自己的程序中导入。

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

二、代码的使用
1、支付需要的参数
    在demo中的ViewController.h中可以看到有这么一段代码

@interface Product :NSObject{

@private

float _price;

NSString *_subject;

NSString *_body;

NSString *_orderId;

}

@property (nonatomic,assign) float price;

@property (nonatomic,retain) NSString *subject;

@property (nonatomic,retain) NSString *body;

@property (nonatomic,retain) NSString *orderId;

@end

这个就是所支付产品需要的几个必要的字段。在开发文档中可以看到需要好多参数,但在真正用时,只需要特别注意这几个就行。demo中有自动拼接的方法,到时候直接调用就行。

2、app和支付宝客户端之间的跳转

NSString *appScheme = @"AlipaySdkDemo"; //应用跳转的URL

*这里要和plist文件中URL types 下面的字段保持一致

3、支付结果的入口

首先是WAP端的入口,在ViewController.m文件中可以找到,这里返回支付结果,比较简单,不多说。

独立端的入口,在AppDelegate里面,我试着在viewcontroller中找这个,但最后没找到。最后只能设置一个观察者,把支付结果发送过来再进行处理。

三、总结

第一次接触支付方面的东西,刚开始很迷茫,不明白其中财务方面是怎么对上号的。

那些都是在后台进行处理的,iOS开发时需要做的,就是完成这个支付流程。

==================================具体看下面流程====================================

第一步:引入框架

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

第二步:注意框架及拉进相关文件

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

第三步:上代码

直接建立根视图:

#import "RootViewController.h"
#import <AlipaySDK/AlipaySDK.h>
#import "Order.h"
#import "DataSigner.h"
@interface RootViewController ()

@end

@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UIButton *button = [UIButton buttonWithType:(UIButtonTypeSystem)];
    [button addTarget:self action:@selector(buttonAction :) forControlEvents:(UIControlEventTouchUpInside)];
    button.frame = CGRectMake(100, 200, 100, 100);
    [button setTitle:@"支付" forState:(UIControlStateNormal)];
    [button setBackgroundColor:[UIColor yellowColor]];
    [self.view addSubview:button];
    self.view.backgroundColor = [UIColor greenColor];

}

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

点击事件:

- (void)buttonAction : (UIButton *)sender
{
//    NSLog(@"支付");

    /*
     *点击获取prodcut实例并初始化订单信息
     */
//    Product *product = [self.productList objectAtIndex:indexPath.row];

    /*
     *商户的唯一的parnter和seller。
     *签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。
     */

    /*============================================================================*/
    /*=======================需要填写商户app申请的===================================*/
    /*============================================================================*/
    // 16位的纯数字
    NSString *partner = @"2088。。公司唯一ID";
    // 收款账户
    NSString *seller = @"收款账号";
    NSString *privateKey = @"密钥";
    /*============================================================================*/
    /*============================================================================*/
    /*============================================================================*/

    //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 = @"123456"; //订单ID(由商家自行制定)
    order.productName = @"太空杯"; //商品标题
    order.productDescription = @"耐摔的太空杯"; //商品描述
    order.amount = [NSString stringWithFormat:@"%.2f",0.01]; //商品价格
    order.notifyURL =  @"http://www.lanou3g.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 = @"xiaohange";

    //将商品信息拼接成字符串
    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);
        }];

    }
}

//选中商品调用支付宝极简支付
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

}

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

最终效果:

每日更新关注:http://weibo.com/hanjunqiang 
新浪微博

iOS开发者交流QQ群:
446310206


iOS中 支付宝钱包详解/第三方支付 韩俊强的博客的更多相关文章

  1. iOS中 支付宝钱包具体解释/第三方支付 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! iOS开发人员交流QQ群: 446310206 一.在app中成功完毕支付宝支付的过程 1.申请支付宝钱包.參考网 ...

  2. iOS中 项目开发易错知识点总结 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 点击return取消textView 的响应者 - (BOOL)textFieldShouldReturn:(UI ...

  3. iOS中发送短信/发送邮件的实现 韩俊强的博客

    需要引入框架: MessageUI.framework 布局如下: 短信和邮件: #import "ViewController.h" #import <MessageUI/ ...

  4. HTML5中 HTML列表/块/布局 韩俊强的博客

    从简单到复杂HTML5详解:每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 1.HTML列表 1.有序 2.无序 3.有序star属性 4.有序无序列表 代码: ...

  5. iOS中 扫描二维码/生成二维码详解 韩俊强的博客

    最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: se ...

  6. iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 ...

  7. iOS中 扫描二维码/生成二维码具体解释 韩俊强的博客

    近期大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: se ...

  8. iOS中 HTTP/Socket/TCP/IP通信协议具体解释 韩俊强的博客

    简介: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 / ...

  9. iOS中 最新支付宝支付(AliPay) 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 现在的支付方式一般有三种, 支付宝, 微信, 网银. 个人觉得最简单易用的还是支付宝, 微信虽然看起来币支付宝要简单 ...

随机推荐

  1. Python Django rest framework

    本节内容 Django rest framework 安装 Django rest framwwork 环境配置 简单举例说明 Django中使用 rest framework 1.1 安装 Djan ...

  2. 二叉树的基本操作(含Huffman树)

    大二时候写的烂代码,翻出来复习复习(o(╯□╰)o). 代码: #include <stdio.h> #include <stdlib.h> #define Max_Size ...

  3. 面试题2:实现Singleton模式

    题目:设计一个类,我们只能生成该类的一个实例.

  4. 单选、多选框根据value值设置选中

    $("input:checkbox[value='video']").parent().addClass('checked'); $("input:radio[value ...

  5. Python学习札记-eval函数

    eval()函数 eval()官方文档里面给出来的功能解释是:将字符串string对象转化为有效的表达式参与求值运算返回计算结果 语法上:调用的是:eval(expression,globals=No ...

  6. 聊聊并发(一)深入分析Volatile的实现原理

    本文属于作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/ftf-java-volatile 引言 在多线程并发编程中synchronized和Vola ...

  7. spring web项目下,判断项目是否启动完成

    本文同时发布于见鬼网:https://faceghost.com/article/483341 概述:spring 加载完成后,我们有时候会做一些初始化工作,如加载一些缓存,DB,等,这里采用实现Se ...

  8. Python安装与环境变量

    Python安装与环境变量的配置  python下载: Python安装包下载地址:http://www.python.org/ 根据实际的操作系统,安装合适的安装版本.    Python安装: 本 ...

  9. 浅谈static其一之不死变量

    在学习汇编的过程中,小有所悟,遂把自己所思所想记下,以便日后查阅. 首先说说我对这个关键字的理解.static字面上就是静止的.静态的.不变的之类的意思,所以在被它修饰之后,应该也会带有这样的一些特点 ...

  10. C++框架_之Qt的窗口部件系统的详解-上

    C++框架_之Qt的窗口部件系统的详解-上 第一部分概述 第一次建立helloworld程序时,曾看到Qt Creator提供的默认基类只有QMainWindow.QWidget和QDialog三种. ...