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

现在的支付方式一般有三种, 支付宝, 微信, 网银. 个人觉得最简单易用的还是支付宝, 微信虽然看起来币支付宝要简单,但是后端太麻烦了, 网银就不说了.

先放出官方文档,免得还有人找不到文档: https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&docType=1

环境搭建

  • 下载AliPayDK,官方链接,更新时间:2016/01/28 : http://aopsdkdownload.cn-hangzhou.alipay-pub.aliyun-inc.com/demo/WS_MOBILE_PAY_SDK_BASE.zip?spm=0.0.0.0.y0oP1q&file=WS_MOBILE_PAY_SDK_BASE.zip

    如果下载失败,请换个浏览器(至少我用QQ浏览器没有下载成功)

  • 所需文件导入

    1.按以下路径

    ~/支付宝钱包支付接口开发包2.0标准版(20160120)/DEMO/客户端demo/支付宝钱包支付接口开发包2.0标准版(iOS 15.0.6)

    找到库文件AlipaySDK.framework和资源包AlipaySDK.bundle拖入到你的工程中,

    2.AliSDKDemo中libcrypto.a和libssl.a导入到你的工程

    3.~/AliSDKDemo/AliSDKDemo下的openssl文件夹,Util文件夹,Order.h,Order.m拖入工程

    4.导入以下库

    如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;

    如果是Xcode 7.0之前的版本,需要添加libc++.dylib、libz.dylib

  • 工程设置修改

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

    1.info.plist配置

    如果是iOS9.0之后(Xcode7.0)在info.plist中增加以下字典

    (也可以单独配置,有需要的请看官方文档)

设置Schemes

在info下 URL Types设置你的Schemes

2.Build Settings配置

以关键字“search”搜索,对“Header Search Paths”增加头文件路径:$(SRCROOT)/项目名称

3.这时候编译会报错,错误信息是

Cannot find interface declaration for 'NSObject', superclass of 'Base64'

那么需要打开报错了的文件,增加头文件。

import <Foundation/Foundation.h>

再编译,就ok了

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

iOS开发者交流QQ群:
446310206

支付信息配置

在需要支付的文件中导入头文件

<code class="language-Objective-C hljs vala has-numbering"><span class="hljs-preprocessor">#import <AlipaySDK/AlipaySDK.h></span>
<span class="hljs-preprocessor">#import "DataSigner.h"</span>
<span class="hljs-preprocessor">#import "Order.h"</span></code>

配置订单信息

这些都是示例信息,这些事不能完成支付的,要以实际信息为准才能完成支付

<code class="language-Objective-C hljs objectivec has-numbering"><span class="hljs-comment">//商户ID</span>
    <span class="hljs-built_in">NSString</span> *partner = @<span class="hljs-string">""</span>;
    <span class="hljs-comment">//收款账户</span>
    <span class="hljs-built_in">NSString</span> *seller = @<span class="hljs-string">""</span>;
    <span class="hljs-comment">//私钥</span>
    <span class="hljs-built_in">NSString</span> *privateKey = @<span class="hljs-string">""</span>;
    <span class="hljs-keyword">if</span> (partner<span class="hljs-variable">.length</span> == <span class="hljs-number">0</span> || seller<span class="hljs-variable">.length</span> ==<span class="hljs-number">0</span> || privateKey<span class="hljs-variable">.length</span> == <span class="hljs-number">0</span>) {
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@<span class="hljs-string">"提示"</span> message:@<span class="hljs-string">"缺少partner或者seller或者私钥。"</span> preferredStyle:(UIAlertControllerStyleAlert)];
        UIAlertAction *action = [UIAlertAction actionWithTitle:@<span class="hljs-string">"确定"</span> style:(UIAlertActionStyleDefault) handler:<span class="hljs-literal">nil</span>];
        [alert addAction:action];
        [<span class="hljs-keyword">self</span> presentViewController:alert animated:<span class="hljs-literal">YES</span> completion:<span class="hljs-literal">nil</span>];
    }
    <span class="hljs-comment">//订单类</span>
    Order *order = [[Order alloc]init];
    order<span class="hljs-variable">.partner</span> = partner;
    order<span class="hljs-variable">.seller</span> = seller;
    order<span class="hljs-variable">.tradeNO</span> = @<span class="hljs-string">"234927348"</span>;<span class="hljs-comment">//订单号</span>
    order<span class="hljs-variable">.productName</span> = @<span class="hljs-string">"商品名称"</span>;
    order<span class="hljs-variable">.productDescription</span> = @<span class="hljs-string">"商品描述"</span>;
    order<span class="hljs-variable">.amount</span> = [<span class="hljs-built_in">NSString</span> stringWithFormat:@<span class="hljs-string">"%.2f"</span>, <span class="hljs-number">0.01</span>];<span class="hljs-comment">//价格</span>
    order<span class="hljs-variable">.notifyURL</span> =  @<span class="hljs-string">"http://blog.csdn.net/fish_yan_?viewmode=list"</span>; <span class="hljs-comment">//回调网址</span>
    order<span class="hljs-variable">.service</span> = @<span class="hljs-string">"mobile.securitypay.pay"</span>;
    order<span class="hljs-variable">.paymentType</span> = @<span class="hljs-string">"1"</span>;
    order<span class="hljs-variable">.inputCharset</span> = @<span class="hljs-string">"utf-8"</span>;
    order<span class="hljs-variable">.itBPay</span> = @<span class="hljs-string">"30m"</span>;
    order<span class="hljs-variable">.showUrl</span> = @<span class="hljs-string">"m.alipay.com"</span>;

    <span class="hljs-built_in">NSString</span> *appScheme = @<span class="hljs-string">"xueyan"</span>;

    <span class="hljs-comment">//将商品信息拼接成字符串</span>
    <span class="hljs-built_in">NSString</span> *orderSpec = [order description];

    <span class="hljs-comment">//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode</span>
    <span class="hljs-keyword">id</span><DataSigner> signer = CreateRSADataSigner(privateKey);
    <span class="hljs-built_in">NSString</span> *signedString = [signer signString:orderSpec];

    <span class="hljs-comment">//将签名成功字符串格式化为订单字符串,请严格按照该格式</span>
    <span class="hljs-built_in">NSString</span> *orderString = <span class="hljs-literal">nil</span>;
    <span class="hljs-keyword">if</span> (signedString != <span class="hljs-literal">nil</span>) {
        orderString = [<span class="hljs-built_in">NSString</span> stringWithFormat:@<span class="hljs-string">"%@&sign=\"%@\"&sign_type=\"%@\""</span>,
                       orderSpec, signedString, @<span class="hljs-string">"RSA"</span>];

        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(<span class="hljs-built_in">NSDictionary</span> *resultDic) {
            <span class="hljs-comment">//【callback处理支付结果】</span>
            <span class="hljs-built_in">NSLog</span>(@<span class="hljs-string">"reslut = %@"</span>,resultDic);
        }];
    }</code>

就这么多,如果手机装有支付宝客户端, 则直接调用客户端,如果没有客户端则调用网页版

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

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

上一版本支付宝支付博文详解:http://blog.csdn.net/qq_31810357/article/details/50374378

gitHub下载demo:https://github.com/XiaoHanGe/AliPay

iOS开发者交流QQ群:
446310206

iOS中 最新支付宝支付(AliPay) 韩俊强的博客的更多相关文章

  1. iOS中 Realm错误总结整理 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 一.错误信息:Attempting to modify object outside of a write tra ...

  2. iOS中 动态热修补技术JSPatch 韩俊强的博客

    .1.4) JSPatch bridge Objective-C and JavaScript. You can call any Objective-C class and method in Ja ...

  3. iOS中 MediaPlayer framework实现视频播放 韩俊强的博客

    iOS开发中播放音乐可以使用MPMusicPlayerController类来实现,播放视频可以使用MPMoviePlayerController和MPMoviePlayerViewControlle ...

  4. iOS中 断点下载详解 韩俊强的博客

    布局如下: 基本拖拉属性: #import "ViewController.h" #import "AFNetworking.h" @interface Vie ...

  5. HTML5中 基本用法及属性 韩俊强的博客

    从今天开始更新H5相关学习:希望大家能一起学习,多学习一门语言,多一门乐趣! 了解Html5: Html5基本属性: <!DOCTYPE html> <html lang=" ...

  6. iOS开发中的零碎知识点笔记 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 1.关联 objc_setAssociatedObject关联是指把两个对象相互关联起来,使得其中的一个对象作为另外 ...

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

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

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

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

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

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

随机推荐

  1. mooc-python语言语法week3-6

    week3 1.类型的概念:程序编程不允许有歧义的数据类型存在,所以对数据进行了划分,python语言类型分为,数字类型.字符串类型.元组类型.列表类型.文件类型.字典类型. i:数字类型: pyth ...

  2. C语言程序设计第二次作业——顺序结构

    (一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. 错误信息1: 错误原因:i和d位置错误 改正方法:i和d位置互换 错误信息2: 错误原因:\n后缺了一个" 改正方法:\n后加一个 ...

  3. C语言程序设计第六次作业--循环结构2

    (一)改错题 序列求和:输入一个正实数eps,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精确到最后一项的绝对值小于eps(保留6位小数). 输入输出样例: Input e ...

  4. PowerBI 第九篇:修改查询

    在PowerBI的查询编辑器中,用户可以使用M语言修改Query,或修改Query字段的类型,或向Query中添加数据列(Column),对Query进行修改会导致PowerBI相应地更新数据模型(D ...

  5. flask jQuery ajax 上传文件

    1.html 代码 <div> <form id="uploadForm" enctype="multipart/form-data" > ...

  6. json转化为对象数组

    1.ascx传值给aspx aspx页面 <%@ Page Title="" Language="C#" MasterPageFile="~/_ ...

  7. MockHttpServletRequestBuilder中content和param的区别

    结论: Mock将URL的参数和通过使用param添加的参数添加到request中的parameter中(url参数) 而将content内容.类型并没有进行解析,直接添加到request的conte ...

  8. 在循环列表的富文本里摘出每个item的img标签内容(适合vue渲染)

    昨天在做公司项目的社区动态内容.后台接口返回的数据是数组套对象,对象里有富文本,然后需要摘出富文本里的img标签在列表里分开渲染(即图片九宫格样式).最终效果如图: 这个是后盾接口返回的json数据 ...

  9. python学习之路基础篇(第四篇)

    一.课程内容回顾 1.python基础 2.基本数据类型  (str|list|dict|tuple) 3.将字符串“老男人”转换成utf-8 s = "老男人" ret = by ...

  10. south 命令学习

    south 命令学习 概述 在django某个版本之前,django自身提供一个创建数据库的命令-syncdb,它会根据model来创建相应的表,但是这个命令不好的地方在于,如果想要对model进行更 ...