支付宝

作者: iYeso | 来源:发表于2016-07-30 14:02 被阅读703次

一.支付宝集成的介绍

1.1 什么是支付方式?
  • 内购是用户将钱付款给苹果,之后苹果分成给商户
  • 支付宝是用户将钱付款给支付宝,之后支付宝将钱转入我们的账户
1.2 集成支付宝的步骤
  • 向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)和私钥(privateKey)
  • 下载支付宝SDK
  • 生成订单信息,签名加密
  • 调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
  • 支付完毕后,支付宝客户端会自动跳回到原来的应用程序
  • 在原来的应用程序中显示支付结果给用户看
1.3 支付流程

流程1:


Snip20160730_1.png

流程图二:官方版

Paste_Image.png

二.下载SDK

2.1 进入支付宝官网官网地址:https://www.alipay.com
2.2 点击商家中心
  • 如何签约

  • 进入下一个页面,可以点击右上角的如何签约

  • 在公司签约工作通常由产品完成

  • 我们只需和产品要商户ID(partner)和账号ID(seller)和私钥(privateKey)

  • 点击如何集成

  • 来到页面下方,点击移动支付


    移动支付
  • 下一个页面中,点击Demo下载


    下载demo
  • 来到移动支付功能,点击下载即可


    下载demo

三.集成流程

  • 1.项目中展示对应的商品内容
  • 2.当用户点击购买时,通过支付购买商品
  • 3.购买流程
  • 根据对应的商品,生成订单
  • 对订单进行签名加密
  • 调用支付宝客户端进行支付
  • 4.支付成功或者失败时回调
    • 如果手机内没安装支付宝的app,会直接展现支付宝web支付界面,通过callback返回支付结果;
    • 如果手机内安装了支付宝的app,会跳转到支付宝的app支付,然后通过openURL的回调返回支付结果。
   // 1.获取签约之后的三个数据
    NSString *partner = @"";
    NSString *seller = @"";
    NSString *privateKey = @"";

    // 2.生成订单和签名
    Order *order = [[Order alloc] init];
    order.partner = partner;
    order.seller = seller;
    order.tradeNO = nil; //订单ID(由商家自行制定)
    order.productName = product.name; //商品标题
    order.productDescription = product.detail; //商品描述
    order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品价格

    // 服务器的回调地址
    order.notifyURL =  @"http://www.xxx.com"; // 用户支付成功后,支付宝服务器会同步通知我们的服务器.我们服务器需要有一个可以回调的地址
    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 = @"alipay";

    //将商品信息拼接成字符串
    NSString *orderSpec = [order description];

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

    //将签名成功字符串格式化为订单字符串,请严格按照该格式
    NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
                       orderSpec, signedString, @"RSA"];

    // 跳转到支付宝进行支付
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        NSLog(@"reslut = %@",resultDic);
    }];

四 调用支付接口

在调用支付宝支付接口前,我们需要先生成一个订单,文档中描述时,是将这步也放在客户端来做了,但这个最好是 放在服务器端来做,后台生成订单然后拼接,签名,然后服务器端直接给客户端传一个加密签名过的参数就可以了,这样比较安全,官方demo上放在客户端生成订单并且签名是因为没有服务给你用啊,所以就客户端上生成了~~~。
我做的时候,为了安全,生成订单,拼接字符串,签名,都是在服务器上做的,所有的订单信息,商户信息等都掌握在自己的手中,这样的话APP端就不怕被拦截数据,并且调用起来也就特别简单了,只需要调用支付的接口,打开支付宝APP客户端进行支付就行了,没有用户的手机上没有安装支付宝客户端的话会调用网页来支付,也是一样的。
如果只需要发送订单和处理支付返回结果,只需要添加AlipaySDK.bundle和AlipaySDK.framework这两个就行了,下载的SDK中很容易发现。
快捷支付方法是这个:

-(void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr callback:(CompletionBlock)completionBlock;

在支付的按钮中,试用支付宝这个类,再调用这个方法就行啦!如下如:

在调用支付宝接口的时候,我们需要两个参数,orderString和APPScheme, APPScheme是app在info.plist注册的scheme。
orderstring 这个是一个订单的字符串,由后台拼接生成的,还需要签名的。例如:

在调用支付宝接口的时候,我们需要两个参数,orderString和APPScheme, APPScheme是app在info.plist注册的scheme。
orderstring 这个是一个订单的字符串,由后台拼接生成的,还需要签名的

例如:
partner="2088101568358171"&seller_id="xxx@alipay.com"&out_trade_no="0819145412-6177"&subject="测试"&body="测试测试"&total_fee="0.01"&notify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&input_charset="utf-8"&it_bpay="30m"&sign="lBBK%2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfHXoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJIe2pbjm%2F3kb%2FuGkpG%2BwYQYI51%2BhA3YBbvZHVQBYveBqK%2Bh8mUyb7GM1HxWs9k4%3D"&sign_type="RSA".

五 支付宝的坑

  1. Mac终端中输入 openssl 进入Openssl程序
  1. 生成私钥 命令 genrsa -out rsa_private_key.pem 1024
  2. iOS客户端需要将生成的私钥转换成PKCS8格式 命令 pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt 获取到pkcs8格式的字符串就是项目中需要的privatekey,取-----BEGIN PRIVATE KEY-----和 -----END PRIVATE KEY----- 中间的部分 切记!!!!
  3. 生成公钥 命令 rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
  • 2, 支付宝集成出现“系统繁忙,请稍后重试(ALI64)”错误的解决办法

1.用记事本打开上面第四步生成的公钥 rsa_public_key.pem,并将里面的密钥拷贝出来,粘贴到合作伙伴密钥管理中得RSA加密里,特别需要注意的是,需要将密钥中的空格、回车等删除,使该密钥为一行字符串。
2.用记事本打开上面第四步生成的公钥 rsa_public_key.pem,并将里面的密钥拷贝出来,粘贴到开放平台密钥管理中得RSA加密里,特别需要注意的是,需要将密钥中的空格、回车等删除,使该密钥为一行字符串。

  • 3, 设置一下search paths

build setting ->搜索search path,然后你懂的
完成后,编译一下,看有没有错,有错没错,还是下一步吧。

  • 4, 你可能会发现回调不行->设置回调shema
//上面支付时已经传给了支付宝客户端回调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;
}
  1. iOS 支付宝集成中的那些坑
  2. 集成支付宝钱包支付iOS SDK的方法与经验
  3. IOS集成到支付宝的步骤及问题
  4. 这个也是遇到的一些问题和解决方法
  5. iOS应用之支付宝集成总结
  6. iOS 集成支付宝

相关文章

  • 奖品合集

    支付宝44.44x12 支付宝200x1 支付宝121x1 支付宝111x1 支付宝100x1 支付宝88x1 支...

  • Android支付宝支付集成

    Android支付宝支付 标签: android Android支付宝支付使用的流程介绍 支付宝流程介绍 支付宝流...

  • 历害word哥,支付宝AR红包风靡朋友圈

    支付宝又来搞事情,2016年12月22日,支付宝又出新玩法:支付宝AR红包! 支付宝用户可以利用支付宝的红包功能:...

  • iOS支付宝功能集成

    iOS快速集成支付宝详解/支付宝集成获取私钥与公钥 在集成支付宝功能前,我们必须了解下什么支付宝流程,下图是支付宝...

  • 支付宝小程序相关文档

    支付宝开放平台文档 支付宝开放平台文档 支付宝开放平台文档 支付宝开放平台文档 获取手机号信息

  • 对接支付宝支付接口开发笔记

    支付宝对接学习笔记: 功能介绍: 支付宝对接 支付宝回调 查询支付状态(略过不讲) 要求: 熟悉支付宝对接核心文档...

  • 支付宝支付

    支付宝集成的介绍 第三方支付平台,支付宝是用户将钱付款给支付宝,之后支付宝将钱转入我们自己的账户。 集成支付宝的步...

  • ## [iOS 支付宝支付]

    [iOS开发系列-支付宝支付] 概述 开发中支付通常都会集成支付宝支付,下面讲解支付宝的整体流程。 集成支付宝支付...

  • 20180714早骑行20公里

    支付宝image.png支付宝的大楼还是很有特色的,类似古代的方形钱币。支付宝下面有很多银行。所以,支付宝和银行的...

  • UIWebView调起支付宝和微信客户端与回调的处理

    支付宝调起客户端 微信调起客户端 支付宝支付完成回调 根据支付宝官方给出回复,目前通过WebView调起支付宝客户...

网友评论

    本文标题: 支付宝

    本文链接:https://www.haomeiwen.com/subject/gfttsttx.html