IOS开发之—— IOS 支付 [支付宝、银联、微信]

支付宝iOSsdk官方下载sdk地址:https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId=4#ps-tabinfo-hash

快捷支付(无线)是一种程序式的支付方式,在手机、掌上电脑等无线设备的应用程序内,买家可通过支付宝进行付款购买特定服务或商品,资金即时到账。

第一步:

1 公司账户:企业支付宝账号就申请 注册企业账号,如果是个人账户,就申请个体工商户。

接入前准备阶段

    1. 商户签约审核
      签约审核具体步骤请参见签约与审核
    2. 商户密钥管理
      密钥作用
      1. 生成步骤
      2. 上传步骤

正式接入阶段

服务端 负责生成订单及签名,及接受支付异步通知。
客户端 负责使用服务端传来的订单信息调用支付宝支付接口,及根据SDK同步返回的支付结果展示结果页。

服务端接入

私钥必须放在服务端,签名过程必须放在服务端。

  1. 准备

    1. 确定开发语言
    2. 确定编码格式
    3. 确定签名方式(PID + 密钥)
    4. 确定服务器配置
  2. 支付订单参数拼装及加签
  3. 通知处理什么时候会通知?收到通知时注意验签。

客户端接入

    1. iOS接入

      1. 接口说明
      2. Demo示例(为了demo方便请求参数拼装和加签都放在了客户端, 应该都放服务端 )
    2. Android接入
      1. 接口说明
      2. Demo示例(为了demo方便请求参数拼装和加签都放在了客户端, 应该都放服务端 )
    3. 请求参数说明
    4. 结果参数说明

导入代码

更新时间:2015/11/05 访问次数:58075

步骤1:启动IDE(如Xcode),把iOS包中的压缩文件中以下文件拷贝到项目文件夹下,并导入到项目工程中。


1

2

AlipaySDK.bundle

AlipaySDK.framework

在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:

其中,需要注意的是:

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

步骤2:在需要调用AlipaySDK的文件中,增加头文件引用。


1

#import <AlipaySDK/AlipaySDK.h>

如果你的app基于9.0编译,那么为了适配iOS9.0中的App Transport Security(ATS)对http的限制,这里需要对支付宝的请求地址alipay.com、alipayobjects.com做例外,在app对 应的info.list中添加如下配置(文中以XML格式描述)。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<key>NSAppTransportSecurity</key>

    <dict>

        <key>NSExceptionDomains</key>

        <dict>

            <key>alipay.com</key>

            <dict>

                <key>NSIncludesSubdomains</key>

                <true/>

                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>

                <true/>

                <key>NSTemporaryExceptionMinimumTLSVersion</key>

                <string>TLSv1.0</string>

                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>

                <false/>

            </dict>

            <key>alipayobjects.com</key>

            <dict>

                <key>NSIncludesSubdomains</key>

                <true/>

                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>

                <true/>

                <key>NSTemporaryExceptionMinimumTLSVersion</key>

                <string>TLSv1.0</string>

                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>

                <false/>

            </dict>

        </dict>

    </dict>

说明:

如果商户配置了如下的配置:


1

2

3

4

<key>NSAppTransportSecurity</key>

    <dict>   

        <key>NSAllowsArbitraryLoads</key><true/>

    </dict>

则上述的NSAppTransportSecurity可以不配置。

步骤3:对接,对接之前,需要索取后台的很多信息

//合作身份者id,以2088开头的16位纯数字
#define PartnerID           @"2088一串数字"
//收款支付宝账号/接口名称
#define SellerID            @"[email protected]"

//支付宝公钥
#define AlipayPubKey        @"MIGf一串很长很长信息"

//商户私钥,自助生成
#define PartnerPrivKey   @"很长很长很长"

//服务器异步通知页面路径/支付结果,支付宝会通知服务器

alipayNotifServerURL = @"一个网址"

步骤4:配置请求信息。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

Order *order = [[Order alloc] init];

order.partner = partner;

order.seller = seller;

order.tradeNO = [self generateTradeNO]; //订单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";

//应用注册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) {

//【callback处理支付结果】

            NSLog(@"reslut = %@",resultDic);

   }];

        

   [tableView deselectRowAtIndexPath:indexPath animated:YES];

}

详细可参见Demo中示例文件

  • AliSDKDemo\APViewController.h
  • AliSDKDemo\APViewController.m
  • AliSDKDemo\Order.h
  • AliSDKDemo\Order.m

步骤5:调用支付宝


1

2

3

4

5

6

7

8

9

10

11

12

[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {

                            NSLog(@"reslut = %@",resultDic);

                            if ([resultDic[@"resultStatus"] intValue]==9000) {

                                //进入充值列表页面

                                NSLog(@"支付成功");

                            }

                            else{

                                NSString *resultMes = resultDic[@"memo"];

                                resultMes = (resultMes.length<[email protected]"支付失败":resultMes);

                                NSLog(@"%@",resultMes);

                            }

    }];

你可能会发现回调不行->设置回调shema


1

2

3

4

5

6

7

8

9

10

11

12

13

14

//上面支付时已经传给了支付宝客户端回调shema名称

 NSString *appScheme = URLScheme;

 //具体设置shema方法此处就不再累赘,这儿需要处理来自支付宝shema回调,才能完成上面方法的block回调

 在APPDelegate -

  - (BOOL)application:(UIApplication *)application

            openURL:(NSURL *)url

  sourceApplication:(NSString *)sourceApplication

         annotation:(id)annotation {

         //跳转支付宝钱包进行支付,处理支付结果

    [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {

        NSLog(@"result = %@",resultDic);

    }];

    return YES;

}

二、银联支付UPPay

银联sdk下载网址:https://open.unionpay.com/upload/download/Development_kit85427986.rar

2.1 请去看银联文档和demo

2.2 导入对应的库

SDK说明

SDK分为以下两个版本:

①    支持纯无卡交易静态库,以下简称UPPayPlugin,包含文件:


1

2

3

UPPayPlugin.h

UPPayPluginDelegate.h

libUPPayPlugin.a

②    支持纯无卡交易和VIPOS音频口支付静态库,以下简称UPPayPluginPro,包含文件:


1

2

3

UPPayPluginPro.h

UPPayPluginDelegate.h

libUPPayPluginPro.a

大概这两个库就是上述那样(嗯,装懂了),具体问商务/后者后台,我们只需要知道

②需要将.m改成.mm (应该是用c++封装的音频...??)

添加SDK包

a)    根据商户选择的SDK版本,将sdk/inc目录和sdk/libs目录下对应版本的三个文件添加到UPPayDemo工程中;

b)    如果你选择的是UPPayPlugin版本,添加QuartzCore.framework、Security.framework到工程中;

c)    如果你选择的是UPPayPluginPro版本,添加QuartzCore.framework、AudioToolbox.framework, CoreAudio.framework、 MediaPlayer.framework, AVFoundation.framework和Security.framework到工程中;

d)    在工程的Build Settings中找到Other Linker Flags中添加-ObjC宏;

导入到工程

2.3 对接

  1. 在需要调用支付控件的源文件内引用头文件 UPPayPlugin.h 或 UPPayPluginPro.h(注意:如果工程的 compile source as 选项的值不是 Objective–C++,则引用此头文件的文件类型都要改为.mm)
  2. 通过调用一下startPay方法

1

2

3

4

 + (BOOL)startPay:(NSString*)tn 

mode:(NSString*)mode 

viewController:(UIViewController*)viewController 

delegate:(id)delegate;

-------------2个参数说明(必填)-------------------


1

2

3

4

tn                 NSString*                   交易流水号信息,银联后台生成,通过商户后台返回到客户端并传入支付控件; 

mode            NSString*                 接入模式设定,两个值:@"00":代表接入生产环境(正式版本需要);@"01":代表接入开发测试环境(测试版本需要);

viewController    UIViewController*          商户应用程序调用银联手机支付的当前UIViewController;

delegate        id     实现UPPayPluginDelegate方法的UIViewController;

嗯,这些都是文档中的,请仔细看看[上线的时候一定要修改mode模式]。

mode在测试环境下,银联给的测试号 [email protected]"01" 测试环境

  • 测试使用卡号、手机号信息(此类信息仅供测试,不会发生正式交易)招商银行预付费卡:
  • 银行卡号:6216261000000000018
  • 身份证号:341126197709218366
  • 手 机 号 :13552535506
  • 验 证 码 :123456 【要点击获取验证码,不然提交会报错】

viewcontroller需要干这些事情

*引入头文件  \#import "UPPayPluginPro.h"

*调用接口

        [UPPayPluginPro startPay:tn mode:self.tnMode viewController:self delegate:self];

*实现对应代理方法

        \#pragma mark UPPayPluginResult

        - (void)UPPayPluginResult:(NSString \*)result

        {

            NSString\* msg = [NSString stringWithFormat:@"%@", result];

            NSLog(@"msg%@",msg);

            if ([result isEqualToString:@"msgcancel"]) {

                NSLog(@"取消银联支付...");

            }

            else if([result containsString:@"success"]){

                NSLog(@"支付成功");

            }

      }

三、微信支付

微信sdk下载网址:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1

3.1 请去看微信文档和demo

微信支付工作之前的流程:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317780&token=ac5f0fd38fc8821171addbfdf5cc7d3af93cb305&lang=zh_CN

微信支付文档地址:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_1

3.2 导入对应的库

    1.开发微信APP支付,需要先去微信开放平台申请移动应用,并开通微信支付功能,通过审核后方可进行开发;
    2.用XCode打开项目,【项目属性】-【Info】-【URL Schemes】设置微信开放平台申请的应用APPID,如图文件夹下"设置appid.jpg"所示。如果这的APPID设置不正确将无法调起微信支付;
    3.需要调用代码注册APPID:[WXApi registerApp:APP_ID withDescription:@"demo 2.0”];项目该APPID需与步骤2中APPID保持一致;
    4.支付请求:WXApiRequestHandler.m中的jumpToBizPay方法实现了唤起微信支付;
    5.支付完成回调:WXApiManager.m中的onResp方法中接收返回支付状态。

希望各位多多指教。

时间: 2024-08-04 20:19:02

IOS开发之—— IOS 支付 [支付宝、银联、微信]的相关文章

WordPress按钮秒支付插件发布,支持微信支付,支付宝,银联,京东,苏宁,易宝支付

痛点: 我们用WordPress建设网站和开发移动应用,有时候我们其实不需要太多的流程,只是需要一个收款通道,但是可能对支持的渠道更加关注,特别是手机应用.所以WordPress按钮秒支付插件诞生了,它是一个快速收款工具,只需要在后台填入金额,然后把这个按钮放在任意网站,或者微信,或者微博里面,就能实现收款. 特点: 功能特征 WordPress按钮支付插件,收款更轻松 轻松接入;插件模式即插即用,按需接入   自适应显示平台,兼容PC端页面和移动端H5页面   主流支付渠道全覆盖,支持微信支付

iOS开发系列--IOS程序开发概览ios基础

iOS开发系列--IOS程序开发概览 2014-08-04 19:42 by KenshinCui, 72273 阅读, 81 评论, 收藏,  编辑 概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的知识是你日后开发IOS的基础,没有那些知识你开发IOS会很痛苦,现在很多开发人员做开发都是一知半解,程序质量确实令人担忧,所以还是希望大家能够熟练掌

**iOS开发系列--IOS程序开发概览

http://www.cnblogs.com/kenshincui/p/3890880.html 概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的知识是你日后开发IOS的基础,没有那些知识你开发IOS会很痛苦,现在很多开发人员做开发都是一知半解,程序质量确实令人担忧,所以还是希望大家能够熟练掌握前面的内容,开发过程中多思考,彻底理解程序运行的原理

[IOS开发教程] iOS如何固定UITableView中cell.imageView.image的图片大小

凡是进行ios开发的,基本上都会遇到要展示列表,或者即使不是标准列表,但由于数量不固定,也需要如同列表一样从上往下显示.加载的情况.这些,都绕不过对UITableView的使用. 在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是UITableView.当然它的广泛使用自然离不开它强大的功能. 我们经常在开发过程中会用到默认UITableView的cell.imageView.image,如果图

使用VirtualXposed开发自动批量生成支付宝和微信的收款码的支付宝微信监控APP

1.基于VirtualXposed-0.9.8开发. 2.在VirtualXposed中安装支付宝.微信.收款码生成和订单监控APP(需要卸载之前的支付宝微信app). 3.加载APP模块,重启VirtualXposed. 4.登陆微信,登陆支付宝. 5.通过收款码生成和订单监控APP批量生成支付宝和微信的收款码. 6.通过收款码生成和订单监控APP监控支付宝的支付订单信息,监控微信的支付订单信息. 原文地址:https://www.cnblogs.com/dhsunny/p/9610270.h

iOS开发笔记--iOS中的多线程

摘要 本文主要介绍iOS开发中的三种多线程技术:NSThread, NSOperation/NSOperationQueue, GCD.以及在多线程编程中的注意点和小技巧. 多线程 NSThread NSOperation/NSOperationQueue GCD 目录[-] iOS中的多线程 iOS的三种多线程技术特点: GCD基本思想 队列: 操作: 不同队列中嵌套同步操作dispatch_sync的结果: 同步操作dispatch_sync的应用场景: GCD优点: GCD队列: NSOp

iOS开发笔记--iOS开发规范

iOS开发规范 原文地址:http://blog.csdn.net/pjk1129/article/details/45146955 引子 在看下面之前,大家自我检测一下自己写的代码是否规范,代码风格是否过于迥异阅读困难?可以相互阅读同伴的代码,是否存在阅读障碍? 若存在晦涩难懂的,理解成本增大的代码,说明你的团队需要自省了. 下面总结一下OC编程中的一些代码规范(苹果官方推荐的).以OC为示例,但不局限于OC,也可以被当作别的编程语言的开发规范约定(仅需要把OC特有的东西按照你所使用的语言的惯

iOS开发笔记--iOS图解多线程

iOS图解多线程 前言 多线程一直是iOS开发中重中之重的话题,无论是面试还是真正在公司中进行业务开发,都会经常使用到多线程来开发.笔者在简书上看到一张图,记录的是多线程的相关知识,笔者认为这是非常好的,推荐给大家! 多线程 原文地址:http://www.henishuo.com/ios-multithread-detail/

如何学习iOS开发?iOS Developer Library足矣!

记得上高中的时候,寄信请教二哥学习经验,二哥来信介绍学习经验说:资料书要快速阅读,把书上的题做完,然后再买几套资料书(习题集)继续练习. 这是二哥的经验,因为他自学能力强,可以消化多套资料书. 我仿照二哥的学习经验,高中一学期买3.4套资料书,东一榔头西一棒,哪套都没学精学透. 实践证明,资料不在多,而在精,人的精力有限,用最宝贵的时间学习最经典.优秀的资料,和风险管理纳税评估的理念也是想通的,2/8原则,用百分之八十的精力,专注处理最重要.最优先.最容易出成效的百分之二十的事情. iOS De