iOS中 支付宝钱包详解/第三方支付 韩俊强的博客

时间:2021-10-13 22:56:15

每日更新关注: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开发时需要做的,就是完成这个支付流程。

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

第一步:引入框架

iOS中 支付宝钱包详解/第三方支付 韩俊强的博客

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

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

iOS中 支付宝钱包详解/第三方支付 韩俊强的博客

每日更新关注: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 
新浪微博

最终效果:

iOS中 支付宝钱包详解/第三方支付 韩俊强的博客

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

iOS开发者交流QQ群:
446310206


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. iOS中 最新支付宝支付&lpar;AliPay&rpar; 韩俊强的博客

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

随机推荐

  1. 【Bugly干货分享】手把手教你逆向分析 Android 程序

    很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下. 第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的 ...

  2. 使用xpath时出现noDefClass的错误(找不到某个类)

    今天继续封装下jdom 发现jdom引用了个jaxen的jar 如果不导入这个库,使用xpath时出现noDefClass的错误(找不到某个类) 到csdn上 下了个 ok 同时研究了下List的to ...

  3. eclipse中SVN分支合并到主干

    在项目开发中,需要添加一些新的功能,但是又不想影响到其他开发人员的项目进度,所以决定使用SVN分支进行开发,分支开发完毕后再合并到主干.本文介绍如何在eclipse中合并分支到主干. 1. 要想将分支 ...

  4. Linux学习-0626

    6.26 Linux的安装1.下载镜像包.iso,启动时设置光盘的包是安装包,就可以看到完成安装流程 安装CentOS 5.52.安装时分区,swap分区,根分区... Linux管理工具:1.Sec ...

  5. CodeForces 489C Given Length and Sum of Digits&period;&period;&period; (贪心)

    Given Length and Sum of Digits... 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/F Descr ...

  6. PyQt IDE 环境搭建

    Eric的安装 1.按照目前pyqt5的要求安装了python3的最新版 2 pip3 install PyQt5 3. pip3 install QScintilla 4.download eric ...

  7. 【转】深入理解margin

    由浅入深漫谈margin属性 2007-3-18 上午 - HTML/CSS/XML/XSL - CSS - margin margin 在中文中我们翻译成外边距或者外补白(本文中引用外边距).他是元 ...

  8. 五 Struts 配置文件

    一.struts.xml详解1.package:包 属性:name=命名 namespace=在action访问路径前面加的前缀 extends=继承另外的包 action:name=action的访 ...

  9. 了解java虚拟机—JVM相关参数设置(2)

    1.   JVM相关参数设置 JVM相关配置 -XX:+PrintGC 两次次YoungGC,两次FullGC. -XX:+PrintGCDetails 打印GC时的内存,并且在程序结束时打印堆内存使 ...

  10. iOS-不用微信SDK唤起微信支付

    作者:TianBai 原文链接:http://www.jianshu.com/p/8930b4496023 要想知道微信SDK是如何调起微信客户端,那么咱们先看看微信SDK到底做了什么 前期准备 接入 ...